again reworked the matrix transform logic with drag and drop

This commit is contained in:
Eric Rowell 2012-03-25 12:45:46 -07:00
parent 8ee223584d
commit fbb6d0f706
5 changed files with 34 additions and 12 deletions

12
dist/kinetic-core.js vendored
View File

@ -3,7 +3,7 @@
* http://www.kineticjs.com/
* Copyright 2012, Eric Rowell
* Licensed under the MIT or GPL Version 2 licenses.
* Date: Mar 24 2012
* Date: Mar 25 2012
*
* Copyright (C) 2011 - 2012 by Eric Rowell
*
@ -1604,7 +1604,11 @@ Kinetic.Stage.prototype = {
newNodePos.x = node.x;
}
// magic
// save rotation and remove it from transform
var rot = node.rotation;
node.rotation = 0;
// unravel transform
var it = node.getAbsoluteTransform();
it.invert();
it.translate(newNodePos.x, newNodePos.y);
@ -1612,6 +1616,9 @@ Kinetic.Stage.prototype = {
node.x += it.getTranslation().x;
node.y += it.getTranslation().y;
// restore rotation
node.rotate(rot);
go.drag.node.getLayer().draw();
if(!go.drag.moving) {
@ -1619,6 +1626,7 @@ Kinetic.Stage.prototype = {
// execute dragstart events if defined
go.drag.node._handleEvents('ondragstart', evt);
}
// execute user defined ondragmove if defined
go.drag.node._handleEvents('ondragmove', evt);
}

File diff suppressed because one or more lines are too long

View File

@ -624,7 +624,11 @@ Kinetic.Stage.prototype = {
newNodePos.x = node.x;
}
// magic
// save rotation and remove it from transform
var rot = node.rotation;
node.rotation = 0;
// unravel transform
var it = node.getAbsoluteTransform();
it.invert();
it.translate(newNodePos.x, newNodePos.y);
@ -632,6 +636,9 @@ Kinetic.Stage.prototype = {
node.x += it.getTranslation().x;
node.y += it.getTranslation().y;
// restore rotation
node.rotate(rot);
go.drag.node.getLayer().draw();
if(!go.drag.moving) {
@ -639,6 +646,7 @@ Kinetic.Stage.prototype = {
// execute dragstart events if defined
go.drag.node._handleEvents('ondragstart', evt);
}
// execute user defined ondragmove if defined
go.drag.node._handleEvents('ondragmove', evt);
}

View File

@ -1023,12 +1023,18 @@ Test.prototype.tests = {
stroke: 'black',
strokeWidth: 4,
draggable: true
//rotationDeg: 60
//rotationDeg: Math.PI / 3
});
layer.add(rect);
stage.add(layer);
stage.rotateDeg(20);
//stage.rotateDeg(20);
//console.log(rect.getAbsoluteTransform().getTranslation())
stage.rotate(Math.PI / 3);
stage.setScale(0.5);
stage.draw();