Merge pull request #418 from VladimirTechMan/master

Support offsetX and offsetY when transformsEnabled is set to 'position'
This commit is contained in:
Anton Lavrenov 2018-07-24 10:57:30 +07:00 committed by GitHub
commit a6d3426de9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 4 deletions

View File

@ -1427,17 +1427,16 @@
}
},
_getAbsoluteTransform: function(top) {
var at = new Konva.Transform(),
transformsEnabled;
var at = new Konva.Transform();
// start with stage and traverse downwards to self
this._eachAncestorReverse(function(node) {
transformsEnabled = node.transformsEnabled();
var transformsEnabled = node.transformsEnabled();
if (transformsEnabled === 'all') {
at.multiply(node.getTransform());
} else if (transformsEnabled === 'position') {
at.translate(node.x(), node.y());
at.translate(node.getX() - node.getOffsetX(), node.getY() - node.getOffsetY());
}
}, top);
return at;

View File

@ -1694,6 +1694,64 @@ suite('Node', function() {
assert.equal(rect.getAbsolutePosition(layer).y, 160);
});
// ======================================================
test('results of getAbsoluteTransform limited to position and offset transformations are the same' +
' when used with transformsEnabled = \'all\' and transformsEnabled = \'position\'', function() {
var stage = addStage();
var layer1 = new Konva.Layer({
name: 'layerName',
id: 'layerId',
x: 90,
y: 110,
offsetX: 50,
offsetY: 50,
transformsEnabled: 'all'
});
var group1 = new Konva.Group({
name: 'groupName',
id: 'groupId',
x: 30,
y: 30,
offsetX: -60,
offsetY: -80,
transformsEnabled: 'all'
});
var rect1 = new Konva.Rect({
x: -50,
y: -60,
offsetX: 50,
offsetY: 50,
width: 50,
height: 50,
fill: 'red',
name: 'rectName',
id: 'rectId1',
transformsEnabled: 'all'
});
var layer2 = layer1.clone({ transformsEnabled: 'position' });
var group2 = group1.clone({ transformsEnabled: 'position' });
var rect2 = rect1.clone({ transformsEnabled: 'position' });
group1.add(rect1);
layer1.add(group1);
stage.add(layer1);
group2.add(rect2);
layer2.add(group2);
stage.add(layer2);
assert.equal(layer1.getTransformsEnabled(), 'all');
assert.equal(group1.getTransformsEnabled(), 'all');
assert.equal( rect1.getTransformsEnabled(), 'all');
assert.equal(layer2.getTransformsEnabled(), 'position');
assert.equal(group2.getTransformsEnabled(), 'position');
assert.equal( rect2.getTransformsEnabled(), 'position');
assert.deepEqual(rect2.getAbsoluteTransform(), rect1.getAbsoluteTransform());
});
// ======================================================
test('test dragDistance', function() {
var stage = addStage();