Jacek Caban : gdi32: Introduce NtGdiCreatePen.
Alexandre Julliard
julliard at winehq.org
Mon Jul 5 16:24:19 CDT 2021
Module: wine
Branch: master
Commit: f5c117fb78b8530a31fb15eff7936b1b37aef7de
URL: https://source.winehq.org/git/wine.git/?a=commit;h=f5c117fb78b8530a31fb15eff7936b1b37aef7de
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Jul 5 13:40:15 2021 +0200
gdi32: Introduce NtGdiCreatePen.
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/objects.c | 9 +++++++++
dlls/gdi32/pen.c | 33 ++++++++++++++-------------------
include/ntgdi.h | 2 +-
3 files changed, 24 insertions(+), 20 deletions(-)
diff --git a/dlls/gdi32/objects.c b/dlls/gdi32/objects.c
index 7fbb0419ec8..0e8453f4af2 100644
--- a/dlls/gdi32/objects.c
+++ b/dlls/gdi32/objects.c
@@ -177,3 +177,12 @@ HPEN WINAPI CreatePenIndirect( const LOGPEN *pen )
{
return CreatePen( pen->lopnStyle, pen->lopnWidth.x, pen->lopnColor );
}
+
+/***********************************************************************
+ * CreatePen (GDI32.@)
+ */
+HPEN WINAPI CreatePen( INT style, INT width, COLORREF color )
+{
+ if (style < 0 || style > PS_INSIDEFRAME) style = PS_SOLID;
+ return NtGdiCreatePen( style, width, color, NULL );
+}
diff --git a/dlls/gdi32/pen.c b/dlls/gdi32/pen.c
index 1fbd467d105..7790278fca6 100644
--- a/dlls/gdi32/pen.c
+++ b/dlls/gdi32/pen.c
@@ -52,27 +52,15 @@ static const struct gdi_obj_funcs pen_funcs =
/***********************************************************************
- * CreatePen (GDI32.@)
+ * NtGdiCreatePen (win32u.@)
*/
-HPEN WINAPI CreatePen( INT style, INT width, COLORREF color )
+HPEN WINAPI NtGdiCreatePen( INT style, INT width, COLORREF color, HBRUSH brush )
{
PENOBJ *penPtr;
HPEN hpen;
TRACE( "%d %d %06x\n", style, width, color );
-
- if (style == PS_NULL)
- {
- hpen = GetStockObject(NULL_PEN);
- if (hpen) return hpen;
- }
-
- if (!(penPtr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*penPtr) ))) return 0;
-
- penPtr->logpen.elpPenStyle = style;
- penPtr->logpen.elpWidth = abs(width);
- penPtr->logpen.elpColor = color;
- penPtr->logpen.elpBrushStyle = BS_SOLID;
+ if (brush) FIXME( "brush not supported\n" );
switch (style)
{
@@ -84,14 +72,21 @@ HPEN WINAPI CreatePen( INT style, INT width, COLORREF color )
case PS_INSIDEFRAME:
break;
case PS_NULL:
- penPtr->logpen.elpWidth = 1;
- penPtr->logpen.elpColor = 0;
+ if ((hpen = GetStockObject( NULL_PEN ))) return hpen;
+ width = 1;
+ color = 0;
break;
default:
- penPtr->logpen.elpPenStyle = PS_SOLID;
- break;
+ return 0;
}
+ if (!(penPtr = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*penPtr) ))) return 0;
+
+ penPtr->logpen.elpPenStyle = style;
+ penPtr->logpen.elpWidth = abs(width);
+ penPtr->logpen.elpColor = color;
+ penPtr->logpen.elpBrushStyle = BS_SOLID;
+
if (!(hpen = alloc_gdi_handle( &penPtr->obj, OBJ_PEN, &pen_funcs )))
HeapFree( GetProcessHeap(), 0, penPtr );
return hpen;
diff --git a/include/ntgdi.h b/include/ntgdi.h
index b4501c46b4e..778f589f550 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -68,7 +68,7 @@ HFONT WINAPI NtGdiHfontCreate( const ENUMLOGFONTEXDVW *enumex, ULONG unk2, UL
ULONG unk4, void *data );
HBRUSH WINAPI NtGdiCreateDIBBrush( const void* data, UINT coloruse );
HBRUSH WINAPI NtGdiCreatePatternBrushInternal( HBITMAP hbitmap, BOOL pen );
-HPEN WINAPI NtGdiCreatePen( INT style, INT width, COLORREF color );
+HPEN WINAPI NtGdiCreatePen( INT style, INT width, COLORREF color, HBRUSH brush );
HRGN WINAPI NtGdiCreateRectRgn( INT left, INT top, INT right, INT bottom );
HRGN WINAPI NtGdiCreateRoundRectRgn( INT left, INT top, INT right, INT bottom,
INT ellipse_width, INT ellipse_height );
More information about the wine-cvs
mailing list