[18/18] gdiplus: improved direction of LineCapArrowAnchor

Evan Stade estade at gmail.com
Wed Jul 11 20:08:26 CDT 2007


Hi,

Before when I submitted a patch with this name I attached the wrong
patch.  It still got committed, which was OK, but it had the wrong
name. So while this patch has the same name as another patch that
already got accepted, it's really a different patch because the last
one was named incorrectly.

Changelog:
*changed the way the direction of the endcap is calculated to make
LineCapArrowAnchor direction match windows better

 dlls/gdiplus/graphics.c |   15 +++++++++++----
 1 files changed, 11 insertions(+), 4 deletions(-)

-- 
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 93cbcd1..eb37995 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -384,8 +384,13 @@ static GpStatus draw_polybezier(HDC hdc,
         if(pen->endcap == LineCapArrowAnchor)
             shorten_bezier_amt(ptf, pen->width);
 
-        draw_cap(hdc, pen->color, pen->endcap, pen->width, ptf[3].X,
-            ptf[3].Y, pt[count - 1].X, pt[count - 1].Y);
+        /* the direction of the line cap is parallel to the direction at the
+         * end of the bezier (which, if it has been shortened, is not the same
+         * as the direction from pt[count-2] to pt[count-1]) */
+        draw_cap(hdc, pen->color, pen->endcap, pen->width,
+            pt[count - 1].X - (ptf[3].X - ptf[2].X),
+            pt[count - 1].Y - (ptf[3].Y - ptf[2].Y),
+            pt[count - 1].X, pt[count - 1].Y);
     }
 
     for(i = 0; i < count - 4; i ++){
@@ -474,8 +479,10 @@ static GpStatus draw_poly(HDC hdc, GpPen
             if(pen->endcap == LineCapArrowAnchor)
                 shorten_bezier_amt(ptf, pen->width);
 
-            draw_cap(hdc, pen->color, pen->endcap, pen->width, ptf[3].X,
-                ptf[3].Y, pt[count - 1].X, pt[count - 1].Y);
+            draw_cap(hdc, pen->color, pen->endcap, pen->width,
+                pt[count - 1].X - (ptf[3].X - ptf[2].X),
+                pt[count - 1].Y - (ptf[3].Y - ptf[2].Y),
+                pt[count - 1].X, pt[count - 1].Y);
         }
         for(i = 0; i < 4; i ++){
             pti[i + count - 4].x = roundr(ptf[i].X);
-- 
1.4.1


More information about the wine-patches mailing list