Skip to content

Commit 75ed158

Browse files
committed
hook RealizePalette
1 parent 8be9875 commit 75ed158

File tree

5 files changed

+36
-8
lines changed

5 files changed

+36
-8
lines changed

inc/IDirectDrawSurface.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ typedef struct IDirectDrawSurfaceImpl
2828
CRITICAL_SECTION cs;
2929

3030
IDirectDrawPaletteImpl* palette;
31+
PALETTEENTRY selected_pal[256];
32+
UINT selected_pal_count;
3133

3234
void* surface;
3335
HANDLE mapping;

inc/hook.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ 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);
6868
typedef HPALETTE(WINAPI* SELECTPALETTEPROC)(HDC, HPALETTE, BOOL);
69+
typedef UINT (WINAPI* REALIZEPALETTEPROC)(HDC);
6970

7071
typedef HMODULE(WINAPI* LOADLIBRARYAPROC)(LPCSTR);
7172
typedef HMODULE(WINAPI* LOADLIBRARYWPROC)(LPCWSTR);
@@ -121,6 +122,7 @@ extern CREATEFONTINDIRECTAPROC real_CreateFontIndirectA;
121122
extern CREATEFONTAPROC real_CreateFontA;
122123
extern GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries;
123124
extern SELECTPALETTEPROC real_SelectPalette;
125+
extern REALIZEPALETTEPROC real_RealizePalette;
124126
extern LOADLIBRARYAPROC real_LoadLibraryA;
125127
extern LOADLIBRARYWPROC real_LoadLibraryW;
126128
extern LOADLIBRARYEXAPROC real_LoadLibraryExA;

inc/winapi_hooks.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ 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);
6262
HPALETTE WINAPI fake_SelectPalette(HDC, HPALETTE, BOOL);
63+
UINT WINAPI fake_RealizePalette(HDC);
6364

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

src/hook.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ CREATEFONTINDIRECTAPROC real_CreateFontIndirectA = CreateFontIndirectA;
5959
CREATEFONTAPROC real_CreateFontA = CreateFontA;
6060
GETSYSTEMPALETTEENTRIESPROC real_GetSystemPaletteEntries = GetSystemPaletteEntries;
6161
SELECTPALETTEPROC real_SelectPalette = SelectPalette;
62+
REALIZEPALETTEPROC real_RealizePalette = RealizePalette;
6263
LOADLIBRARYAPROC real_LoadLibraryA = LoadLibraryA;
6364
LOADLIBRARYWPROC real_LoadLibraryW = LoadLibraryW;
6465
LOADLIBRARYEXAPROC real_LoadLibraryExA = LoadLibraryExA;
@@ -153,6 +154,7 @@ HOOKLIST g_hook_hooklist[] =
153154
{ "CreateFontA", (PROC)fake_CreateFontA, (PROC*)&real_CreateFontA, 0 },
154155
{ "GetSystemPaletteEntries", (PROC)fake_GetSystemPaletteEntries, (PROC*)&real_GetSystemPaletteEntries, 0 },
155156
{ "SelectPalette", (PROC)fake_SelectPalette, (PROC*)&real_SelectPalette, 0 },
157+
{ "RealizePalette", (PROC)fake_RealizePalette, (PROC*)&real_RealizePalette, 0 },
156158
{ "CreateFontIndirectA", (PROC)fake_CreateFontIndirectA, (PROC*)&real_CreateFontIndirectA, 0 },
157159
{ "", NULL, NULL, 0 }
158160
}

src/winapi_hooks.c

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -905,11 +905,11 @@ int WINAPI fake_GetDeviceCaps(HDC hdc, int index)
905905
return 20;
906906
}
907907
else
908-
{
909-
return 256;
908+
{
909+
return 256;
910+
}
910911
}
911912
}
912-
}
913913

914914
return real_GetDeviceCaps(hdc, index);
915915
}
@@ -1410,18 +1410,39 @@ HPALETTE WINAPI fake_SelectPalette(HDC hdc, HPALETTE hPal, BOOL bForceBkgd)
14101410
{
14111411
TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress());
14121412

1413-
PALETTEENTRY pal[256];
1414-
UINT count = GetPaletteEntries(hPal, 0, 256, pal);
1415-
1416-
ddp_SetEntries(g_ddraw.primary->palette, 0, 0, count, pal);
1413+
g_ddraw.primary->selected_pal_count = GetPaletteEntries(hPal, 0, 256, g_ddraw.primary->selected_pal);
14171414

1418-
return real_SelectPalette(g_ddraw.primary->hdc, hPal, bForceBkgd);
1415+
return real_SelectPalette(g_ddraw.primary->hdc, hPal, bForceBkgd);;
14191416
}
14201417
}
14211418

14221419
return real_SelectPalette(hdc, hPal, bForceBkgd);
14231420
}
14241421

1422+
UINT WINAPI fake_RealizePalette(HDC hdc)
1423+
{
1424+
if (g_ddraw.ref &&
1425+
g_ddraw.bpp == 8 &&
1426+
((g_ddraw.hwnd && WindowFromDC(hdc) == g_ddraw.hwnd) || WindowFromDC(hdc) == GetDesktopWindow()))
1427+
{
1428+
if (g_ddraw.primary && g_ddraw.primary->palette)
1429+
{
1430+
TRACE("%s [%p]\n", __FUNCTION__, _ReturnAddress());
1431+
1432+
ddp_SetEntries(
1433+
g_ddraw.primary->palette,
1434+
0,
1435+
0,
1436+
g_ddraw.primary->selected_pal_count,
1437+
g_ddraw.primary->selected_pal);
1438+
1439+
return g_ddraw.primary->selected_pal_count;
1440+
}
1441+
}
1442+
1443+
return real_RealizePalette(hdc);
1444+
}
1445+
14251446
HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName)
14261447
{
14271448
HMODULE hmod_old = GetModuleHandleA(lpLibFileName);

0 commit comments

Comments
 (0)