fix dragend bug, revert back text fill pattern fix

This commit is contained in:
Anton Lavrenov
2019-09-05 13:01:20 -05:00
parent 89e332229b
commit 2988dce492
7 changed files with 87 additions and 27 deletions

View File

@@ -8,7 +8,7 @@
* Konva JavaScript Framework v4.0.7 * Konva JavaScript Framework v4.0.7
* http://konvajs.org/ * http://konvajs.org/
* Licensed under the MIT * Licensed under the MIT
* Date: Tue Sep 03 2019 * Date: Thu Sep 05 2019
* *
* Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS) * Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS)
* Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva) * Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva)
@@ -2035,13 +2035,16 @@
shape._fillFunc(this); shape._fillFunc(this);
}; };
SceneContext.prototype._fillPattern = function (shape) { SceneContext.prototype._fillPattern = function (shape) {
var fillPatternX = shape.getFillPatternX(), fillPatternY = shape.getFillPatternY(), fillPatternRotation = Konva.getAngle(shape.getFillPatternRotation()), fillPatternOffsetX = shape.getFillPatternOffsetX(), fillPatternOffsetY = shape.getFillPatternOffsetY(); var fillPatternX = shape.getFillPatternX(), fillPatternY = shape.getFillPatternY(), fillPatternRotation = Konva.getAngle(shape.getFillPatternRotation()), fillPatternOffsetX = shape.getFillPatternOffsetX(), fillPatternOffsetY = shape.getFillPatternOffsetY(), fillPatternScaleX = shape.getFillPatternScaleX(), fillPatternScaleY = shape.getFillPatternScaleY();
if (fillPatternX || fillPatternY) { if (fillPatternX || fillPatternY) {
this.translate(fillPatternX || 0, fillPatternY || 0); this.translate(fillPatternX || 0, fillPatternY || 0);
} }
if (fillPatternRotation) { if (fillPatternRotation) {
this.rotate(fillPatternRotation); this.rotate(fillPatternRotation);
} }
if (fillPatternScaleX || fillPatternScaleY) {
this.scale(fillPatternScaleX, fillPatternScaleY);
}
if (fillPatternOffsetX || fillPatternOffsetY) { if (fillPatternOffsetX || fillPatternOffsetY) {
this.translate(-1 * fillPatternOffsetX, -1 * fillPatternOffsetY); this.translate(-1 * fillPatternOffsetX, -1 * fillPatternOffsetY);
} }
@@ -2421,8 +2424,8 @@
if (elem.dragStatus === 'dragging') { if (elem.dragStatus === 'dragging') {
DD.justDragged = true; DD.justDragged = true;
Konva.listenClickTap = false; Konva.listenClickTap = false;
elem.dragStatus = 'stopped';
} }
elem.dragStatus = 'stopped';
var drawNode = elem.node.getLayer() || var drawNode = elem.node.getLayer() ||
(elem.node instanceof Konva['Stage'] && elem.node); (elem.node instanceof Konva['Stage'] && elem.node);
if (drawNode) { if (drawNode) {
@@ -2438,6 +2441,8 @@
target: elem.node, target: elem.node,
evt: evt evt: evt
}, true); }, true);
}
if (elem.dragStatus !== 'dragging') {
DD._dragElements.delete(key); DD._dragElements.delete(key);
} }
}); });
@@ -7052,15 +7057,15 @@
if (this.fillPatternImage()) { if (this.fillPatternImage()) {
var ctx = getDummyContext(); var ctx = getDummyContext();
var pattern = ctx.createPattern(this.fillPatternImage(), this.fillPatternRepeat() || 'repeat'); var pattern = ctx.createPattern(this.fillPatternImage(), this.fillPatternRepeat() || 'repeat');
pattern.setTransform({ // TODO: how to enable it? It doesn't work in FF...
a: this.fillPatternScaleX(), // pattern.setTransform({
b: 0, // a: this.fillPatternScaleX(), // Horizontal scaling. A value of 1 results in no scaling.
c: 0, // b: 0, // Vertical skewing.
d: this.fillPatternScaleY(), // c: 0, // Horizontal skewing.
e: 0, // d: this.fillPatternScaleY(), // Vertical scaling. A value of 1 results in no scaling.
f: 0 // Vertical translation (moving). // e: 0, // Horizontal translation (moving).
}); // f: 0 // Vertical translation (moving).
// pattern.setTransform // });
return pattern; return pattern;
} }
}; };

