Skip to content

Commit a5a4204

Browse files
committed
hook SelectPalette
1 parent 6c67db5 commit a5a4204

File tree

4 files changed

+23
-0
lines changed

4 files changed

+23
-0
lines changed

inc/hook.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ typedef int (WINAPI* GETDEVICECAPSPROC)(HDC, int);
6565
typedef HFONT(WINAPI* CREATEFONTINDIRECTAPROC)(CONST LOGFONT*);
6666
typedef HFONT(WINAPI* CREATEFONTAPROC)(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR);
6767
typedef UINT(WINAPI* GETSYSTEMPALETTEENTRIESPROC)(HDC, UINT, UINT, LPPALETTEENTRY);
68+
typedef HPALETTE(WINAPI* SELECTPALETTEPROC)(HDC, HPALETTE, BOOL);
6869

6970
typedef HMODULE(WINAPI* LOADLIBRARYAPROC)(LPCSTR);
7071
typedef HMODULE(WINAPI* LOADLIBRARYWPROC)(LPCWSTR);
@@ -119,6 +120,7 @@ extern GETDEVICECAPSPROC real_GetDeviceCaps;
119120
extern CREATEFONTINDIRECTAPROC real_CreateFontIndirectA;
120121
extern CREATEFONTAPROC real_CreateFontA;
121122
extern GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries;
123+
extern SELECTPALETTEPROC real_SelectPalette;
122124
extern LOADLIBRARYAPROC real_LoadLibraryA;
123125
extern LOADLIBRARYWPROC real_LoadLibraryW;
124126
extern LOADLIBRARYEXAPROC real_LoadLibraryExA;

inc/winapi_hooks.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ int WINAPI fake_StretchDIBits(
5959
HFONT WINAPI fake_CreateFontIndirectA(CONST LOGFONTA*);
6060
HFONT WINAPI fake_CreateFontA(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR);
6161
UINT WINAPI fake_GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);
62+
HPALETTE WINAPI fake_SelectPalette(HDC, HPALETTE, BOOL);
6263

6364
HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName);
6465
HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName);

src/hook.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ GETDEVICECAPSPROC real_GetDeviceCaps = GetDeviceCaps;
5858
CREATEFONTINDIRECTAPROC real_CreateFontIndirectA = CreateFontIndirectA;
5959
CREATEFONTAPROC real_CreateFontA = CreateFontA;
6060
GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries = GetSystemPaletteEntries;
61+
SELECTPALETTEPROC real_SelectPalette = SelectPalette;
6162
LOADLIBRARYAPROC real_LoadLibraryA = LoadLibraryA;
6263
LOADLIBRARYWPROC real_LoadLibraryW = LoadLibraryW;
6364
LOADLIBRARYEXAPROC real_LoadLibraryExA = LoadLibraryExA;
@@ -151,6 +152,7 @@ HOOKLIST g_hook_hooklist[] =
151152
{ "GetDeviceCaps", (PROC)fake_GetDeviceCaps, (PROC*)&real_GetDeviceCaps, HOOK_LOCAL_ONLY },
152153
{ "CreateFontA", (PROC)fake_CreateFontA, (PROC*)&real_CreateFontA, 0 },
153154
{ "GetSystemPaletteEntries", (PROC)fake_GetSystemPaletteEntries, (PROC*)&real_GetSystemPaletteEntries, 0 },
155+
{ "SelectPalette", (PROC)fake_SelectPalette, (PROC*)&real_SelectPalette, 0 },
154156
{ "CreateFontIndirectA", (PROC)fake_CreateFontIndirectA, (PROC*)&real_CreateFontIndirectA, 0 },
155157
{ "", NULL, NULL, 0 }
156158
}

src/winapi_hooks.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1385,6 +1385,24 @@ UINT WINAPI fake_GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LP
13851385
return real_GetSystemPaletteEntries(hdc, iStart, cEntries, pPalEntries);
13861386
}
13871387

1388+
HPALETTE WINAPI fake_SelectPalette(HDC hdc, HPALETTE hPal, BOOL bForceBkgd)
1389+
{
1390+
if (g_ddraw.ref && g_ddraw.bpp == 8 && WindowFromDC(hdc) == g_ddraw.hwnd)
1391+
{
1392+
if (g_ddraw.primary && g_ddraw.primary->palette)
1393+
{
1394+
TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress());
1395+
1396+
PALETTEENTRY pal[256];
1397+
GetPaletteEntries(hPal, 0, 256, pal);
1398+
1399+
ddp_SetEntries(g_ddraw.primary->palette, 0, 0, 256, pal);
1400+
}
1401+
}
1402+
1403+
return real_SelectPalette(hdc, hPal, bForceBkgd);
1404+
}
1405+
13881406
HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName)
13891407
{
13901408
HMODULE hmod_old = GetModuleHandleA(lpLibFileName);

0 commit comments

Comments
 (0)