1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-25 01:57:47 +01:00

hook RealizePalette

This commit is contained in:
FunkyFr3sh 2024-12-15 20:17:26 +01:00
parent 8be9875553
commit 75ed1582d2
5 changed files with 36 additions and 8 deletions

View File

@ -28,6 +28,8 @@ typedef struct IDirectDrawSurfaceImpl
CRITICAL_SECTION cs; CRITICAL_SECTION cs;
IDirectDrawPaletteImpl* palette; IDirectDrawPaletteImpl* palette;
PALETTEENTRY selected_pal[256];
UINT selected_pal_count;
void* surface; void* surface;
HANDLE mapping; HANDLE mapping;

View File

@ -66,6 +66,7 @@ typedef HFONT(WINAPI* CREATEFONTINDIRECTAPROC)(CONST LOGFONT*);
typedef HFONT(WINAPI* CREATEFONTAPROC)(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR); typedef HFONT(WINAPI* CREATEFONTAPROC)(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR);
typedef UINT(WINAPI* GETSYSTEMPALETTEENTRIESPROC)(HDC, UINT, UINT, LPPALETTEENTRY); typedef UINT(WINAPI* GETSYSTEMPALETTEENTRIESPROC)(HDC, UINT, UINT, LPPALETTEENTRY);
typedef HPALETTE(WINAPI* SELECTPALETTEPROC)(HDC, HPALETTE, BOOL); typedef HPALETTE(WINAPI* SELECTPALETTEPROC)(HDC, HPALETTE, BOOL);
typedef UINT (WINAPI* REALIZEPALETTEPROC)(HDC);
typedef HMODULE(WINAPI* LOADLIBRARYAPROC)(LPCSTR); typedef HMODULE(WINAPI* LOADLIBRARYAPROC)(LPCSTR);
typedef HMODULE(WINAPI* LOADLIBRARYWPROC)(LPCWSTR); typedef HMODULE(WINAPI* LOADLIBRARYWPROC)(LPCWSTR);
@ -121,6 +122,7 @@ extern CREATEFONTINDIRECTAPROC real_CreateFontIndirectA;
extern CREATEFONTAPROC real_CreateFontA; extern CREATEFONTAPROC real_CreateFontA;
extern GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries; extern GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries;
extern SELECTPALETTEPROC real_SelectPalette; extern SELECTPALETTEPROC real_SelectPalette;
extern REALIZEPALETTEPROC real_RealizePalette;
extern LOADLIBRARYAPROC real_LoadLibraryA; extern LOADLIBRARYAPROC real_LoadLibraryA;
extern LOADLIBRARYWPROC real_LoadLibraryW; extern LOADLIBRARYWPROC real_LoadLibraryW;
extern LOADLIBRARYEXAPROC real_LoadLibraryExA; extern LOADLIBRARYEXAPROC real_LoadLibraryExA;

View File

@ -60,6 +60,7 @@ HFONT WINAPI fake_CreateFontIndirectA(CONST LOGFONTA*);
HFONT WINAPI fake_CreateFontA(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR); HFONT WINAPI fake_CreateFontA(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR);
UINT WINAPI fake_GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY); UINT WINAPI fake_GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
HPALETTE WINAPI fake_SelectPalette(HDC, HPALETTE, BOOL); HPALETTE WINAPI fake_SelectPalette(HDC, HPALETTE, BOOL);
UINT WINAPI fake_RealizePalette(HDC);
HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName); HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName);
HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName); HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName);

View File

