diff --git a/reactos/include/reactos/win32k/ntgdihdl.h b/reactos/include/reactos/win32k/ntgdihdl.h index 61f69a36cca..b7594c528b9 100644 --- a/reactos/include/reactos/win32k/ntgdihdl.h +++ b/reactos/include/reactos/win32k/ntgdihdl.h @@ -344,8 +344,6 @@ typedef struct _WIN_DC_INFO HBITMAP hFirstBitmap; /* Bitmap selected at creation of the DC */ /* #if 0 */ - HPALETTE hPalette; - GdiPath path; /* #endif */ diff --git a/reactos/subsystems/win32/win32k/ntuser/windc.c b/reactos/subsystems/win32/win32k/ntuser/windc.c index 6099bd6367f..222f234a41f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/windc.c +++ b/reactos/subsystems/win32/win32k/ntuser/windc.c @@ -1078,46 +1078,42 @@ HPALETTE STDCALL NtUserSelectPalette(HDC hDC, HPALETTE hpal, BOOL ForceBackground) { - PDC dc; - HPALETTE oldPal = NULL; - PPALGDI PalGDI; + PDC dc; + HPALETTE oldPal = NULL; + PPALGDI PalGDI; - // FIXME: mark the palette as a [fore\back]ground pal - dc = DC_LockDc(hDC); - if (NULL != dc) + // FIXME: mark the palette as a [fore\back]ground pal + dc = DC_LockDc(hDC); + if (!dc) { - /* Check if this is a valid palette handle */ - PalGDI = PALETTE_LockPalette(hpal); - if (NULL != PalGDI) - { - /* Is this a valid palette for this depth? */ - if ((dc->w.bitsPerPixel <= 8 && PAL_INDEXED == PalGDI->Mode) - || (8 < dc->w.bitsPerPixel && PAL_INDEXED != PalGDI->Mode)) - { - PALETTE_UnlockPalette(PalGDI); - oldPal = dc->w.hPalette; - dc->w.hPalette = hpal; - } - else if (8 < dc->w.bitsPerPixel && PAL_INDEXED == PalGDI->Mode) - { - PALETTE_UnlockPalette(PalGDI); - oldPal = dc->PalIndexed; - dc->PalIndexed = hpal; - } - else - { - PALETTE_UnlockPalette(PalGDI); - oldPal = NULL; - } - } - else - { - oldPal = NULL; - } - DC_UnlockDc(dc); + return NULL; } - return oldPal; + /* Check if this is a valid palette handle */ + PalGDI = PALETTE_LockPalette(hpal); + if (!PalGDI) + { + DC_UnlockDc(dc); + return NULL; + } + + /* Is this a valid palette for this depth? */ + if ((dc->w.bitsPerPixel <= 8 && PalGDI->Mode == PAL_INDEXED) || + (dc->w.bitsPerPixel > 8 && PalGDI->Mode != PAL_INDEXED)) + { + oldPal = dc->DcLevel.hpal; + dc->DcLevel.hpal = hpal; + } + else if (8 < dc->w.bitsPerPixel && PAL_INDEXED == PalGDI->Mode) + { + oldPal = dc->DcLevel.hpal; + dc->DcLevel.hpal = hpal; + } + + PALETTE_UnlockPalette(PalGDI); + DC_UnlockDc(dc); + + return oldPal; } diff --git a/reactos/subsystems/win32/win32k/objects/bitblt.c b/reactos/subsystems/win32/win32k/objects/bitblt.c index bfc5962d662..c0b2471d2ef 100644 --- a/reactos/subsystems/win32/win32k/objects/bitblt.c +++ b/reactos/subsystems/win32/win32k/objects/bitblt.c @@ -115,10 +115,10 @@ NtGdiAlphaBlend( BitmapSrc = BITMAPOBJ_LockBitmap(DCSrc->w.hBitmap); /* Create the XLATEOBJ. */ - if (DCDest->w.hPalette != 0) - DestPalette = DCDest->w.hPalette; - if (DCSrc->w.hPalette != 0) - SourcePalette = DCSrc->w.hPalette; + if (DCDest->DcLevel.hpal != 0) + DestPalette = DCDest->DcLevel.hpal; + if (DCSrc->DcLevel.hpal != 0) + SourcePalette = DCSrc->DcLevel.hpal; /* KB41464 details how to convert between mono and color */ if (DCDest->w.bitsPerPixel == 1 && DCSrc->w.bitsPerPixel == 1) @@ -311,11 +311,11 @@ NtGdiBitBlt( /* Create the XLATEOBJ. */ if (UsesSource) { - if (DCDest->w.hPalette != 0) - DestPalette = DCDest->w.hPalette; + if (DCDest->DcLevel.hpal != 0) + DestPalette = DCDest->DcLevel.hpal; - if (DCSrc->w.hPalette != 0) - SourcePalette = DCSrc->w.hPalette; + if (DCSrc->DcLevel.hpal != 0) + SourcePalette = DCSrc->DcLevel.hpal; /* KB41464 details how to convert between mono and color */ if (DCDest->w.bitsPerPixel == 1 && DCSrc->w.bitsPerPixel == 1) @@ -459,11 +459,11 @@ NtGdiTransparentBlt( xSrc += DCSrc->w.DCOrgX; ySrc += DCSrc->w.DCOrgY; - if(DCDest->w.hPalette) - DestPalette = DCDest->w.hPalette; + if(DCDest->DcLevel.hpal) + DestPalette = DCDest->DcLevel.hpal; - if(DCSrc->w.hPalette) - SourcePalette = DCSrc->w.hPalette; + if(DCSrc->DcLevel.hpal) + SourcePalette = DCSrc->DcLevel.hpal; if(!(PalSourceGDI = PALETTE_LockPalette(SourcePalette))) { @@ -962,11 +962,11 @@ NtGdiStretchBlt( /* Create the XLATEOBJ. */ if (UsesSource) { - if (DCDest->w.hPalette != 0) - DestPalette = DCDest->w.hPalette; + if (DCDest->DcLevel.hpal != 0) + DestPalette = DCDest->DcLevel.hpal; - if (DCSrc->w.hPalette != 0) - SourcePalette = DCSrc->w.hPalette; + if (DCSrc->DcLevel.hpal != 0) + SourcePalette = DCSrc->DcLevel.hpal; /* FIXME: Use the same logic for create XLATEOBJ as in NtGdiBitBlt. */ XlateObj = (XLATEOBJ*)IntEngCreateXlate(0, 0, DestPalette, SourcePalette); diff --git a/reactos/subsystems/win32/win32k/objects/bitmaps.c b/reactos/subsystems/win32/win32k/objects/bitmaps.c index e043e6f3c37..851e6895755 100644 --- a/reactos/subsystems/win32/win32k/objects/bitmaps.c +++ b/reactos/subsystems/win32/win32k/objects/bitmaps.c @@ -271,8 +271,8 @@ NtGdiGetPixel(HDC hDC, INT XPos, INT YPos) SurfaceObject = &BitmapObject->SurfObj; if ( BitmapObject ) { - if ( dc->w.hPalette != 0 ) - Pal = dc->w.hPalette; + if ( dc->DcLevel.hpal != 0 ) + Pal = dc->DcLevel.hpal; /* FIXME: Verify if it shouldn't be PAL_BGR! */ XlateObj = (XLATEOBJ*)IntEngCreateXlate ( PAL_RGB, 0, NULL, Pal ); if ( XlateObj ) diff --git a/reactos/subsystems/win32/win32k/objects/brush.c b/reactos/subsystems/win32/win32k/objects/brush.c index a99c8893e79..365da8652f2 100644 --- a/reactos/subsystems/win32/win32k/objects/brush.c +++ b/reactos/subsystems/win32/win32k/objects/brush.c @@ -127,7 +127,7 @@ IntGdiCreateBrushXlate(PDC Dc, GDIBRUSHOBJ *BrushObj, BOOLEAN *Failed) } else if (BrushObj->flAttrs & GDIBRUSH_IS_SOLID) { - Result = IntEngCreateXlate(0, PAL_RGB, Dc->w.hPalette, NULL); + Result = IntEngCreateXlate(0, PAL_RGB, Dc->DcLevel.hpal, NULL); *Failed = FALSE; } else @@ -143,11 +143,11 @@ IntGdiCreateBrushXlate(PDC Dc, GDIBRUSHOBJ *BrushObj, BOOLEAN *Failed) if (!Dc_Attr) Dc_Attr = &Dc->Dc_Attr; if (Dc->w.bitsPerPixel != 1) - Result = IntEngCreateSrcMonoXlate(Dc->w.hPalette, Dc_Attr->crForegroundClr, Dc_Attr->crBackgroundClr); + Result = IntEngCreateSrcMonoXlate(Dc->DcLevel.hpal, Dc_Attr->crForegroundClr, Dc_Attr->crBackgroundClr); } else if (BrushObj->flAttrs & GDIBRUSH_IS_DIB) { - Result = IntEngCreateXlate(0, 0, Dc->w.hPalette, Pattern->hDIBPalette); + Result = IntEngCreateXlate(0, 0, Dc->DcLevel.hpal, Pattern->hDIBPalette); } BITMAPOBJ_UnlockBitmap(Pattern); diff --git a/reactos/subsystems/win32/win32k/objects/color.c b/reactos/subsystems/win32/win32k/objects/color.c index 7809eff56a6..20513ebabb0 100644 --- a/reactos/subsystems/win32/win32k/objects/color.c +++ b/reactos/subsystems/win32/win32k/objects/color.c @@ -122,7 +122,7 @@ IntAnimatePalette(HPALETTE hPal, dc = DC_LockDc(hDC); if (NULL != dc) { - if (dc->w.hPalette == hPal) + if (dc->DcLevel.hpal == hPal) { DC_UnlockDc(dc); IntGdiRealizePalette(hDC); @@ -301,7 +301,7 @@ COLORREF STDCALL NtGdiGetNearestColor(HDC hDC, COLORREF Color) dc = DC_LockDc(hDC); if (NULL != dc) { - HPALETTE hpal = dc->w.hPalette; + HPALETTE hpal = dc->DcLevel.hpal; palGDI = (PPALGDI) PALETTE_LockPalette(hpal); if (!palGDI) { @@ -431,7 +431,7 @@ IntGetSystemPaletteEntries(HDC hDC, return 0; } - palGDI = PALETTE_LockPalette(dc->w.hPalette); + palGDI = PALETTE_LockPalette(dc->DcLevel.hpal); if (palGDI != NULL) { if (pe != NULL) @@ -505,7 +505,7 @@ UINT FASTCALL IntGdiRealizePalette(HDC hDC) return 0; systemPalette = NtGdiGetStockObject((INT)DEFAULT_PALETTE); - palGDI = PALETTE_LockPalette(dc->w.hPalette); + palGDI = PALETTE_LockPalette(dc->DcLevel.hpal); palPtr = (PALOBJ*) palGDI; if (palGDI == NULL) @@ -536,8 +536,8 @@ UINT FASTCALL IntGdiRealizePalette(HDC hDC) // Step 1: Create mapping of system palette\DC palette #ifndef NO_MAPPING realized = PALETTE_SetMapping(palPtr, 0, palGDI->NumColors, - (dc->w.hPalette != hPrimaryPalette) || - (dc->w.hPalette == NtGdiGetStockObject(DEFAULT_PALETTE))); + (dc->DcLevel.hpal != hPrimaryPalette) || + (dc->DcLevel.hpal == NtGdiGetStockObject(DEFAULT_PALETTE))); #else realized = 0; #endif @@ -574,7 +574,7 @@ UINT FASTCALL IntGdiRealizePalette(HDC hDC) if(dc->DC_Type != DC_TYPE_MEMORY) { // Device managed DC - palGDI->logicalToSystem = IntEngCreateXlate(sysMode, palMode, systemPalette, dc->w.hPalette); + palGDI->logicalToSystem = IntEngCreateXlate(sysMode, palMode, systemPalette, dc->DcLevel.hpal); } DC_UnlockDc(dc); diff --git a/reactos/subsystems/win32/win32k/objects/dc.c b/reactos/subsystems/win32/win32k/objects/dc.c index 343a5f7fb2f..4c0fb16e605 100644 --- a/reactos/subsystems/win32/win32k/objects/dc.c +++ b/reactos/subsystems/win32/win32k/objects/dc.c @@ -135,8 +135,7 @@ NtGdiCreateCompatibleDC(HDC hDC) NewDC->w.hFirstBitmap = hBitmap; NewDC->pPDev = OrigDC->pPDev; - NewDC->PalIndexed = OrigDC->PalIndexed; - NewDC->w.hPalette = OrigDC->w.hPalette; + NewDC->DcLevel.hpal = OrigDC->DcLevel.hpal; nDc_Attr->lTextAlign = oDc_Attr->lTextAlign; nDc_Attr->ulForegroundClr = oDc_Attr->ulForegroundClr; nDc_Attr->ulBackgroundClr = oDc_Attr->ulBackgroundClr; @@ -829,8 +828,7 @@ IntGdiCreateDC(PUNICODE_STRING Driver, if (!CreateAsIC) { - NewDC->PalIndexed = NtGdiGetStockObject(DEFAULT_PALETTE); - NewDC->w.hPalette = PrimarySurface.DevInfo.hpalDefault; + NewDC->DcLevel.hpal = PrimarySurface.DevInfo.hpalDefault; nDc_Attr->jROP2 = R2_COPYPEN; NewDC->erclWindow.top = NewDC->erclWindow.left = 0; @@ -1130,7 +1128,7 @@ NtGdiGetDCObject(HDC hDC, INT ObjectType) SelObject = Dc_Attr->hbrush; break; case GDI_OBJECT_TYPE_PALETTE: - SelObject = dc->w.hPalette; + SelObject = dc->DcLevel.hpal; break; case GDI_OBJECT_TYPE_FONT: SelObject = Dc_Attr->hlfntNew; @@ -1140,6 +1138,7 @@ NtGdiGetDCObject(HDC hDC, INT ObjectType) break; case GDI_OBJECT_TYPE_COLORSPACE: DPRINT1("FIXME: NtGdiGetCurrentObject() ObjectType OBJ_COLORSPACE not supported yet!\n"); + // SelObject = dc->DcLevel.pColorSpace.BaseObject.hHmgr; ? SelObject = NULL; break; default: @@ -1196,18 +1195,18 @@ IntGdiGetDCOrg(PDC pDc, PPOINTL ppt) *ppt = pDc->ptlDCOrig; return TRUE; } - + BOOL STDCALL GdiGetDCOrgEx(HDC hDC, PPOINTL ppt, PRECTL prc) { PDC pdc; - + pdc = DC_LockDc(hDC); if (!pdc) return FALSE; - + *prc = pdc->erclWindow; *ppt = pdc->ptlDCOrig; - + DC_UnlockDc(pdc); return TRUE; } @@ -1217,7 +1216,7 @@ IntGetAspectRatioFilter(PDC pDC, LPSIZE AspectRatio) { PDC_ATTR pDc_Attr; - + pDc_Attr = pDC->pDc_Attr; if ( !pDc_Attr ) pDc_Attr = &pDC->Dc_Attr; @@ -1337,8 +1336,7 @@ IntGdiCopyToSaveState(PDC dc, PDC newdc) nDc_Attr->hlfntNew = Dc_Attr->hlfntNew; newdc->w.hBitmap = dc->w.hBitmap; newdc->w.hFirstBitmap = dc->w.hFirstBitmap; - newdc->PalIndexed = dc->PalIndexed; - newdc->w.hPalette = dc->w.hPalette; + newdc->DcLevel.hpal = dc->DcLevel.hpal; newdc->w.totalExtent = dc->w.totalExtent; newdc->w.bitsPerPixel = dc->w.bitsPerPixel; nDc_Attr->jROP2 = Dc_Attr->jROP2; @@ -1444,7 +1442,6 @@ IntGdiCopyFromSaveState(PDC dc, PDC dcs, HDC hDC) Dc_Attr->szlWindowExt = sDc_Attr->szlWindowExt; Dc_Attr->ptlViewportOrg = sDc_Attr->ptlViewportOrg; Dc_Attr->szlViewportExt = sDc_Attr->szlViewportExt; - dc->PalIndexed = dcs->PalIndexed; if (dc->DC_Type != DC_TYPE_MEMORY) { @@ -1488,10 +1485,10 @@ IntGdiCopyFromSaveState(PDC dc, PDC dcs, HDC hDC) IntGdiSetBkColor( hDC, sDc_Attr->crBackgroundClr); IntGdiSetTextColor( hDC, sDc_Attr->crForegroundClr); - NtUserSelectPalette( hDC, dcs->w.hPalette, FALSE ); + NtUserSelectPalette( hDC, dcs->DcLevel.hpal, FALSE ); #if 0 - GDISelectPalette16( hDC, dcs->w.hPalette, FALSE ); + GDISelectPalette16( hDC, dcs->DcLevel.hpal, FALSE ); #endif } @@ -1960,12 +1957,12 @@ NtGdiSelectBitmap( if(pBmp->dib) { pDC->w.bitsPerPixel = pBmp->dib->dsBmih.biBitCount; - pDC->w.hPalette = pBmp->hDIBPalette; + pDC->DcLevel.hpal = pBmp->hDIBPalette; } else { pDC->w.bitsPerPixel = BitsPerFormat(pBmp->SurfObj.iBitmapFormat); - pDC->w.hPalette = ((GDIDEVICE *)pDC->pPDev)->DevInfo.hpalDefault; + pDC->DcLevel.hpal = ((GDIDEVICE *)pDC->pPDev)->DevInfo.hpalDefault; } /* Regenerate the XLATEOBJs. */ @@ -2333,7 +2330,7 @@ NtGdiGetAndSetDCDword( break; } SafeResult = Dc_Attr->flFontMapper; - Dc_Attr->flFontMapper = dwIn; + Dc_Attr->flFontMapper = dwIn; break; case GdiGetSetMapMode: SafeResult = IntGdiSetMapMode( dc, dwIn); @@ -2479,7 +2476,7 @@ DC_AllocDC(PUNICODE_STRING Driver) Dc_Attr->hlfntNew = NtGdiGetStockObject(SYSTEM_FONT); TextIntRealizeFont(Dc_Attr->hlfntNew); - NewDC->w.hPalette = NtGdiGetStockObject(DEFAULT_PALETTE); + NewDC->DcLevel.hpal = NtGdiGetStockObject(DEFAULT_PALETTE); DC_UnlockDc(NewDC); @@ -2757,7 +2754,7 @@ IntGdiReferencePdev(PGDIDEVICE pPDev) } VOID FASTCALL -IntGdiUnreferencePdev(PGDIDEVICE pPDev, DWORD CleanUpType) +IntGdiUnreferencePdev(PGDIDEVICE pPDev, DWORD CleanUpType) { IntGdiAcquireSemaphore(hsemDriverMgmt); pPDev->cPdevRefs--; diff --git a/reactos/subsystems/win32/win32k/objects/dibobj.c b/reactos/subsystems/win32/win32k/objects/dibobj.c index cc7946c1010..3428f342bbf 100644 --- a/reactos/subsystems/win32/win32k/objects/dibobj.c +++ b/reactos/subsystems/win32/win32k/objects/dibobj.c @@ -1,4 +1,5 @@ /* + * $Id$ * * ReactOS W32 Subsystem * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team @@ -382,7 +383,7 @@ NtGdiSetDIBitsToDeviceInternal( SourceSize.cx = bmi->bmiHeader.biWidth; SourceSize.cy = ScanLines; DIBWidth = DIB_GetDIBWidthBytes(SourceSize.cx, bmi->bmiHeader.biBitCount); - + ProbeForRead(Bits, DIBWidth * abs(bmi->bmiHeader.biHeight), 1); hSourceBitmap = EngCreateBitmap(SourceSize, DIBWidth, @@ -403,7 +404,7 @@ NtGdiSetDIBitsToDeviceInternal( _SEH_LEAVE; } - + /* Obtain destination palette from the DC */ pDCPalette = PALETTE_LockPalette(((GDIDEVICE *)pDC->pPDev)->DevInfo.hpalDefault); if (!pDCPalette) @@ -415,7 +416,7 @@ NtGdiSetDIBitsToDeviceInternal( DDBPaletteType = pDCPalette->Mode; DDBPalette = ((GDIDEVICE *)pDC->pPDev)->DevInfo.hpalDefault; PALETTE_UnlockPalette(pDCPalette); - + DIBPalette = BuildDIBPalette(bmi, (PINT)&DIBPaletteType); if (!DIBPalette) { @@ -504,7 +505,7 @@ NtGdiGetDIBitsInternal(HDC hDC, return 0; } /* Source palette obtained from the windows hdc */ - hSourcePalette = Dc->w.hPalette; + hSourcePalette = Dc->DcLevel.hpal; DC_UnlockDc(Dc); /* don't do anything if we fail this */ @@ -909,7 +910,7 @@ IntCreateDIBitmap(PDC Dc, 1, NULL); } - + if (height < 0) height = -height; @@ -1258,7 +1259,7 @@ DIB_MapPaletteColors(PDC dc, CONST BITMAPINFO* lpbmi) USHORT *lpIndex; PPALGDI palGDI; - palGDI = PALETTE_LockPalette(dc->w.hPalette); + palGDI = PALETTE_LockPalette(dc->DcLevel.hpal); if (NULL == palGDI) { @@ -1269,11 +1270,7 @@ DIB_MapPaletteColors(PDC dc, CONST BITMAPINFO* lpbmi) if (palGDI->Mode != PAL_INDEXED) { PALETTE_UnlockPalette(palGDI); - palGDI = PALETTE_LockPalette(dc->PalIndexed); - if (palGDI->Mode != PAL_INDEXED) - { - return NULL; - } + return NULL; } nNumColors = 1 << lpbmi->bmiHeader.biBitCount; diff --git a/reactos/subsystems/win32/win32k/objects/fillshap.c b/reactos/subsystems/win32/win32k/objects/fillshap.c index 71467dc4a5c..fb842aac879 100644 --- a/reactos/subsystems/win32/win32k/objects/fillshap.c +++ b/reactos/subsystems/win32/win32k/objects/fillshap.c @@ -64,7 +64,7 @@ IntGdiPolygon(PDC dc, Dc_Attr = dc->pDc_Attr; if (!Dc_Attr) Dc_Attr = &dc->Dc_Attr; - + BitmapObj = BITMAPOBJ_LockBitmap(dc->w.hBitmap); /* FIXME - BitmapObj can be NULL!!!! don't assert but handle this case gracefully! */ ASSERT(BitmapObj); @@ -1033,7 +1033,7 @@ IntRectangle(PDC dc, RECTL DestRect; MIX Mix; PDC_ATTR Dc_Attr; - + ASSERT ( dc ); // caller's responsibility to set this up /* FIXME - BitmapObj can be NULL!!! Don't assert but handle this case gracefully! */ ASSERT ( BitmapObj ); @@ -1550,13 +1550,13 @@ IntGdiGradientFill( /* FIXME - BitmapObj can be NULL!!! Don't assert but handle this case gracefully! */ ASSERT(BitmapObj); - PalDestGDI = PALETTE_LockPalette(dc->w.hPalette); + PalDestGDI = PALETTE_LockPalette(dc->DcLevel.hpal); /* FIXME - PalDestGDI can be NULL!!! Don't assert but handle this case gracefully! */ ASSERT(PalDestGDI); Mode = PalDestGDI->Mode; PALETTE_UnlockPalette(PalDestGDI); - XlateObj = (XLATEOBJ*)IntEngCreateXlate(Mode, PAL_RGB, dc->w.hPalette, NULL); + XlateObj = (XLATEOBJ*)IntEngCreateXlate(Mode, PAL_RGB, dc->DcLevel.hpal, NULL); ASSERT(XlateObj); Ret = IntEngGradientFill(&BitmapObj->SurfObj, diff --git a/reactos/subsystems/win32/win32k/objects/text.c b/reactos/subsystems/win32/win32k/objects/text.c index 84e17bd5c9d..4c1fbfdbfd6 100644 --- a/reactos/subsystems/win32/win32k/objects/text.c +++ b/reactos/subsystems/win32/win32k/objects/text.c @@ -1629,7 +1629,7 @@ NtGdiExtTextOutW( YStart = Start.y + dc->w.DCOrgY; /* Create the brushes */ - PalDestGDI = PALETTE_LockPalette(dc->w.hPalette); + PalDestGDI = PALETTE_LockPalette(dc->DcLevel.hpal); if ( !PalDestGDI ) Mode = PAL_RGB; else @@ -1637,7 +1637,7 @@ NtGdiExtTextOutW( Mode = PalDestGDI->Mode; PALETTE_UnlockPalette(PalDestGDI); } - XlateObj = (XLATEOBJ*)IntEngCreateXlate(Mode, PAL_RGB, dc->w.hPalette, NULL); + XlateObj = (XLATEOBJ*)IntEngCreateXlate(Mode, PAL_RGB, dc->DcLevel.hpal, NULL); if ( !XlateObj ) { goto fail; @@ -1667,7 +1667,7 @@ NtGdiExtTextOutW( } IntGdiInitBrushInstance(&BrushBgInst, BrushBg, NULL); } - XlateObj2 = (XLATEOBJ*)IntEngCreateXlate(PAL_RGB, Mode, NULL, dc->w.hPalette); + XlateObj2 = (XLATEOBJ*)IntEngCreateXlate(PAL_RGB, Mode, NULL, dc->DcLevel.hpal); if ( !XlateObj2 ) { goto fail;