Jacek Caban : gdi32: Store miter limit in DC_ATTR.

Alexandre Julliard julliard at winehq.org
Fri Jul 30 14:21:08 CDT 2021


Module: wine
Branch: master
Commit: 06dd790c452bbf783b98380a738e1d949213ebb6
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=06dd790c452bbf783b98380a738e1d949213ebb6

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Jul 30 13:01:05 2021 +0200

gdi32: Store miter limit in DC_ATTR.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/gdi32/dc.c             | 30 +++---------------------------
 dlls/gdi32/dibdrv/objects.c |  2 +-
 dlls/gdi32/gdidc.c          | 11 +++++++++++
 dlls/gdi32/ntgdi_private.h  |  1 -
 dlls/gdi32/path.c           |  2 +-
 include/ntgdi.h             |  1 +
 6 files changed, 17 insertions(+), 30 deletions(-)

diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c
index 675527d4df5..4a8326c647e 100644
--- a/dlls/gdi32/dc.c
+++ b/dlls/gdi32/dc.c
@@ -79,7 +79,7 @@ static void set_initial_dc_state( DC *dc )
     dc->vport_org.y         = 0;
     dc->vport_ext.cx        = 1;
     dc->vport_ext.cy        = 1;
-    dc->miterLimit          = 10.0f; /* 10.0 is the default, from MSDN */
+    dc->attr->miter_limit   = 10.0f; /* 10.0 is the default, from MSDN */
     dc->attr->layout        = 0;
     dc->font_code_page      = CP_ACP;
     dc->attr->rop_mode      = R2_COPYPEN;
@@ -1538,30 +1538,6 @@ BOOL WINAPI CancelDC(HDC hdc)
     return TRUE;
 }
 
-/*******************************************************************
- *      GetMiterLimit [GDI32.@]
- *
- *
- */
-BOOL WINAPI GetMiterLimit(HDC hdc, PFLOAT peLimit)
-{
-    BOOL bRet = FALSE;
-    DC *dc;
-
-    TRACE("(%p,%p)\n", hdc, peLimit);
-
-    dc = get_dc_ptr( hdc );
-    if (dc)
-    {
-        if (peLimit)
-            *peLimit = dc->miterLimit;
-
-        release_dc_ptr( dc );
-        bRet = TRUE;
-    }
-    return bRet;
-}
-
 /*******************************************************************
  *      SetMiterLimit [GDI32.@]
  *
@@ -1578,8 +1554,8 @@ BOOL WINAPI SetMiterLimit(HDC hdc, FLOAT eNewLimit, PFLOAT peOldLimit)
     if (dc)
     {
         if (peOldLimit)
-            *peOldLimit = dc->miterLimit;
-        dc->miterLimit = eNewLimit;
+            *peOldLimit = dc->attr->miter_limit;
+        dc->attr->miter_limit = eNewLimit;
         release_dc_ptr( dc );
         bRet = TRUE;
     }
diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c
index ce8e3572e90..c5c805ff77e 100644
--- a/dlls/gdi32/dibdrv/objects.c
+++ b/dlls/gdi32/dibdrv/objects.c
@@ -1316,7 +1316,7 @@ static HRGN create_miter_region( dibdrv_physdev *pdev, const POINT *pt,
     y = a * face_1->dy - b * face_2->dy;
 
     if (((x - pt->x) * (x - pt->x) + (y - pt->y) * (y - pt->y)) * 4 >
-        dc->miterLimit * dc->miterLimit * pdev->pen_width * pdev->pen_width)
+        dc->attr->miter_limit * dc->attr->miter_limit * pdev->pen_width * pdev->pen_width)
         return 0;
 
     pts[0] = face_2->start;
diff --git a/dlls/gdi32/gdidc.c b/dlls/gdi32/gdidc.c
index be9ac3d83b9..8d55d50f9a3 100644
--- a/dlls/gdi32/gdidc.c
+++ b/dlls/gdi32/gdidc.c
@@ -328,6 +328,17 @@ INT WINAPI SetROP2( HDC hdc, INT mode )
     return ret;
 }
 
+/***********************************************************************
+ *           GetMiterLimit  (GDI32.@)
+ */
+BOOL WINAPI GetMiterLimit( HDC hdc, FLOAT *limit )
+{
+    DC_ATTR *dc_attr;
+    if (!(dc_attr = get_dc_attr( hdc ))) return FALSE;
+    if (limit) *limit = dc_attr->miter_limit;
+    return TRUE;
+}
+
 /***********************************************************************
  *           SetPixel    (GDI32.@)
  */
diff --git a/dlls/gdi32/ntgdi_private.h b/dlls/gdi32/ntgdi_private.h
index 73e6fd3d21f..773f6aa007d 100644
--- a/dlls/gdi32/ntgdi_private.h
+++ b/dlls/gdi32/ntgdi_private.h
@@ -97,7 +97,6 @@ typedef struct tagDC
     RECT         device_rect;      /* rectangle for the whole device */
     int          pixel_format;     /* pixel format (for memory DCs) */
     UINT         aa_flags;         /* anti-aliasing flags to pass to GetGlyphOutline for current font */
-    FLOAT        miterLimit;
     WCHAR        display[CCHDEVICENAME]; /* Display name when created for a specific display device */
 
     int           flags;
diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c
index 8a0369a82d0..634bea9bb89 100644
--- a/dlls/gdi32/path.c
+++ b/dlls/gdi32/path.c
@@ -1796,7 +1796,7 @@ static struct gdi_path *PATH_WidenPath(DC *dc)
                 alpha = atan2( yb - yo, xb - xo ) - theta;
                 if (alpha > 0) alpha -= M_PI;
                 else alpha += M_PI;
-                if(_joint == PS_JOIN_MITER && dc->miterLimit < fabs(1 / sin(alpha/2))) {
+                if(_joint == PS_JOIN_MITER && dc->attr->miter_limit < fabs(1 / sin(alpha/2))) {
                     _joint = PS_JOIN_BEVEL;
                 }
                 if(alpha > 0) {
diff --git a/include/ntgdi.h b/include/ntgdi.h
index 1fffc566adc..22d1f9da187 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -114,6 +114,7 @@ typedef struct DC_ATTR
     WORD      rel_abs_mode;
     WORD      stretch_blt_mode;
     INT       map_mode;
+    FLOAT     miter_limit;
     void     *emf;
 } DC_ATTR;
 




More information about the wine-cvs mailing list