Jacek Caban : gdi32: Direcly use ntgdi functions in dib driver.

Alexandre Julliard julliard at winehq.org
Wed Sep 15 16:21:31 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep 14 21:52:08 2021 +0200

gdi32: Direcly use ntgdi functions in dib driver.

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/dibdrv/dc.c       |  4 +---
 dlls/gdi32/dibdrv/graphics.c | 10 ++++++----
 dlls/gdi32/dibdrv/objects.c  | 19 ++++++++++++-------
 3 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/dlls/gdi32/dibdrv/dc.c b/dlls/gdi32/dibdrv/dc.c
index c4474cbb63e..8b2eb6a7480 100644
--- a/dlls/gdi32/dibdrv/dc.c
+++ b/dlls/gdi32/dibdrv/dc.c
@@ -30,8 +30,6 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(dib);
 
-extern BOOL WINAPI GdiSetPixelFormat( HDC hdc, INT fmt, const PIXELFORMATDESCRIPTOR *pfd );
-
 static const struct osmesa_funcs *osmesa_funcs;
 
 static const DWORD bit_fields_888[3] = {0xff0000, 0x00ff00, 0x0000ff};
@@ -564,7 +562,7 @@ static BOOL WINAPI dibdrv_wglMakeCurrent( HDC hdc, struct wgl_context *context )
 static BOOL WINAPI dibdrv_wglSetPixelFormat( HDC hdc, int fmt, const PIXELFORMATDESCRIPTOR *descr )
 {
     if (fmt <= 0 || fmt > ARRAY_SIZE( pixel_formats )) return FALSE;
-    return GdiSetPixelFormat( hdc, fmt, descr );
+    return NtGdiSetPixelFormat( hdc, fmt );
 }
 
 /***********************************************************************
diff --git a/dlls/gdi32/dibdrv/graphics.c b/dlls/gdi32/dibdrv/graphics.c
index 9bd6dc557a5..9ebcaf7e4a3 100644
--- a/dlls/gdi32/dibdrv/graphics.c
+++ b/dlls/gdi32/dibdrv/graphics.c
@@ -558,7 +558,7 @@ static struct cached_font *add_cached_font( DC *dc, HFONT hfont, UINT aa_flags )
     struct cached_font font, *ptr, *last_unused = NULL;
     UINT i = 0, j, k;
 
-    GetObjectW( hfont, sizeof(font.lf), &font.lf );
+    NtGdiExtGetObjectW( hfont, sizeof(font.lf), &font.lf );
     font.xform = dc->xformWorld2Vport;
     font.xform.eDx = font.xform.eDy = 0;  /* unused, would break hashing */
     if (dc->attr->graphics_mode == GM_COMPATIBLE)
