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