Vincent Povirk : gdiplus: Account for negative height/ width in GdipDrawImagePointsRect.
Alexandre Julliard
julliard at winehq.org
Fri Mar 14 15:39:29 CDT 2014
Module: wine
Branch: master
Commit: 06555a96adf99364035bf824e1d1df4bde8e6ed9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=06555a96adf99364035bf824e1d1df4bde8e6ed9
Author: Vincent Povirk <vincent at codeweavers.com>
Date: Thu Mar 13 16:16:03 2014 -0500
gdiplus: Account for negative height/width in GdipDrawImagePointsRect.
---
dlls/gdiplus/graphics.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 1f01b82..a570192 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -2781,6 +2781,30 @@ GpStatus WINGDIPAPI GdipDrawImagePointsRect(GpGraphics *graphics, GpImage *image
debugstr_pointf(&points[2]));
memcpy(ptf, points, 3 * sizeof(GpPointF));
+
+ /* Ensure source width/height is positive */
+ if (srcwidth < 0)
+ {
+ GpPointF tmp = ptf[1];
+ srcx = srcx + srcwidth;
+ srcwidth = -srcwidth;
+ ptf[2].X = ptf[2].X + ptf[1].X - ptf[0].X;
+ ptf[2].Y = ptf[2].Y + ptf[1].Y - ptf[0].Y;
+ ptf[1] = ptf[0];
+ ptf[0] = tmp;
+ }
+
+ if (srcheight < 0)
+ {
+ GpPointF tmp = ptf[2];
+ srcy = srcy + srcheight;
+ srcheight = -srcheight;
+ ptf[1].X = ptf[1].X + ptf[2].X - ptf[0].X;
+ ptf[1].Y = ptf[1].Y + ptf[2].Y - ptf[0].Y;
+ ptf[2] = ptf[0];
+ ptf[0] = tmp;
+ }
+
ptf[3].X = ptf[2].X + ptf[1].X - ptf[0].X;
ptf[3].Y = ptf[2].Y + ptf[1].Y - ptf[0].Y;
if (!srcwidth || !srcheight || ptf[3].X == ptf[0].X || ptf[3].Y == ptf[0].Y)
More information about the wine-cvs
mailing list