4
konva.min.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -666,7 +666,9 @@ export class SceneContext extends Context {
fillPatternY = shape.getFillPatternY(), fillPatternY = shape.getFillPatternY(),
fillPatternRotation = Konva.getAngle(shape.getFillPatternRotation()), fillPatternRotation = Konva.getAngle(shape.getFillPatternRotation()),
fillPatternOffsetX = shape.getFillPatternOffsetX(), fillPatternOffsetX = shape.getFillPatternOffsetX(),
fillPatternOffsetY = shape.getFillPatternOffsetY(); fillPatternOffsetY = shape.getFillPatternOffsetY(),
fillPatternScaleX = shape.getFillPatternScaleX(),
fillPatternScaleY = shape.getFillPatternScaleY();
if (fillPatternX || fillPatternY) { if (fillPatternX || fillPatternY) {
this.translate(fillPatternX || 0, fillPatternY || 0); this.translate(fillPatternX || 0, fillPatternY || 0);
@@ -676,6 +678,10 @@ export class SceneContext extends Context {
this.rotate(fillPatternRotation); this.rotate(fillPatternRotation);
} }
if (fillPatternScaleX || fillPatternScaleY) {
this.scale(fillPatternScaleX, fillPatternScaleY);
}
if (fillPatternOffsetX || fillPatternOffsetY) { if (fillPatternOffsetX || fillPatternOffsetY) {
this.translate(-1 * fillPatternOffsetX, -1 * fillPatternOffsetY); this.translate(-1 * fillPatternOffsetX, -1 * fillPatternOffsetY);
} }

View File

@@ -110,10 +110,9 @@ export const DD = {
if (elem.dragStatus === 'dragging') { if (elem.dragStatus === 'dragging') {
DD.justDragged = true; DD.justDragged = true;
Konva.listenClickTap = false; Konva.listenClickTap = false;
elem.dragStatus = 'stopped';
} }
elem.dragStatus = 'stopped';
const drawNode = const drawNode =
elem.node.getLayer() || elem.node.getLayer() ||
(elem.node instanceof Konva['Stage'] && elem.node); (elem.node instanceof Konva['Stage'] && elem.node);
@@ -134,6 +133,8 @@ export const DD = {
}, },
true true
); );
}
if (elem.dragStatus !== 'dragging') {
DD._dragElements.delete(key); DD._dragElements.delete(key);
} }
}); });

View File

@@ -265,15 +265,15 @@ export class Shape<Config extends ShapeConfig = ShapeConfig> extends Node<
this.fillPatternImage(), this.fillPatternImage(),
this.fillPatternRepeat() || 'repeat' this.fillPatternRepeat() || 'repeat'
); );
pattern.setTransform({ // TODO: how to enable it? It doesn't work in FF...
a: this.fillPatternScaleX(), // Horizontal scaling. A value of 1 results in no scaling. // pattern.setTransform({
b: 0, // Vertical skewing. // a: this.fillPatternScaleX(), // Horizontal scaling. A value of 1 results in no scaling.
c: 0, // Horizontal skewing. // b: 0, // Vertical skewing.
d: this.fillPatternScaleY(), // Vertical scaling. A value of 1 results in no scaling. // c: 0, // Horizontal skewing.
e: 0, // Horizontal translation (moving). // d: this.fillPatternScaleY(), // Vertical scaling. A value of 1 results in no scaling.
f: 0 // Vertical translation (moving). // e: 0, // Horizontal translation (moving).
}); // f: 0 // Vertical translation (moving).
// pattern.setTransform // });
return pattern; return pattern;
} }
} }

View File

@@ -474,4 +474,52 @@ suite('DragAndDropEvents', function() {
done(); done();
}, 20); }, 20);
}); });
test('drag events should not trigger on a click', function() {
var stage = addStage();
var layer = new Konva.Layer({
draggable: true
});
var circle = new Konva.Circle({
x: 70,
y: 70,
radius: 70,
fill: 'green',
stroke: 'black',
strokeWidth: 4,
name: 'myCircle',
draggable: true
});
layer.add(circle);
stage.add(layer);
var dragstart = 0;
circle.on('dragstart', function() {
dragstart += 1;
});
var dragmove = 0;
circle.on('dragmove', function() {
dragmove += 1;
});
var dragend = 0;
circle.on('dragend', function() {
dragend += 1;
});
var click = 0;
circle.on('click', function() {
click += 1;
});
stage.simulateMouseDown({ x: 70, y: 70 });
stage.simulateMouseUp({ x: 70, y: 70 });
assert.equal(click, 1, 'click triggered');
assert.equal(dragstart, 0, 'dragstart not triggered');
assert.equal(dragmove, 0, 'dragmove not triggered');
assert.equal(dragend, 0, 'dragend not triggered');
});
}); });

View File

@@ -1007,7 +1007,7 @@ suite('Text', function() {
imageObj.src = 'assets/darth-vader.jpg'; imageObj.src = 'assets/darth-vader.jpg';
}); });
test('image gradient for text with scale', function(done) { test.skip('image gradient for text with scale', function(done) {
Konva.pixelRatio = 1; Konva.pixelRatio = 1;
var imageObj = new Image(); var imageObj = new Image();
imageObj.onload = function() { imageObj.onload = function() {