Added support for dragBoundFunc where custom dragbounds (or constraints) can be defines.

This commit is contained in:
David Johansson
2012-08-13 21:19:36 +02:00
parent 8c147ee2b5
commit 15fe79873c
4 changed files with 28 additions and 14 deletions

19
dist/kinetic-core.js vendored
View File

@@ -3,7 +3,7 @@
* http://www.kineticjs.com/ * http://www.kineticjs.com/
* Copyright 2012, Eric Rowell * Copyright 2012, Eric Rowell
* Licensed under the MIT or GPL Version 2 licenses. * Licensed under the MIT or GPL Version 2 licenses.
* Date: Aug 10 2012 * Date: Aug 13 2012
* *
* Copyright (C) 2011 - 2012 by Eric Rowell * Copyright (C) 2011 - 2012 by Eric Rowell
* *
@@ -2294,7 +2294,7 @@ Kinetic.Node._addGetter = function(constructor, attr) {
}; };
}; };
// add getters setters // add getters setters
Kinetic.Node.addGettersSetters(Kinetic.Node, ['x', 'y', 'scale', 'detectionType', 'rotation', 'alpha', 'name', 'id', 'offset', 'draggable', 'dragConstraint', 'dragBounds', 'listening']); Kinetic.Node.addGettersSetters(Kinetic.Node, ['x', 'y', 'scale', 'detectionType', 'rotation', 'alpha', 'name', 'id', 'offset', 'draggable', 'dragConstraint', 'dragBounds', 'dragBoundFunc', 'listening']);
Kinetic.Node.addSetters(Kinetic.Node, ['rotationDeg']); Kinetic.Node.addSetters(Kinetic.Node, ['rotationDeg']);
/** /**
@@ -3509,8 +3509,9 @@ Kinetic.Stage = Kinetic.Container.extend({
if(node) { if(node) {
var pos = that.getUserPosition(); var pos = that.getUserPosition();
var dc = node.attrs.dragConstraint;
var db = node.attrs.dragBounds; var db = node.attrs.dragBounds;
var dbf = node.attrs.dragBoundFunc;
var dc = node.attrs.dragConstraint;
var lastNodePos = { var lastNodePos = {
x: node.attrs.x, x: node.attrs.x,
y: node.attrs.y y: node.attrs.y
@@ -3536,16 +3537,22 @@ Kinetic.Stage = Kinetic.Container.extend({
newNodePos.y = db.bottom; newNodePos.y = db.bottom;
} }
node.setAbsolutePosition(newNodePos); if(dbf !== undefined) {
// execute dragBoundFunc if defined
dbf(newNodePos, evt);
}
// constraint overrides // constraint overrides
if(dc === 'horizontal') { if(dc === 'horizontal') {
node.attrs.y = lastNodePos.y; newNodePos.y = lastNodePos.y;
} }
else if(dc === 'vertical') { else if(dc === 'vertical') {
node.attrs.x = lastNodePos.x; newNodePos.x = lastNodePos.x;
} }
node.setAbsolutePosition(newNodePos);
if(!go.drag.moving) { if(!go.drag.moving) {
go.drag.moving = true; go.drag.moving = true;
// execute dragstart events if defined // execute dragstart events if defined

File diff suppressed because one or more lines are too long

View File

@@ -1079,7 +1079,7 @@ Kinetic.Node._addGetter = function(constructor, attr) {
}; };
}; };
// add getters setters // add getters setters
Kinetic.Node.addGettersSetters(Kinetic.Node, ['x', 'y', 'scale', 'detectionType', 'rotation', 'alpha', 'name', 'id', 'offset', 'draggable', 'dragConstraint', 'dragBounds', 'listening']); Kinetic.Node.addGettersSetters(Kinetic.Node, ['x', 'y', 'scale', 'detectionType', 'rotation', 'alpha', 'name', 'id', 'offset', 'draggable', 'dragConstraint', 'dragBounds', 'dragBoundFunc', 'listening']);
Kinetic.Node.addSetters(Kinetic.Node, ['rotationDeg']); Kinetic.Node.addSetters(Kinetic.Node, ['rotationDeg']);
/** /**

View File

@@ -785,8 +785,9 @@ Kinetic.Stage = Kinetic.Container.extend({
if(node) { if(node) {
var pos = that.getUserPosition(); var pos = that.getUserPosition();
var dc = node.attrs.dragConstraint;
var db = node.attrs.dragBounds; var db = node.attrs.dragBounds;
var dbf = node.attrs.dragBoundFunc;
var dc = node.attrs.dragConstraint;
var lastNodePos = { var lastNodePos = {
x: node.attrs.x, x: node.attrs.x,
y: node.attrs.y y: node.attrs.y
@@ -812,16 +813,22 @@ Kinetic.Stage = Kinetic.Container.extend({
newNodePos.y = db.bottom; newNodePos.y = db.bottom;
} }
node.setAbsolutePosition(newNodePos); if(dbf !== undefined) {
// execute dragBoundFunc if defined
dbf(newNodePos, evt);
}
// constraint overrides // constraint overrides
if(dc === 'horizontal') { if(dc === 'horizontal') {
node.attrs.y = lastNodePos.y; newNodePos.y = lastNodePos.y;
} }
else if(dc === 'vertical') { else if(dc === 'vertical') {
node.attrs.x = lastNodePos.x; newNodePos.x = lastNodePos.x;
} }
node.setAbsolutePosition(newNodePos);
if(!go.drag.moving) { if(!go.drag.moving) {
go.drag.moving = true; go.drag.moving = true;
// execute dragstart events if defined // execute dragstart events if defined