DX_STUB;
}
-DWORD CALLBACK HelDdCreatePalette(LPDDHAL_CREATEPALETTEDATA lpCreatePalette)
+DWORD CALLBACK HelDdCreatePalette(LPDDHAL_CREATEPALETTEDATA lpCreatePalette)
{
- DX_STUB;
+ DDRAWI_DDRAWPALETTE_GBL* ddPalGbl = lpCreatePalette->lpDDPalette;
+ LOGPALETTE* logPal ;
+ WORD size=1;
+
+ if(ddPalGbl->dwFlags & DDRAWIPAL_2)
+ size = 2;
+ else if(ddPalGbl->dwFlags & DDRAWIPAL_4)
+ size = 4;
+ else if(ddPalGbl->dwFlags & DDRAWIPAL_16)
+ size = 16;
+ else if(ddPalGbl->dwFlags & DDRAWIPAL_256)
+ size = 256;
+
+ DxHeapMemAlloc(logPal, sizeof(LOGPALETTE) + size*sizeof(PALETTEENTRY));
+ if(logPal == NULL)
+ {
+ lpCreatePalette->ddRVal = DDERR_OUTOFMEMORY;
+ return DDHAL_DRIVER_HANDLED;
+ }
+
+ logPal->palVersion = 0x300;
+ logPal->palNumEntries = size;
+ CopyMemory(&logPal->palPalEntry[0], lpCreatePalette->lpColorTable, size*sizeof(PALETTEENTRY));
+
+ ddPalGbl->hHELGDIPalette = CreatePalette(logPal);
+
+ if (ddPalGbl->hHELGDIPalette == NULL)
+ {
+ DxHeapMemFree(logPal);
+ lpCreatePalette->ddRVal = DDERR_INVALIDOBJECT;
+ return DDHAL_DRIVER_HANDLED;
+ }
+
+ DxHeapMemFree(logPal);
+ ddPalGbl->lpColorTable = lpCreatePalette->lpColorTable;
+ ddPalGbl->dwFlags |= DDRAWIPAL_INHEL | DDRAWIPAL_GDI ;
+ lpCreatePalette->ddRVal = DD_OK;
+ return DDHAL_DRIVER_HANDLED;
}
DWORD CALLBACK HelDdGetScanLine(LPDDHAL_GETSCANLINEDATA lpGetScanLine)