@ -59,6 +59,7 @@ CREATEFONTINDIRECTAPROC real_CreateFontIndirectA = CreateFontIndirectA;
CREATEFONTAPROC real_CreateFontA = CreateFontA; CREATEFONTAPROC real_CreateFontA = CreateFontA;
GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries = GetSystemPaletteEntries; GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries = GetSystemPaletteEntries;
SELECTPALETTEPROC real_SelectPalette = SelectPalette; SELECTPALETTEPROC real_SelectPalette = SelectPalette;
REALIZEPALETTEPROC real_RealizePalette = RealizePalette;
LOADLIBRARYAPROC real_LoadLibraryA = LoadLibraryA; LOADLIBRARYAPROC real_LoadLibraryA = LoadLibraryA;
LOADLIBRARYWPROC real_LoadLibraryW = LoadLibraryW; LOADLIBRARYWPROC real_LoadLibraryW = LoadLibraryW;
LOADLIBRARYEXAPROC real_LoadLibraryExA = LoadLibraryExA; LOADLIBRARYEXAPROC real_LoadLibraryExA = LoadLibraryExA;
@ -153,6 +154,7 @@ HOOKLIST g_hook_hooklist[] =
{ "CreateFontA", (PROC)fake_CreateFontA, (PROC*)&real_CreateFontA, 0 }, { "CreateFontA", (PROC)fake_CreateFontA, (PROC*)&real_CreateFontA, 0 },
{ "GetSystemPaletteEntries", (PROC)fake_GetSystemPaletteEntries, (PROC*)&real_GetSystemPaletteEntries, 0 }, { "GetSystemPaletteEntries", (PROC)fake_GetSystemPaletteEntries, (PROC*)&real_GetSystemPaletteEntries, 0 },
{ "SelectPalette", (PROC)fake_SelectPalette, (PROC*)&real_SelectPalette, 0 }, { "SelectPalette", (PROC)fake_SelectPalette, (PROC*)&real_SelectPalette, 0 },
{ "RealizePalette", (PROC)fake_RealizePalette, (PROC*)&real_RealizePalette, 0 },
{ "CreateFontIndirectA", (PROC)fake_CreateFontIndirectA, (PROC*)&real_CreateFontIndirectA, 0 }, { "CreateFontIndirectA", (PROC)fake_CreateFontIndirectA, (PROC*)&real_CreateFontIndirectA, 0 },
{ "", NULL, NULL, 0 } { "", NULL, NULL, 0 }
} }

View File

@ -905,11 +905,11 @@ int WINAPI fake_GetDeviceCaps(HDC hdc, int index)
return 20; return 20;
} }
else else
{ {
return 256; return 256;
}
} }
} }
}
return real_GetDeviceCaps(hdc, index); return real_GetDeviceCaps(hdc, index);
} }
@ -1410,18 +1410,39 @@ HPALETTE WINAPI fake_SelectPalette(HDC hdc, HPALETTE hPal, BOOL bForceBkgd)
{ {
TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress()); TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress());
PALETTEENTRY pal[256]; g_ddraw.primary->selected_pal_count = GetPaletteEntries(hPal, 0, 256, g_ddraw.primary->selected_pal);
UINT count = GetPaletteEntries(hPal, 0, 256, pal);
ddp_SetEntries(g_ddraw.primary->palette, 0, 0, count, pal);
return real_SelectPalette(g_ddraw.primary->hdc, hPal, bForceBkgd); return real_SelectPalette(g_ddraw.primary->hdc, hPal, bForceBkgd);;
} }
} }
return real_SelectPalette(hdc, hPal, bForceBkgd); return real_SelectPalette(hdc, hPal, bForceBkgd);
} }
UINT WINAPI fake_RealizePalette(HDC hdc)
{
if (g_ddraw.ref &&
g_ddraw.bpp == 8 &&
((g_ddraw.hwnd && WindowFromDC(hdc) == g_ddraw.hwnd) || WindowFromDC(hdc) == GetDesktopWindow()))
{
if (g_ddraw.primary && g_ddraw.primary->palette)
{
TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress());
ddp_SetEntries(
g_ddraw.primary->palette,
0,
0,
g_ddraw.primary->selected_pal_count,
g_ddraw.primary->selected_pal);
return g_ddraw.primary->selected_pal_count;
}
}
return real_RealizePalette(hdc);
}
HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName) HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName)
{ {
HMODULE hmod_old = GetModuleHandleA(lpLibFileName); HMODULE hmod_old = GetModuleHandleA(lpLibFileName);