mirror of
https://github.com/konvajs/konva.git
synced 2025-12-04 10:58:22 +08:00
exposed absolute positioning logic inside the _prepareDrag method so that developers have access to it via the setAbsolutePosition() method
This commit is contained in:
87
dist/kinetic-core.js
vendored
87
dist/kinetic-core.js
vendored
@@ -186,7 +186,7 @@ Kinetic.Node = function(config) {
|
||||
this.attrs.draggable = false;
|
||||
this.eventListeners = {};
|
||||
|
||||
// set attrs
|
||||
// set attrs
|
||||
this.setAttrs(config);
|
||||
};
|
||||
/*
|
||||
@@ -451,6 +451,53 @@ Kinetic.Node.prototype = {
|
||||
getAbsolutePosition: function() {
|
||||
return this.getAbsoluteTransform().getTranslation();
|
||||
},
|
||||
/**
|
||||
* set absolute position relative to stage
|
||||
*/
|
||||
setAbsolutePosition: function(pos, override) {
|
||||
/*
|
||||
* save rotation and scale and then
|
||||
* remove them from the transform
|
||||
*/
|
||||
var rot = this.attrs.rotation;
|
||||
var scale = {
|
||||
x: this.attrs.scale.x,
|
||||
y: this.attrs.scale.y
|
||||
};
|
||||
this.attrs.rotation = 0;
|
||||
this.attrs.scale = {
|
||||
x: 1,
|
||||
y: 1
|
||||
};
|
||||
|
||||
// unravel transform
|
||||
var it = this.getAbsoluteTransform();
|
||||
it.invert();
|
||||
it.translate(pos.x, pos.y);
|
||||
pos = {
|
||||
x: this.attrs.x + it.getTranslation().x,
|
||||
y: this.attrs.y + it.getTranslation().y
|
||||
};
|
||||
|
||||
// handle override
|
||||
if(override !== undefined) {
|
||||
if(override.x !== undefined) {
|
||||
pos.x = override.x;
|
||||
}
|
||||
if(override.y !== undefined) {
|
||||
pos.y = override.y;
|
||||
}
|
||||
}
|
||||
|
||||
this.setPosition(pos.x, pos.y);
|
||||
|
||||
// restore rotation and scale
|
||||
this.rotate(rot);
|
||||
this.attrs.scale = {
|
||||
x: scale.x,
|
||||
y: scale.y
|
||||
};
|
||||
},
|
||||
/**
|
||||
* move node by an amount
|
||||
* @param {Number} x
|
||||
@@ -1813,46 +1860,16 @@ Kinetic.Stage.prototype = {
|
||||
newNodePos.y = db.bottom;
|
||||
}
|
||||
|
||||
/*
|
||||
* save rotation and scale and then
|
||||
* remove them from the transform
|
||||
*/
|
||||
var rot = node.attrs.rotation;
|
||||
var scale = {
|
||||
x: node.attrs.scale.x,
|
||||
y: node.attrs.scale.y
|
||||
};
|
||||
node.attrs.rotation = 0;
|
||||
node.attrs.scale = {
|
||||
x: 1,
|
||||
y: 1
|
||||
};
|
||||
|
||||
// unravel transform
|
||||
var it = node.getAbsoluteTransform();
|
||||
it.invert();
|
||||
it.translate(newNodePos.x, newNodePos.y);
|
||||
newNodePos = {
|
||||
x: node.attrs.x + it.getTranslation().x,
|
||||
y: node.attrs.y + it.getTranslation().y
|
||||
};
|
||||
|
||||
// constraint overrides
|
||||
var override = {};
|
||||
if(dc === 'horizontal') {
|
||||
newNodePos.y = node.attrs.y;
|
||||
override.y = node.attrs.y;
|
||||
}
|
||||
else if(dc === 'vertical') {
|
||||
newNodePos.x = node.attrs.x;
|
||||
override.x = node.attrs.x;
|
||||
}
|
||||
|
||||
node.setPosition(newNodePos.x, newNodePos.y);
|
||||
|
||||
// restore rotation and scale
|
||||
node.rotate(rot);
|
||||
node.attrs.scale = {
|
||||
x: scale.x,
|
||||
y: scale.y
|
||||
};
|
||||
node.setAbsolutePosition(newNodePos, override);
|
||||
|
||||
go.drag.node.getLayer().draw();
|
||||
|
||||
|
||||
4
dist/kinetic-core.min.js
vendored
4
dist/kinetic-core.min.js
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user