Alexandre Julliard : gdi32: Get rid of DC_GetDCPtr in the GDI object functions.
Alexandre Julliard
julliard at winehq.org
Wed Feb 6 07:27:45 CST 2008
Module: wine
Branch: master
Commit: 8815e63835c09af0fcbcec72568e4ba16eaaa1ff
URL: http://source.winehq.org/git/wine.git/?a=commit;h=8815e63835c09af0fcbcec72568e4ba16eaaa1ff
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Feb 5 21:17:28 2008 +0100
gdi32: Get rid of DC_GetDCPtr in the GDI object functions.
---
dlls/gdi32/brush.c | 18 +++++++++++++-----
dlls/gdi32/gdiobj.c | 41 ++++++++++++++++-------------------------
dlls/gdi32/pen.c | 24 ++++++++++++++++++------
3 files changed, 47 insertions(+), 36 deletions(-)
diff --git a/dlls/gdi32/brush.c b/dlls/gdi32/brush.c
index 54129c7..95da9b1 100644
--- a/dlls/gdi32/brush.c
+++ b/dlls/gdi32/brush.c
@@ -374,22 +374,30 @@ static HGDIOBJ BRUSH_SelectObject( HGDIOBJ handle, HDC hdc )
HGDIOBJ ret = 0;
DC *dc = get_dc_ptr( hdc );
- if (!dc) return 0;
+ if (!dc)
+ {
+ SetLastError( ERROR_INVALID_HANDLE );
+ return 0;
+ }
if ((brush = GDI_GetObjPtr( handle, BRUSH_MAGIC )))
{
if (brush->logbrush.lbStyle == BS_PATTERN)
BITMAP_SetOwnerDC( (HBITMAP)brush->logbrush.lbHatch, dc );
- if (dc->funcs->pSelectBrush) handle = dc->funcs->pSelectBrush( dc->physDev, handle );
- if (handle)
+ GDI_inc_ref_count( handle );
+ GDI_ReleaseObj( handle );
+
+ if (dc->funcs->pSelectBrush && !dc->funcs->pSelectBrush( dc->physDev, handle ))
+ {
+ GDI_dec_ref_count( handle );
+ }
+ else
{
ret = dc->hBrush;
dc->hBrush = handle;
- GDI_inc_ref_count( handle );
GDI_dec_ref_count( ret );
}
- GDI_ReleaseObj( handle );
}
release_dc_ptr( dc );
return ret;
diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c
index 91cfb71..e2c9533 100644
--- a/dlls/gdi32/gdiobj.c
+++ b/dlls/gdi32/gdiobj.c
@@ -823,7 +823,7 @@ BOOL WINAPI DeleteObject( HGDIOBJ obj )
while (header->hdcs)
{
- DC *dc = DC_GetDCPtr(header->hdcs->hdc);
+ DC *dc = get_dc_ptr(header->hdcs->hdc);
struct hdc_list *tmp;
TRACE("hdc %p has interest in %p\n", header->hdcs->hdc, obj);
@@ -831,7 +831,7 @@ BOOL WINAPI DeleteObject( HGDIOBJ obj )
{
if(dc->funcs->pDeleteObject)
dc->funcs->pDeleteObject( dc->physDev, obj );
- DC_ReleaseDCPtr( dc );
+ release_dc_ptr( dc );
}
tmp = header->hdcs;
header->hdcs = header->hdcs->next;
@@ -1098,10 +1098,10 @@ DWORD WINAPI GetObjectType( HGDIOBJ handle )
HGDIOBJ WINAPI GetCurrentObject(HDC hdc,UINT type)
{
HGDIOBJ ret = 0;
- DC * dc = DC_GetDCPtr( hdc );
+ DC * dc = get_dc_ptr( hdc );
+
+ if (!dc) return 0;
- if (dc)
- {
switch (type) {
case OBJ_EXTPEN: /* fall through */
case OBJ_PEN: ret = dc->hPen; break;
@@ -1112,13 +1112,12 @@ HGDIOBJ WINAPI GetCurrentObject(HDC hdc,UINT type)
/* tests show that OBJ_REGION is explicitly ignored */
case OBJ_REGION: break;
- default:
- /* the SDK only mentions those above */
- FIXME("(%p,%d): unknown type.\n",hdc,type);
+ default:
+ /* the SDK only mentions those above */
+ FIXME("(%p,%d): unknown type.\n",hdc,type);
break;
- }
- DC_ReleaseDCPtr( dc );
}
+ release_dc_ptr( dc );
return ret;
}
@@ -1143,23 +1142,15 @@ HGDIOBJ WINAPI SelectObject( HDC hdc, HGDIOBJ hObj )
{
HGDIOBJ ret = 0;
GDIOBJHDR *header;
- DC *dc;
TRACE( "(%p,%p)\n", hdc, hObj );
- if (!(dc = DC_GetDCPtr( hdc )))
- SetLastError( ERROR_INVALID_HANDLE );
- else
+ header = GDI_GetObjPtr( hObj, MAGIC_DONTCARE );
+ if (header)
{
- DC_ReleaseDCPtr( dc );
-
- header = GDI_GetObjPtr( hObj, MAGIC_DONTCARE );
- if (header)
- {
- const struct gdi_obj_funcs *funcs = header->funcs;
- GDI_ReleaseObj( hObj );
- if (funcs && funcs->pSelectObject) ret = funcs->pSelectObject( hObj, hdc );
- }
+ const struct gdi_obj_funcs *funcs = header->funcs;
+ GDI_ReleaseObj( hObj );
+ if (funcs && funcs->pSelectObject) ret = funcs->pSelectObject( hObj, hdc );
}
return ret;
}
@@ -1437,13 +1428,13 @@ BOOL WINAPI GetColorAdjustment(HDC hdc, LPCOLORADJUSTMENT lpca)
*/
BOOL WINAPI GdiComment(HDC hdc, UINT cbSize, const BYTE *lpData)
{
- DC *dc = DC_GetDCPtr(hdc);
+ DC *dc = get_dc_ptr(hdc);
BOOL ret = FALSE;
if(dc)
{
if (dc->funcs->pGdiComment)
ret = dc->funcs->pGdiComment( dc->physDev, cbSize, lpData );
- DC_ReleaseDCPtr( dc );
+ release_dc_ptr( dc );
}
return ret;
}
diff --git a/dlls/gdi32/pen.c b/dlls/gdi32/pen.c
index 5647d7e..971dadd 100644
--- a/dlls/gdi32/pen.c
+++ b/dlls/gdi32/pen.c
@@ -218,19 +218,31 @@ HPEN WINAPI ExtCreatePen( DWORD style, DWORD width,
static HGDIOBJ PEN_SelectObject( HGDIOBJ handle, HDC hdc )
{
HGDIOBJ ret = 0;
- DC *dc = DC_GetDCPtr( hdc );
+ DC *dc = get_dc_ptr( hdc );
- if (!dc) return 0;
+ if (!dc)
+ {
+ SetLastError( ERROR_INVALID_HANDLE );
+ return 0;
+ }
+
+ if (!GDI_inc_ref_count( handle ))
+ {
+ release_dc_ptr( dc );
+ return 0;
+ }
- if (dc->funcs->pSelectPen) handle = dc->funcs->pSelectPen( dc->physDev, handle );
- if (handle)
+ if (dc->funcs->pSelectPen && !dc->funcs->pSelectPen( dc->physDev, handle ))
+ {
+ GDI_dec_ref_count( handle );
+ }
+ else
{
ret = dc->hPen;
dc->hPen = handle;
- GDI_inc_ref_count( handle );
GDI_dec_ref_count( ret );
}
- DC_ReleaseDCPtr( dc );
+ release_dc_ptr( dc );
return ret;
}
More information about the wine-cvs
mailing list