Alexandre Julliard : gdi32: Add a helper function to find a specific driver in the DC stack.
Alexandre Julliard
julliard at winehq.org
Tue Aug 21 13:40:18 CDT 2012
Module: wine
Branch: master
Commit: 0f5cc668bada79e38e8751bcf796f5b348ed3805
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0f5cc668bada79e38e8751bcf796f5b348ed3805
Author: Alexandre Julliard <julliard at winehq.org>
Date: Tue Aug 21 12:54:01 2012 +0200
gdi32: Add a helper function to find a specific driver in the DC stack.
---
dlls/gdi32/gdi_private.h | 8 ++++++++
dlls/gdi32/path.c | 9 +++++----
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/dlls/gdi32/gdi_private.h b/dlls/gdi32/gdi_private.h
index 44d5798..78ff1a7 100644
--- a/dlls/gdi32/gdi_private.h
+++ b/dlls/gdi32/gdi_private.h
@@ -179,6 +179,14 @@ static inline PHYSDEV pop_dc_driver( DC *dc, PHYSDEV dev )
return dev;
}
+static inline PHYSDEV find_dc_driver( DC *dc, const struct gdi_dc_funcs *funcs )
+{
+ PHYSDEV dev;
+
+ for (dev = dc->physDev; dev; dev = dev->next) if (dev->funcs == funcs) return dev;
+ return NULL;
+}
+
/* bitmap object */
typedef struct tagBITMAPOBJ
diff --git a/dlls/gdi32/path.c b/dlls/gdi32/path.c
index 0a591af..a58f4e6 100644
--- a/dlls/gdi32/path.c
+++ b/dlls/gdi32/path.c
@@ -856,14 +856,15 @@ static BOOL pathdrv_DeleteDC( PHYSDEV dev )
BOOL PATH_SavePath( DC *dst, DC *src )
{
- struct path_physdev *physdev;
+ PHYSDEV dev;
if (src->path)
{
if (!(dst->path = copy_gdi_path( src->path ))) return FALSE;
}
- else if ((physdev = find_path_physdev( src )))
+ else if ((dev = find_dc_driver( src, &path_driver )))
{
+ struct path_physdev *physdev = get_path_physdev( dev );
if (!(dst->path = copy_gdi_path( physdev->path ))) return FALSE;
dst->path_open = TRUE;
}
@@ -880,7 +881,7 @@ BOOL PATH_RestorePath( DC *dst, DC *src )
if (!physdev)
{
if (!path_driver.pCreateDC( &dst->physDev, NULL, NULL, NULL, NULL )) return FALSE;
- physdev = get_path_physdev( dst->physDev );
+ physdev = get_path_physdev( find_dc_driver( dst, &path_driver ));
}
else free_gdi_path( physdev->path );
@@ -2101,7 +2102,7 @@ BOOL nulldrv_BeginPath( PHYSDEV dev )
free_gdi_path( path );
return FALSE;
}
- physdev = get_path_physdev( dc->physDev );
+ physdev = get_path_physdev( find_dc_driver( dc, &path_driver ));
physdev->path = path;
if (dc->path) free_gdi_path( dc->path );
dc->path = NULL;
More information about the wine-cvs
mailing list