dynamic drag layer setup now does deep copy of Groups and Layers when reconstructing ancestors

This commit is contained in:
Eric Rowell 2013-01-28 21:27:08 -08:00
parent 1bcdd15f45
commit 79fecd2c13
3 changed files with 14 additions and 21 deletions

View File

@ -18,22 +18,12 @@
// re-construct node tree // re-construct node tree
no._eachAncestorReverse(function(node) { no._eachAncestorReverse(function(node) {
if(node.nodeType === 'Layer') { if(node.nodeType === 'Layer') {
stage.dragLayer.setAttrs({ stage.dragLayer.setAttrs(node.getAttrs());
x: node.getX(),
y: node.getY(),
scale: node.getScale(),
rotation: node.getRotation()
});
lastContainer = stage.dragLayer; lastContainer = stage.dragLayer;
stage.add(stage.dragLayer); stage.add(stage.dragLayer);
} }
else if(node.nodeType === 'Group') { else if(node.nodeType === 'Group') {
group = new Kinetic.Group({ group = new Kinetic.Group(node.getAttrs());
x: node.getX(),
y: node.getY(),
scale: node.getScale(),
rotation: node.getRotation()
});
lastContainer.add(group); lastContainer.add(group);
lastContainer = group; lastContainer = group;
} }

View File

@ -657,9 +657,7 @@
var classType = this.shapeType || this.nodeType; var classType = this.shapeType || this.nodeType;
var node = new Kinetic[classType](this.attrs); var node = new Kinetic[classType](this.attrs);
/* // copy over user listeners
* copy over user listeners
*/
for(var key in this.eventListeners) { for(var key in this.eventListeners) {
var allListeners = this.eventListeners[key]; var allListeners = this.eventListeners[key];
var len = allListeners.length; var len = allListeners.length;

View File

@ -912,14 +912,16 @@ Test.Modules.DRAG_AND_DROP = {
showHit(layer) showHit(layer)
}, },
'draggable true false': function(containerId) { 'draggable true': function(containerId) {
var stage = new Kinetic.Stage({ var stage = new Kinetic.Stage({
container: containerId, container: containerId,
width: 578, width: 578,
height: 200 height: 200
}); });
var layer = new Kinetic.Layer(); var layer = new Kinetic.Layer({
var Circle = new Kinetic.Circle({ id: 'myLayer'
});
var circle = new Kinetic.Circle({
x: stage.getWidth() / 2, x: stage.getWidth() / 2,
y: stage.getHeight() / 2, y: stage.getHeight() / 2,
radius: 70, radius: 70,
@ -928,12 +930,15 @@ Test.Modules.DRAG_AND_DROP = {
strokeWidth: 4 strokeWidth: 4
}); });
Circle.setDraggable(true); circle.setDraggable(true);
layer.add(Circle); layer.add(circle);
stage.add(layer); stage.add(layer);
circle.on('dragmove', function() {
console.log(this.getLayer().getId());
});
Circle.setDraggable(false);
}, },
'scale and rotate stage after add layer then drag and drop shape': function(containerId) { 'scale and rotate stage after add layer then drag and drop shape': function(containerId) {
var stage = new Kinetic.Stage({ var stage = new Kinetic.Stage({