From 2c16ab2ae2c098a6e6f707ccafc9f7c6b0de4066 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Wed, 16 Mar 2011 22:58:07 +0100 Subject: [PATCH] gdi32: Add a null driver entry point for UnrealizePalette. --- dlls/gdi32/driver.c | 7 ++++++- dlls/gdi32/palette.c | 18 +++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c index 8139e15f9e7..f040bde4b79 100644 --- a/dlls/gdi32/driver.c +++ b/dlls/gdi32/driver.c @@ -714,6 +714,11 @@ static BOOL CDECL nulldrv_SwapBuffers( PHYSDEV dev ) return TRUE; } +static BOOL CDECL nulldrv_UnrealizePalette( HPALETTE palette ) +{ + return FALSE; +} + static BOOL CDECL nulldrv_wglCopyContext( HGLRC ctx_src, HGLRC ctx_dst, UINT mask ) { return FALSE; @@ -895,7 +900,7 @@ const DC_FUNCTIONS null_driver = nulldrv_StrokeAndFillPath, /* pStrokeAndFillPath */ nulldrv_StrokePath, /* pStrokePath */ nulldrv_SwapBuffers, /* pSwapBuffers */ - NULL, /* pUnrealizePalette */ + nulldrv_UnrealizePalette, /* pUnrealizePalette */ nulldrv_WidenPath, /* pWidenPath */ nulldrv_wglCopyContext, /* pwglCopyContext */ nulldrv_wglCreateContext, /* pwglCreateContext */ diff --git a/dlls/gdi32/palette.c b/dlls/gdi32/palette.c index a60f34272e9..37e425d1605 100644 --- a/dlls/gdi32/palette.c +++ b/dlls/gdi32/palette.c @@ -38,10 +38,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(palette); +typedef BOOL (CDECL *unrealize_function)(HPALETTE); + typedef struct tagPALETTEOBJ { GDIOBJHDR header; - const DC_FUNCTIONS *funcs; /* DC function table */ + unrealize_function unrealize; WORD version; /* palette version */ WORD count; /* count of palette entries */ PALETTEENTRY *entries; @@ -152,7 +154,7 @@ HPALETTE WINAPI CreatePalette( size = sizeof(LOGPALETTE) + (palette->palNumEntries - 1) * sizeof(PALETTEENTRY); if (!(palettePtr = HeapAlloc( GetProcessHeap(), 0, sizeof(*palettePtr) ))) return 0; - palettePtr->funcs = NULL; + palettePtr->unrealize = NULL; palettePtr->version = palette->palVersion; palettePtr->count = palette->palNumEntries; size = palettePtr->count * sizeof(*palettePtr->entries); @@ -410,7 +412,6 @@ BOOL WINAPI AnimatePalette( PALETTEOBJ * palPtr; UINT pal_entries; const PALETTEENTRY *pptr = PaletteColors; - const DC_FUNCTIONS *funcs; palPtr = GDI_GetObjPtr( hPal, OBJ_PAL ); if (!palPtr) return 0; @@ -436,9 +437,8 @@ BOOL WINAPI AnimatePalette( TRACE("Not animating entry %d -- not PC_RESERVED\n", StartIndex); } } - funcs = palPtr->funcs; GDI_ReleaseObj( hPal ); - if (funcs && funcs->pRealizePalette) funcs->pRealizePalette( NULL, hPal, hPal == hPrimaryPalette ); + /* FIXME: check for palette selected in active window */ } return TRUE; } @@ -650,10 +650,10 @@ static BOOL PALETTE_UnrealizeObject( HGDIOBJ handle ) if (palette) { - const DC_FUNCTIONS *funcs = palette->funcs; - palette->funcs = NULL; + unrealize_function unrealize = palette->unrealize; + palette->unrealize = NULL; GDI_ReleaseObj( handle ); - if (funcs && funcs->pUnrealizePalette) funcs->pUnrealizePalette( handle ); + if (unrealize) unrealize( handle ); } if (InterlockedCompareExchangePointer( (void **)&hLastRealizedPalette, 0, handle ) == handle) @@ -733,7 +733,7 @@ UINT WINAPI GDIRealizePalette( HDC hdc ) { realized = physdev->funcs->pRealizePalette( physdev, dc->hPalette, (dc->hPalette == hPrimaryPalette) ); - palPtr->funcs = dc->funcs; + palPtr->unrealize = physdev->funcs->pUnrealizePalette; GDI_ReleaseObj( dc->hPalette ); } }