@@ -761,7 +761,8 @@ static struct cached_glyph *cache_glyph_bitmap( DC *dc, struct cached_font *font
     for (i = 0; i < ARRAY_SIZE( indices ); i++)
     {
         index = indices[i];
-        ret = GetGlyphOutlineW( dc->hSelf, index, ggo_flags, &metrics, 0, NULL, &identity );
+        ret = NtGdiGetGlyphOutline( dc->hSelf, index, ggo_flags, &metrics, 0, NULL,
+                                    &identity, FALSE );
         if (ret != GDI_ERROR) break;
     }
     if (ret == GDI_ERROR) return NULL;
@@ -776,7 +777,8 @@ static struct cached_glyph *cache_glyph_bitmap( DC *dc, struct cached_font *font
 
     if (bit_count == 8) pad = padding[ metrics.gmBlackBoxX % 4 ];
 
-    ret = GetGlyphOutlineW( dc->hSelf, index, ggo_flags, &metrics, size, glyph->bits, &identity );
+    ret = NtGdiGetGlyphOutline( dc->hSelf, index, ggo_flags, &metrics, size, glyph->bits,
+                                &identity, FALSE );
     if (ret == GDI_ERROR)
     {
         HeapFree( GetProcessHeap(), 0, glyph );
@@ -1421,7 +1423,7 @@ BOOL CDECL dibdrv_Rectangle( PHYSDEV dev, INT left, INT top, INT right, INT bott
     {
         if (pdev->brush.style != BS_NULL)
         {
-            HRGN interior = CreateRectRgnIndirect( &rect );
+            HRGN interior = NtGdiCreateRectRgn( rect.left, rect.top, rect.right, rect.bottom );
 
             NtGdiCombineRgn( interior, interior, outline, RGN_DIFF );
             brush_region( pdev, interior );
diff --git a/dlls/gdi32/dibdrv/objects.c b/dlls/gdi32/dibdrv/objects.c
index e7eff6fdd03..a61ae3e226f 100644
--- a/dlls/gdi32/dibdrv/objects.c
+++ b/dlls/gdi32/dibdrv/objects.c
@@ -1272,6 +1272,11 @@ static void add_cap( dibdrv_physdev *pdev, HRGN region, HRGN round_cap, const PO
 
 #define round( f ) (((f) > 0) ? (f) + 0.5 : (f) - 0.5)
 
+static HRGN create_polygon_region( const POINT *points, INT count, INT mode )
+{
+    return create_polypolygon_region( points, &count, 1, mode, NULL );
+}
+
 /*******************************************************************************
  *                 create_miter_region
  *
@@ -1326,7 +1331,7 @@ static HRGN create_miter_region( dibdrv_physdev *pdev, const POINT *pt,
     pts[3] = face_2->end;
     pts[4] = face_1->end;
 
-    return CreatePolygonRgn( pts, 5, ALTERNATE );
+    return create_polygon_region( pts, 5, ALTERNATE );
 }
 
 static void add_join( dibdrv_physdev *pdev, HRGN region, HRGN round_cap, const POINT *pt,
@@ -1360,7 +1365,7 @@ static void add_join( dibdrv_physdev *pdev, HRGN region, HRGN round_cap, const P
         pts[1] = face_2->end;
         pts[2] = face_1->end;
         pts[3] = face_2->start;
-        join = CreatePolygonRgn( pts, 4, ALTERNATE );
+        join = create_polygon_region( pts, 4, ALTERNATE );
         break;
     }
 
@@ -1497,7 +1502,7 @@ static BOOL wide_line_segment( dibdrv_physdev *pdev, HRGN total,
             set_rect( &clip_rect, seg_pts[2].x, seg_pts[3].y, seg_pts[0].x, seg_pts[1].y );
         if (clip_rect_to_dib( &pdev->dib, &clip_rect ))
         {
-            segment = CreatePolygonRgn( seg_pts, 4, ALTERNATE );
+            segment = create_polygon_region( seg_pts, 4, ALTERNATE );
             NtGdiCombineRgn( total, total, segment, RGN_OR );
             NtGdiDeleteObjectApp( segment );
         }
@@ -2134,7 +2139,7 @@ HBRUSH CDECL dibdrv_SelectBrush( PHYSDEV dev, HBRUSH hbrush, const struct brush_
 
     TRACE("(%p, %p)\n", dev, hbrush);
 
-    GetObjectW( hbrush, sizeof(logbrush), &logbrush );
+    NtGdiExtGetObjectW( hbrush, sizeof(logbrush), &logbrush );
 
     if (hbrush == get_stock_object( DC_BRUSH ))
         logbrush.lbColor = dc->attr->brush_color;
@@ -2157,16 +2162,16 @@ HPEN CDECL dibdrv_SelectPen( PHYSDEV dev, HPEN hpen, const struct brush_pattern
 
     TRACE("(%p, %p)\n", dev, hpen);
 
-    if (!GetObjectW( hpen, sizeof(logpen), &logpen ))
+    if (!NtGdiExtGetObjectW( hpen, sizeof(logpen), &logpen ))
     {
         /* must be an extended pen */
-        INT size = GetObjectW( hpen, 0, NULL );
+        INT size = NtGdiExtGetObjectW( hpen, 0, NULL );
 
         if (!size) return 0;
 
         elp = HeapAlloc( GetProcessHeap(), 0, size );
 
-        GetObjectW( hpen, size, elp );
+        NtGdiExtGetObjectW( hpen, size, elp );
         logpen.lopnStyle = elp->elpPenStyle;
         logpen.lopnWidth.x = elp->elpWidth;
         /* cosmetic ext pens are always 1-pixel wide */




More information about the wine-cvs mailing list