[2/7] gdiplus: better handle UnitPixel pen width

Evan Stade estade at gmail.com
Mon Aug 13 20:34:31 CDT 2007


Hi,

pens with width UnitPixel always have the same width (does not get
stretched by WorldTransform)

 dlls/gdiplus/graphics.c |   29 +++++++++++++++++------------
 1 files changed, 17 insertions(+), 12 deletions(-)

-- 
Evan Stade
-------------- next part --------------
diff --git a/dlls/gdiplus/graphics.c b/dlls/gdiplus/graphics.c
index 1d2748a..fecabfb 100644
--- a/dlls/gdiplus/graphics.c
+++ b/dlls/gdiplus/graphics.c
@@ -92,18 +92,23 @@ static INT prepare_dc(GpGraphics *graphi
 
     EndPath(graphics->hdc);
 
-    /* Get an estimate for the amount the pen width is affected by the world
-     * transform. (This is similar to what some of the wine drivers do.) */
-    pt[0].X = 0.0;
-    pt[0].Y = 0.0;
-    pt[1].X = 1.0;
-    pt[1].Y = 1.0;
-    GdipTransformMatrixPoints(graphics->worldtrans, pt, 2);
-    width = sqrt((pt[1].X - pt[0].X) * (pt[1].X - pt[0].X) +
-                 (pt[1].Y - pt[0].Y) * (pt[1].Y - pt[0].Y)) / sqrt(2.0);
-
-    width *= pen->width * convert_unit(graphics->hdc,
-                          pen->unit == UnitWorld ? graphics->unit : pen->unit);
+    if(pen->unit == UnitPixel){
+        width = pen->width;
+    }
+    else{
+        /* Get an estimate for the amount the pen width is affected by the world
+         * transform. (This is similar to what some of the wine drivers do.) */
+        pt[0].X = 0.0;
+        pt[0].Y = 0.0;
+        pt[1].X = 1.0;
+        pt[1].Y = 1.0;
+        GdipTransformMatrixPoints(graphics->worldtrans, pt, 2);
+        width = sqrt((pt[1].X - pt[0].X) * (pt[1].X - pt[0].X) +
+                     (pt[1].Y - pt[0].Y) * (pt[1].Y - pt[0].Y)) / sqrt(2.0);
+
+        width *= pen->width * convert_unit(graphics->hdc,
+                              pen->unit == UnitWorld ? graphics->unit : pen->unit);
+    }
 
     if(pen->dash == DashStyleCustom){
         numdashes = min(pen->numdashes, MAX_DASHLEN);
-- 
1.4.1


More information about the wine-patches mailing list