From 77bd7aa3bbd40c8baba54de2a17f21fd92afced3 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 16 Aug 2023 14:21:26 +0200 Subject: [PATCH] add hooks to fix blurry fonts --- inc/hook.h | 4 ++++ inc/winapi_hooks.h | 3 +++ src/config.c | 1 + src/hook.c | 5 +++++ src/winapi_hooks.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 61 insertions(+) diff --git a/inc/hook.h b/inc/hook.h index 008ca2f..982064f 100644 --- a/inc/hook.h +++ b/inc/hook.h @@ -49,6 +49,8 @@ typedef BOOL(WINAPI* PEEKMESSAGEAPROC)(LPMSG, HWND, UINT, UINT, UINT); typedef int (WINAPI* GETDEVICECAPSPROC)(HDC, int); +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 HMODULE(WINAPI* LOADLIBRARYAPROC)(LPCSTR); typedef HMODULE(WINAPI* LOADLIBRARYWPROC)(LPCWSTR); typedef HMODULE(WINAPI* LOADLIBRARYEXAPROC)(LPCSTR, HANDLE, DWORD); @@ -90,6 +92,8 @@ extern SETFOREGROUNDWINDOWPROC real_SetForegroundWindow; extern SETWINDOWSHOOKEXAPROC real_SetWindowsHookExA; extern PEEKMESSAGEAPROC real_PeekMessageA; extern GETDEVICECAPSPROC real_GetDeviceCaps; +extern CREATEFONTINDIRECTAPROC real_CreateFontIndirectA; +extern CREATEFONTAPROC real_CreateFontA; extern LOADLIBRARYAPROC real_LoadLibraryA; extern LOADLIBRARYWPROC real_LoadLibraryW; extern LOADLIBRARYEXAPROC real_LoadLibraryExA; diff --git a/inc/winapi_hooks.h b/inc/winapi_hooks.h index 0983b9b..b2962da 100644 --- a/inc/winapi_hooks.h +++ b/inc/winapi_hooks.h @@ -43,6 +43,9 @@ int WINAPI fake_SetDIBitsToDevice( int WINAPI fake_StretchDIBits( HDC, int, int, int, int, int, int, int, int, const VOID*, const BITMAPINFO*, UINT, DWORD); +HFONT WINAPI fake_CreateFontIndirectA(CONST LOGFONTA*); +HFONT WINAPI fake_CreateFontA(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCTSTR); + HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName); HMODULE WINAPI fake_LoadLibraryW(LPCWSTR lpLibFileName); HMODULE WINAPI fake_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags); diff --git a/src/config.c b/src/config.c index f683611..15a0ba7 100644 --- a/src/config.c +++ b/src/config.c @@ -367,6 +367,7 @@ static void cfg_create_ini() "rgb555=false\n" "no_dinput_hook=false\n" "refresh_rate=0\n" + "non_anti_aliased_fonts=true\n" "\n" "\n" "\n" diff --git a/src/hook.c b/src/hook.c index 3392066..2294e65 100644 --- a/src/hook.c +++ b/src/hook.c @@ -49,6 +49,8 @@ SETFOREGROUNDWINDOWPROC real_SetForegroundWindow = SetForegroundWindow; SETWINDOWSHOOKEXAPROC real_SetWindowsHookExA = SetWindowsHookExA; PEEKMESSAGEAPROC real_PeekMessageA = PeekMessageA; GETDEVICECAPSPROC real_GetDeviceCaps = GetDeviceCaps; +CREATEFONTINDIRECTAPROC real_CreateFontIndirectA = CreateFontIndirectA; +CREATEFONTAPROC real_CreateFontA = CreateFontA; LOADLIBRARYAPROC real_LoadLibraryA = LoadLibraryA; LOADLIBRARYWPROC real_LoadLibraryW = LoadLibraryW; LOADLIBRARYEXAPROC real_LoadLibraryExA = LoadLibraryExA; @@ -124,6 +126,9 @@ HOOKLIST g_hook_hooklist[] = { "SetDIBitsToDevice", (PROC)fake_SetDIBitsToDevice, (PROC*)&real_SetDIBitsToDevice, SKIP_HOOK2 }, { "StretchDIBits", (PROC)fake_StretchDIBits, (PROC*)&real_StretchDIBits, SKIP_HOOK2 }, { "GetDeviceCaps", (PROC)fake_GetDeviceCaps, (PROC*)&real_GetDeviceCaps, 0 }, + { "GetDeviceCaps", (PROC)fake_GetDeviceCaps, (PROC*)&real_GetDeviceCaps, 0 }, + { "CreateFontA", (PROC)fake_CreateFontA, (PROC*)&real_CreateFontA, 0 }, + { "CreateFontIndirectA", (PROC)fake_CreateFontIndirectA, (PROC*)&real_CreateFontIndirectA, 0 }, { "", NULL, NULL, 0 } } }, diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index f12c63b..d95ef75 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -905,6 +905,54 @@ int WINAPI fake_StretchDIBits( rop); } +HFONT WINAPI fake_CreateFontIndirectA(CONST LOGFONTA* lplf) +{ + LOGFONTA lf; + memcpy(&lf, lplf, sizeof(lf)); + + if (cfg_get_bool("non_anti_aliased_fonts", TRUE)) + lf.lfQuality = NONANTIALIASED_QUALITY; + + return real_CreateFontIndirectA(&lf); +} + +HFONT WINAPI fake_CreateFontA( + int nHeight, + int nWidth, + int nEscapement, + int nOrientation, + int fnWeight, + DWORD fdwItalic, + DWORD fdwUnderline, + DWORD fdwStrikeOut, + DWORD fdwCharSet, + DWORD fdwOutputPrecision, + DWORD fdwClipPrecision, + DWORD fdwQuality, + DWORD fdwPitchAndFamily, + LPCTSTR lpszFace) +{ + if (cfg_get_bool("non_anti_aliased_fonts", TRUE)) + fdwQuality = NONANTIALIASED_QUALITY; + + return + real_CreateFontA( + nHeight, + nWidth, + nEscapement, + nOrientation, + fnWeight, + fdwItalic, + fdwUnderline, + fdwStrikeOut, + fdwCharSet, + fdwOutputPrecision, + fdwClipPrecision, + fdwQuality, + fdwPitchAndFamily, + lpszFace); +} + HMODULE WINAPI fake_LoadLibraryA(LPCSTR lpLibFileName) { HMODULE hmod = real_LoadLibraryA(lpLibFileName);