mirror of
https://github.com/konvajs/konva.git
synced 2025-09-19 19:07:59 +08:00
fixed up caching now that transformsEnabled attr has been removed
This commit is contained in:
18
src/Node.js
18
src/Node.js
@@ -150,6 +150,7 @@
|
|||||||
width = conf.width || this.width(),
|
width = conf.width || this.width(),
|
||||||
height = conf.height || this.height(),
|
height = conf.height || this.height(),
|
||||||
drawBorder = conf.drawBorder || false,
|
drawBorder = conf.drawBorder || false,
|
||||||
|
layer = this.getLayer(),
|
||||||
cachedSceneCanvas = new Kinetic.SceneCanvas({
|
cachedSceneCanvas = new Kinetic.SceneCanvas({
|
||||||
pixelRatio: 1,
|
pixelRatio: 1,
|
||||||
width: width,
|
width: width,
|
||||||
@@ -171,13 +172,10 @@
|
|||||||
|
|
||||||
this.clearCache();
|
this.clearCache();
|
||||||
|
|
||||||
// TODO: removing transformsEnabled property because it's weird.
|
var layerApplyTrans = layer._applyTransform;
|
||||||
// need to find another way to handle this
|
layer._applyTransform = function(shape, context) {
|
||||||
|
context.translate(x * -1, y * -1);
|
||||||
//this.transformsEnabled('position');
|
};
|
||||||
this.x(x * -1);
|
|
||||||
this.y(y * -1);
|
|
||||||
|
|
||||||
|
|
||||||
this.drawScene(cachedSceneCanvas);
|
this.drawScene(cachedSceneCanvas);
|
||||||
this.drawHit(cachedHitCanvas);
|
this.drawHit(cachedHitCanvas);
|
||||||
@@ -196,10 +194,8 @@
|
|||||||
sceneContext.restore();
|
sceneContext.restore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set the _applyTransform method back to the original
|
||||||
this.x(origX);
|
layer._applyTransform = layerApplyTrans;
|
||||||
this.y(origY);
|
|
||||||
//this.transformsEnabled(origTransEnabled);
|
|
||||||
|
|
||||||
|
|
||||||
this._cache.canvas = {
|
this._cache.canvas = {
|
||||||
|
@@ -2771,17 +2771,61 @@ suite('Node', function() {
|
|||||||
|
|
||||||
showHit(layer)
|
showHit(layer)
|
||||||
|
|
||||||
|
|
||||||
//console.log(layer.getContext().getTrace());
|
|
||||||
|
|
||||||
assert.equal(layer.getContext().getTrace(), 'clearRect(0,0,578,200);save();transform(1,0,0,1,74,74);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=green;fill();lineWidth=4;strokeStyle=black;stroke();restore();clearRect(0,0,578,200);save();transform(1,0,0,1,0,0);drawImage([object HTMLCanvasElement],0,0);restore();');
|
assert.equal(layer.getContext().getTrace(), 'clearRect(0,0,578,200);save();transform(1,0,0,1,74,74);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=green;fill();lineWidth=4;strokeStyle=black;stroke();restore();clearRect(0,0,578,200);save();transform(1,0,0,1,0,0);drawImage([object HTMLCanvasElement],0,0);restore();');
|
||||||
|
|
||||||
//console.log(circle._cache.canvas.scene.getContext().getTrace());
|
|
||||||
|
|
||||||
assert.equal(circle._cache.canvas.scene.getContext().getTrace(), 'save();transform(1,0,0,1,74,74);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=green;fill();lineWidth=4;strokeStyle=black;stroke();restore();');
|
assert.equal(circle._cache.canvas.scene.getContext().getTrace(), 'save();transform(1,0,0,1,74,74);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=green;fill();lineWidth=4;strokeStyle=black;stroke();restore();');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test('cache shape inside transformed group', function(){
|
||||||
|
var stage = addStage();
|
||||||
|
var layer = new Kinetic.Layer();
|
||||||
|
var group = new Kinetic.Group({
|
||||||
|
x: 50,
|
||||||
|
y: 50
|
||||||
|
});
|
||||||
|
var circle = new Kinetic.Circle({
|
||||||
|
x: 74,
|
||||||
|
y: 74,
|
||||||
|
radius: 70,
|
||||||
|
fill: 'green',
|
||||||
|
stroke: 'black',
|
||||||
|
strokeWidth: 4,
|
||||||
|
name: 'myCircle',
|
||||||
|
draggable: true
|
||||||
|
});
|
||||||
|
|
||||||
|
group.add(circle);
|
||||||
|
layer.add(group);
|
||||||
|
stage.add(layer);
|
||||||
|
|
||||||
|
assert.equal(circle._cache.canvas, undefined);
|
||||||
|
|
||||||
|
circle.cache({
|
||||||
|
x: -74,
|
||||||
|
y: -74,
|
||||||
|
width: 148,
|
||||||
|
height: 148
|
||||||
|
}).offset({
|
||||||
|
x: 74,
|
||||||
|
y: 74
|
||||||
|
});
|
||||||
|
|
||||||
|
assert.notEqual(circle._cache.canvas.scene, undefined);
|
||||||
|
assert.notEqual(circle._cache.canvas.hit, undefined);
|
||||||
|
|
||||||
|
layer.draw();
|
||||||
|
|
||||||
|
|
||||||
|
//document.body.appendChild(circle._cache.canvas.scene._canvas);
|
||||||
|
// document.body.appendChild(circle._cache.canvas.hit._canvas);
|
||||||
|
|
||||||
|
showHit(layer)
|
||||||
|
|
||||||
|
assert.equal(layer.getContext().getTrace(), 'clearRect(0,0,578,200);save();transform(1,0,0,1,124,124);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=green;fill();lineWidth=4;strokeStyle=black;stroke();restore();clearRect(0,0,578,200);save();transform(1,0,0,1,50,50);drawImage([object HTMLCanvasElement],0,0);restore();');
|
||||||
|
assert.equal(circle._cache.canvas.scene.getContext().getTrace(), 'save();translate(74,74);beginPath();arc(0,0,70,0,6.283,false);closePath();fillStyle=green;fill();lineWidth=4;strokeStyle=black;stroke();restore();');
|
||||||
|
});
|
||||||
|
|
||||||
test('cache shape thats larger than stage', function(){
|
test('cache shape thats larger than stage', function(){
|
||||||
var stage = addStage();
|
var stage = addStage();
|
||||||
var layer = new Kinetic.Layer();
|
var layer = new Kinetic.Layer();
|
||||||
|
Reference in New Issue
Block a user