better stage drag performance

This commit is contained in:
Anton Lavrenov
2020-08-21 12:09:58 -05:00
parent c5eee9de48
commit 1634103d0e
8 changed files with 63 additions and 9 deletions

View File

@@ -3,6 +3,10 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/). This project adheres to [Semantic Versioning](http://semver.org/).
## 7.0.6
* Better performance for stage dragging
## 7.0.5 ## 7.0.5
* Fixes for `node.cache()` function. * Fixes for `node.cache()` function.

View File

@@ -1,6 +1,6 @@
var gulp = require('gulp'); var gulp = require('gulp');
var rename = require('gulp-rename'); var rename = require('gulp-rename');
var uglify = require('gulp-uglify'); var uglify = require('gulp-uglify-es').default;
var replace = require('gulp-replace'); var replace = require('gulp-replace');
var jsdoc = require('gulp-jsdoc3'); var jsdoc = require('gulp-jsdoc3');
var connect = require('gulp-connect'); var connect = require('gulp-connect');

View File

@@ -8,7 +8,7 @@
* Konva JavaScript Framework v7.0.5 * Konva JavaScript Framework v7.0.5
* http://konvajs.org/ * http://konvajs.org/
* Licensed under the MIT * Licensed under the MIT
* Date: Sat Aug 08 2020 * Date: Fri Aug 21 2020
* *
* 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)
@@ -3373,7 +3373,13 @@
var layer = this.getLayer(); var layer = this.getLayer();
var layerUnderDrag = false; var layerUnderDrag = false;
DD._dragElements.forEach(function (elem) { DD._dragElements.forEach(function (elem) {
if (elem.dragStatus === 'dragging' && elem.node.getLayer() === layer) { if (elem.dragStatus !== 'dragging') {
return;
}
else if (elem.node.nodeType === 'Stage') {
layerUnderDrag = true;
}
else if (elem.node.getLayer() === layer) {
layerUnderDrag = true; layerUnderDrag = true;
} }
}); });

6
konva.min.js vendored

File diff suppressed because one or more lines are too long

View File

@@ -34,6 +34,9 @@
}, },
{ {
"path": "./lib/Core.js" "path": "./lib/Core.js"
},
{
"path": "./konva.min.js"
} }
], ],
"devDependencies": { "devDependencies": {

View File

@@ -1050,9 +1050,14 @@ export abstract class Node<Config extends NodeConfig = NodeConfig> {
return this._isVisible(top) && this._isListening(top); return this._isVisible(top) && this._isListening(top);
} }
var layer = this.getLayer(); var layer = this.getLayer();
var layerUnderDrag = false; var layerUnderDrag = false;
DD._dragElements.forEach((elem) => { DD._dragElements.forEach((elem) => {
if (elem.dragStatus === 'dragging' && elem.node.getLayer() === layer) { if (elem.dragStatus !== 'dragging') {
return;
} else if (elem.node.nodeType === 'Stage') {
layerUnderDrag = true;
} else if (elem.node.getLayer() === layer) {
layerUnderDrag = true; layerUnderDrag = true;
} }
}); });

View File

@@ -378,6 +378,42 @@ suite('Layer', function () {
assert.equal(layer.shouldDrawHit(), true); assert.equal(layer.shouldDrawHit(), true);
}); });
// ======================================================
test('should not draw hit on stage drag', function () {
var stage = addStage();
stage.draggable(true);
var layer = new Konva.Layer();
var circle = new Konva.Circle({
x: stage.getWidth() / 2,
y: stage.getHeight() / 2,
radius: 70,
fill: 'red',
stroke: 'black',
strokeWidth: 4,
});
layer.add(circle);
stage.add(layer);
stage.simulateMouseDown({
x: circle.x(),
y: circle.y(),
});
stage.simulateMouseMove({
x: circle.x() + 10,
y: circle.y() + 10,
});
assert.equal(stage.isDragging(), true, 'dragging of stage is ok');
assert.equal(layer.shouldDrawHit(), false);
stage.simulateMouseUp({
x: 291,
y: 112,
});
});
test('get/set layer size', function () { test('get/set layer size', function () {
var stage = addStage(); var stage = addStage();
var layer = new Konva.Layer(); var layer = new Konva.Layer();

View File

@@ -1,8 +1,8 @@
{ {
"compilerOptions": { "compilerOptions": {
"outDir": "lib", "outDir": "lib",
"module": "es2015", "module": "ES2015",
"target": "es5", "target": "ES5",
"noEmitOnError": true, "noEmitOnError": true,
"lib": ["es2015", "dom"] "lib": ["es2015", "dom"]
// "noImplicitAny": true // "noImplicitAny": true