better caching if node not in layer

This commit is contained in:
Лаврёнов Антон
2014-05-11 20:22:30 +08:00
parent f99975441e
commit 917ca5bc56
3 changed files with 42 additions and 22 deletions

View File

@@ -199,7 +199,7 @@
hitContext.translate(x * -1, y * -1);
// don't need to translate canvas if shape is not added to layer
if (this.nodeType === 'Shape' && layer) {
if (this.nodeType === 'Shape') {
sceneContext.translate(this.x() * -1, this.y() * -1);
hitContext.translate(this.x() * -1, this.y() * -1);
}

View File

@@ -155,6 +155,9 @@
// layer might be undefined if we are using cache before adding to layer
if (layer) {
layer._applyTransform(this, bufferContext, top);
} else {
var m = this.getAbsoluteTransform(top).getMatrix();
context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
}
drawFunc.call(this, bufferContext);
@@ -176,6 +179,9 @@
// layer might be undefined if we are using cache before adding to layer
if (layer) {
layer._applyTransform(this, context, top);
} else {
var m = this.getAbsoluteTransform(top).getMatrix();
context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
}
if (hasShadow) {
@@ -212,6 +218,9 @@
context._applyLineJoin(this);
if (layer) {
layer._applyTransform(this, context, top);
} else {
var m = this.getAbsoluteTransform(top).getMatrix();
context.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
}
drawFunc.call(this, context);

View File

@@ -2883,42 +2883,53 @@ suite('Node', function() {
test('cache shape before adding to layer', function(){
var stage = addStage();
var layer = new Kinetic.Layer();
var group = new Kinetic.Group();
var circle = new Kinetic.Circle({
x: 74,
y: 74,
radius: 70,
var group = new Kinetic.Group({
x : 0,
y : 0
});
var rect = new Kinetic.Rect({
x: 35,
y: 35,
width: 50,
height : 50,
fill: 'green',
stroke: 'black',
strokeWidth: 4,
name: 'myCircle',
offsetX : 25,
offsetY: 25,
rotation : 45,
draggable: true,
shadowBlur : 10,
});
group.add(circle);
assert.equal(circle._cache.canvas, undefined);
circle.cache({
x: -74,
y: -74,
group.add(rect);
assert.equal(rect._cache.canvas, undefined);
group.cache({
x: 0,
y: 0,
width: 148,
height: 148
}).offset({
x: 74,
y: 74
});
stage.add(layer);
assert(circle._cache.canvas.scene);
assert(circle._cache.canvas.hit);
assert(group._cache.canvas.scene);
assert(group._cache.canvas.hit);
layer.add(group);
layer.draw();
var hitShape = stage.getIntersection({
x : 74,
y : 74
var shape = stage.getIntersection({
x : 5,
y : 5
});
assert.equal(hitShape, circle, 'should draw hit if cached before adding to layer');
assert(!shape, 'no shape (rotate applied)');
shape = stage.getIntersection({
x : 35,
y : 35
});
assert.equal(shape, rect, 'rect found');
assert.equal(layer.canvas.getContext().getTrace(), 'clearRect(0,0,578,200);clearRect(0,0,578,200);save();transform(1,0,0,1,0,0);drawImage([object HTMLCanvasElement],0,0);restore();');
});