Module: wine Branch: master Commit: a23725785e12f920b35a43b915cba70bccc45176 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a23725785e12f920b35a43b915...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Apr 7 20:18:58 2009 +0200
gdi32: Move the whole DC saving functionality into get_dc_state, and rename it to save_dc_state.
---
dlls/gdi32/dc.c | 50 ++++++++++++++------------------------------- dlls/gdi32/gdi_private.h | 2 +- 2 files changed, 17 insertions(+), 35 deletions(-)
diff --git a/dlls/gdi32/dc.c b/dlls/gdi32/dc.c index 8bcd2fa..9f0c9f6 100644 --- a/dlls/gdi32/dc.c +++ b/dlls/gdi32/dc.c @@ -332,12 +332,12 @@ void DC_UpdateXforms( DC *dc )
/*********************************************************************** - * get_dc_state (Not a Windows API) + * save_dc_state */ -HDC get_dc_state( HDC hdc ) +INT save_dc_state( HDC hdc ) { DC * newdc, * dc; - HGDIOBJ handle; + INT ret;
if (!(dc = get_dc_ptr( hdc ))) return 0; if (!(newdc = HeapAlloc( GetProcessHeap(), 0, sizeof(*newdc )))) @@ -407,8 +407,6 @@ HDC get_dc_state( HDC hdc ) release_dc_ptr( dc ); return 0; } - handle = newdc->hSelf; - TRACE("(%p): returning %p\n", hdc, handle );
/* Get/SetDCState() don't change hVisRgn field ("Undoc. Windows" p.559). */
@@ -428,9 +426,19 @@ HDC get_dc_state( HDC hdc ) } /* don't bother recomputing hMetaClipRgn, we'll do that in SetDCState */
+ if (!PATH_AssignGdiPath( &newdc->path, &dc->path )) + { + release_dc_ptr( dc ); + free_dc_ptr( newdc ); + return 0; + } + + newdc->saved_dc = dc->saved_dc; + dc->saved_dc = newdc->hSelf; + ret = ++dc->saveLevel; release_dc_ptr( newdc ); release_dc_ptr( dc ); - return handle; + return ret; }
@@ -533,8 +541,7 @@ void set_dc_state( HDC hdc, HDC hdcs ) */ INT WINAPI SaveDC( HDC hdc ) { - HDC hdcs; - DC * dc, * dcs; + DC * dc; INT ret;
dc = get_dc_ptr( hdc ); @@ -549,32 +556,7 @@ INT WINAPI SaveDC( HDC hdc ) return ret; }
- if (!(hdcs = get_dc_state( hdc ))) - { - release_dc_ptr( dc ); - return 0; - } - dcs = get_dc_ptr( hdcs ); - - /* Copy path. The reason why path saving / restoring is in SaveDC/ - * RestoreDC and not in GetDCState/SetDCState is that the ...DCState - * functions are only in Win16 (which doesn't have paths) and that - * SetDCState doesn't allow us to signal an error (which can happen - * when copying paths). - */ - if (!PATH_AssignGdiPath( &dcs->path, &dc->path )) - { - release_dc_ptr( dc ); - release_dc_ptr( dcs ); - DeleteDC( hdcs ); - return 0; - } - - dcs->saved_dc = dc->saved_dc; - dc->saved_dc = hdcs; - TRACE("(%p): returning %d\n", hdc, dc->saveLevel+1 ); - ret = ++dc->saveLevel; - release_dc_ptr( dcs ); + ret = save_dc_state( hdc ); release_dc_ptr( dc ); return ret; } diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h index a21fc76..c585eaf 100644 --- a/dlls/gdi32/gdi_private.h +++ b/dlls/gdi32/gdi_private.h @@ -383,7 +383,7 @@ extern void release_dc_ptr( DC *dc ) DECLSPEC_HIDDEN; extern void update_dc( DC *dc ) DECLSPEC_HIDDEN; extern void DC_InitDC( DC * dc ) DECLSPEC_HIDDEN; extern void DC_UpdateXforms( DC * dc ) DECLSPEC_HIDDEN; -extern HDC get_dc_state( HDC hdc ) DECLSPEC_HIDDEN; +extern INT save_dc_state( HDC hdc ) DECLSPEC_HIDDEN; extern void set_dc_state( HDC hdc, HDC hdcs ) DECLSPEC_HIDDEN;
/* dib.c */