Skip to content

Commit 5814b70

Browse files
committed
Merge pull request cocos2d#2961 from VisualSJ/develop-clipping
Fixed a bug that is ClippingNode draw error if inverted == true
2 parents 3366092 + 8b0c014 commit 5814b70

File tree

1 file changed

+9
-21
lines changed

1 file changed

+9
-21
lines changed

cocos2d/clipping-nodes/CCClippingNodeCanvasRenderCmd.js

Lines changed: 9 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,9 @@
6060
scaleX = scaleX || cc.view.getScaleX();
6161
scaleY = scaleY ||cc.view.getScaleY();
6262
var wrapper = ctx || cc._renderContext, context = wrapper.getContext();
63-
var t = this._transform; //note: use local transform
64-
wrapper.save();
63+
64+
var t = this._transform;
6565
context.transform(t.a, t.b, t.c, t.d, t.tx * scaleX, -t.ty * scaleY);
66-
context.beginPath();
6766
for (var i = 0; i < stencil._buffer.length; i++) {
6867
var vertices = stencil._buffer[i].verts;
6968
//TODO: need support circle etc
@@ -72,10 +71,9 @@
7271

7372
var firstPoint = vertices[0];
7473
context.moveTo(firstPoint.x * scaleX, -firstPoint.y * scaleY);
75-
for (var j = 1, len = vertices.length; j < len; j++)
74+
for (var j = vertices.length - 1; j > 0; j--)
7675
context.lineTo(vertices[j].x * scaleX, -vertices[j].y * scaleY);
7776
}
78-
wrapper.restore();
7977
};
8078
}else{
8179
stencil._parent = this._node;
@@ -94,9 +92,14 @@
9492
locCacheCtx.drawImage(canvas, 0, 0); //save the result to shareCache canvas
9593
} else {
9694
wrapper.save();
97-
wrapper.save(); //save for clip
95+
context.beginPath(); //save for clip
9896
//Because drawNode's content size is zero
9997
wrapper.setTransform(this._worldTransform, scaleX, scaleY);
98+
99+
if (this._node.inverted) {
100+
context.rect(0, 0, context.canvas.width, -context.canvas.height);
101+
context.clip();
102+
}
100103
}
101104
};
102105

@@ -123,21 +126,6 @@
123126
//hack
124127
this._setStencilCompositionOperation(node._stencil);
125128
} else {
126-
wrapper.restore(); //it use for
127-
if (node.inverted) {
128-
var canvas = context.canvas;
129-
wrapper.save();
130-
context.setTransform(1, 0, 0, 1, 0, 0);
131-
132-
context.moveTo(0, 0);
133-
context.lineTo(0, canvas.height);
134-
context.lineTo(canvas.width, canvas.height);
135-
context.lineTo(canvas.width, 0);
136-
context.lineTo(0, 0);
137-
138-
wrapper.restore();
139-
}
140-
context.closePath();
141129
context.clip();
142130
}
143131
};

0 commit comments

Comments
 (0)