Alexandre Julliard : gdi32: Get rid of DC_GetDCPtr in the palette functions .

Alexandre Julliard julliard at winehq.org
Wed Feb 6 07:27:45 CST 2008


Module: wine
Branch: master
Commit: 1e3c47eae9026e1b314ac693aac32022432e17e1
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=1e3c47eae9026e1b314ac693aac32022432e17e1

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Tue Feb  5 21:57:35 2008 +0100

gdi32: Get rid of DC_GetDCPtr in the palette functions.

---

 dlls/gdi32/palette.c |   39 ++++++++++++++++++---------------------
 1 files changed, 18 insertions(+), 21 deletions(-)

diff --git a/dlls/gdi32/palette.c b/dlls/gdi32/palette.c
index 54d2d06..b55a6f8 100644
--- a/dlls/gdi32/palette.c
+++ b/dlls/gdi32/palette.c
@@ -515,11 +515,11 @@ UINT WINAPI GetSystemPaletteEntries(
 
     TRACE("hdc=%p,start=%i,count=%i\n", hdc,start,count);
 
-    if ((dc = DC_GetDCPtr( hdc )))
+    if ((dc = get_dc_ptr( hdc )))
     {
         if (dc->funcs->pGetSystemPaletteEntries)
             ret = dc->funcs->pGetSystemPaletteEntries( dc->physDev, start, count, entries );
-        DC_ReleaseDCPtr( dc );
+        release_dc_ptr( dc );
     }
     return ret;
 }
@@ -584,18 +584,18 @@ COLORREF WINAPI GetNearestColor(
     COLORREF nearest;
     DC 		*dc;
 
-    if (!(dc = DC_GetDCPtr( hdc ))) return CLR_INVALID;
+    if (!(dc = get_dc_ptr( hdc ))) return CLR_INVALID;
 
     if (dc->funcs->pGetNearestColor)
     {
         nearest = dc->funcs->pGetNearestColor( dc->physDev, color );
-        DC_ReleaseDCPtr( dc );
+        release_dc_ptr( dc );
         return nearest;
     }
 
     if (!(GetDeviceCaps(hdc, RASTERCAPS) & RC_PALETTE))
     {
-        DC_ReleaseDCPtr( dc );
+        release_dc_ptr( dc );
         return color;
     }
 
@@ -618,14 +618,14 @@ COLORREF WINAPI GetNearestColor(
             WARN("RGB(%x) : idx %d is out of bounds, assuming NULL\n", color, index );
             if (!GetPaletteEntries( hpal, 0, 1, &entry ))
             {
-                DC_ReleaseDCPtr( dc );
+                release_dc_ptr( dc );
                 return CLR_INVALID;
             }
         }
         color = RGB( entry.peRed, entry.peGreen, entry.peBlue );
     }
     nearest = color & 0x00ffffff;
-    DC_ReleaseDCPtr( dc );
+    release_dc_ptr( dc );
 
     TRACE("(%06x): returning %06x\n", color, nearest );
     return nearest;
@@ -662,11 +662,9 @@ static BOOL PALETTE_UnrealizeObject( HGDIOBJ handle, void *obj )
         palette->funcs = NULL;
     }
 
-    if (hLastRealizedPalette == handle)
-    {
+    if (InterlockedCompareExchangePointer( (void **)&hLastRealizedPalette, 0, handle ) == handle)
         TRACE("unrealizing palette %p\n", handle);
-        hLastRealizedPalette = 0;
-    }
+
     return TRUE;
 }
 
@@ -696,7 +694,7 @@ HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg)
       WARN("invalid selected palette %p\n",hpal);
       return 0;
     }
-    if (!(dc = DC_GetDCPtr( hdc ))) return 0;
+    if (!(dc = get_dc_ptr( hdc ))) return 0;
     ret = dc->hPalette;
     if (dc->funcs->pSelectPalette) hpal = dc->funcs->pSelectPalette( dc->physDev, hpal, FALSE );
     if (hpal)
@@ -705,7 +703,7 @@ HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg)
         if (!wBkg) hPrimaryPalette = hpal;
     }
     else ret = 0;
-    DC_ReleaseDCPtr( dc );
+    release_dc_ptr( dc );
     return ret;
 }
 
@@ -716,7 +714,7 @@ HPALETTE WINAPI GDISelectPalette( HDC hdc, HPALETTE hpal, WORD wBkg)
 UINT WINAPI GDIRealizePalette( HDC hdc )
 {
     UINT realized = 0;
-    DC* dc = DC_GetDCPtr( hdc );
+    DC* dc = get_dc_ptr( hdc );
 
     if (!dc) return 0;
 
@@ -727,7 +725,7 @@ UINT WINAPI GDIRealizePalette( HDC hdc )
         if (dc->funcs->pRealizeDefaultPalette)
             realized = dc->funcs->pRealizeDefaultPalette( dc->physDev );
     }
-    else if(dc->hPalette != hLastRealizedPalette )
+    else if (InterlockedExchangePointer( (void **)&hLastRealizedPalette, dc->hPalette ) != dc->hPalette)
     {
         if (dc->funcs->pRealizePalette)
         {
@@ -740,11 +738,10 @@ UINT WINAPI GDIRealizePalette( HDC hdc )
                 GDI_ReleaseObj( dc->hPalette );
             }
         }
-        hLastRealizedPalette = dc->hPalette;
     }
     else TRACE("  skipping (hLastRealizedPalette = %p)\n", hLastRealizedPalette);
 
-    DC_ReleaseDCPtr( dc );
+    release_dc_ptr( dc );
     TRACE("   realized %i colors.\n", realized );
     return realized;
 }
@@ -760,10 +757,10 @@ UINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc )
 
     TRACE("%04x\n", hdc );
 
-    if (!(dc = DC_GetDCPtr( HDC_32(hdc) ))) return 0;
+    if (!(dc = get_dc_ptr( HDC_32(hdc) ))) return 0;
 
     if (dc->funcs->pRealizeDefaultPalette) ret = dc->funcs->pRealizeDefaultPalette( dc->physDev );
-    DC_ReleaseDCPtr( dc );
+    release_dc_ptr( dc );
     return ret;
 }
 
@@ -772,11 +769,11 @@ UINT16 WINAPI RealizeDefaultPalette16( HDC16 hdc )
  */
 BOOL16 WINAPI IsDCCurrentPalette16(HDC16 hDC)
 {
-    DC *dc = DC_GetDCPtr( HDC_32(hDC) );
+    DC *dc = get_dc_ptr( HDC_32(hDC) );
     if (dc)
     {
       BOOL bRet = dc->hPalette == hPrimaryPalette;
-      DC_ReleaseDCPtr( dc );
+      release_dc_ptr( dc );
       return bRet;
     }
     return FALSE;




More information about the wine-cvs mailing list