Skip to content

Commit 44c88a8

Browse files
committed
Fixed bug in DrawImage where it wouldn't correctly draw a flipped image with an origin not 0.5
1 parent 69376bf commit 44c88a8

1 file changed

Lines changed: 32 additions & 9 deletions

File tree

v3/src/renderer/canvas/utils/DrawImage.js

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,45 @@ var DrawImage = function (src, camera)
2929
// ctx[this.smoothProperty] = (source.scaleMode === ScaleModes.LINEAR);
3030
}
3131

32-
var dx = frame.x - src.displayOriginX;
33-
var dy = frame.y - src.displayOriginY;
32+
var dx = frame.x;
33+
var dy = frame.y;
34+
35+
var fx = 1;
36+
var fy = 1;
37+
38+
if (src.flipX)
39+
{
40+
fx = -1;
41+
dx -= cd.dWidth - src.displayOriginX;
42+
}
43+
else
44+
{
45+
dx -= src.displayOriginX;
46+
}
47+
48+
if (src.flipY)
49+
{
50+
fy = -1;
51+
dy -= cd.dHeight - src.displayOriginY;
52+
}
53+
else
54+
{
55+
dy -= src.displayOriginY;
56+
}
57+
58+
// Perform Matrix ITRS
3459

3560
ctx.save();
61+
3662
ctx.translate(src.x - camera.scrollX * src.scrollFactorX, src.y - camera.scrollY * src.scrollFactorY);
37-
ctx.rotate(src.rotation);
38-
ctx.scale(src.scaleX, src.scaleY);
39-
ctx.scale(src.flipX ? -1 : 1, src.flipY ? -1 : 1);
4063

41-
// There is no such property as src.dWidth or src.dHeight, so this call has no effect:
42-
// ctx.translate(src.dWidth * (src.flipX ? 1 : 0), src.dHeight * (src.flipY ? 1 : 0));
64+
ctx.rotate(src.rotation);
4365

44-
// dx -= (src.flipX && src.originX !== 0.5) ? cd.dWidth - (src.originX * cd.dWidth) : 0;
45-
// dy -= (src.flipY && src.originY !== 0.5) ? cd.dHeight - (src.originY * cd.dHeight) : 0;
66+
ctx.scale(src.scaleX, src.scaleY);
67+
ctx.scale(fx, fy);
4668

4769
ctx.drawImage(frame.source.image, cd.sx, cd.sy, cd.sWidth, cd.sHeight, dx, dy, cd.dWidth, cd.dHeight);
70+
4871
ctx.restore();
4972
};
5073

0 commit comments

Comments
 (0)