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