From 66e86aa37c76c12b3d62ab365f85bbec2d3190ec Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 20 Aug 2023 23:12:00 +0200 Subject: [PATCH] replace IsIconic with custom function --- inc/utils.h | 1 + src/dd.c | 6 +++--- src/debug.c | 2 +- src/mouse.c | 3 ++- src/utils.c | 7 +++++++ src/winapi_hooks.c | 2 +- src/wndproc.c | 4 ++-- 7 files changed, 17 insertions(+), 8 deletions(-) diff --git a/inc/utils.h b/inc/utils.h index 98b51fc..fdb6b7f 100644 --- a/inc/utils.h +++ b/inc/utils.h @@ -5,6 +5,7 @@ #include +BOOL util_is_minimized(HWND hwnd); BOOL util_is_avx_supported(); void util_limit_game_ticks(); void util_update_bnet_pos(int newX, int newY); diff --git a/src/dd.c b/src/dd.c index 797c48b..66519e0 100644 --- a/src/dd.c +++ b/src/dd.c @@ -861,7 +861,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl x = y = 0; } - if (IsIconic(g_ddraw->hwnd)) + if (util_is_minimized(g_ddraw->hwnd)) real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); RECT dst = { x, y, g_ddraw->render.width + x, g_ddraw->render.height + y }; @@ -930,7 +930,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl { if (g_ddraw->nonexclusive) { - if (IsIconic(g_ddraw->hwnd)) + if (util_is_minimized(g_ddraw->hwnd)) real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); real_SetWindowPos( @@ -972,7 +972,7 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE) | WS_MINIMIZEBOX); } - if (IsIconic(g_ddraw->hwnd)) + if (util_is_minimized(g_ddraw->hwnd)) real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); real_SetWindowPos( diff --git a/src/debug.c b/src/debug.c index 8ac493d..a840939 100644 --- a/src/debug.c +++ b/src/debug.c @@ -206,7 +206,7 @@ int dbg_printf(const char* fmt, ...) void dbg_print_rect(char* info, LPRECT rect) { -#ifdef _DEBUG_X +#ifdef _DEBUG if (rect) { TRACE( diff --git a/src/mouse.c b/src/mouse.c index 1a805da..4cbed30 100644 --- a/src/mouse.c +++ b/src/mouse.c @@ -3,6 +3,7 @@ #include "winapi_hooks.h" #include "dd.h" #include "hook.h" +#include "utils.h" BOOL g_mouse_locked; @@ -14,7 +15,7 @@ void mouse_lock() if (g_ddraw->devmode || g_ddraw->bnet_active || !g_ddraw->hwnd) return; - if (g_hook_active && !g_mouse_locked && !IsIconic(g_ddraw->hwnd)) + if (g_hook_active && !g_mouse_locked && !util_is_minimized(g_ddraw->hwnd)) { int game_count = InterlockedExchangeAdd((LONG*)&g_ddraw->show_cursor_count, 0); int cur_count = real_ShowCursor(TRUE) - 1; diff --git a/src/utils.c b/src/utils.c index 2282c26..ec231d4 100644 --- a/src/utils.c +++ b/src/utils.c @@ -11,6 +11,13 @@ #include "config.h" +BOOL util_is_minimized(HWND hwnd) +{ + RECT rc = { 0 }; + + return IsIconic(hwnd) || (real_GetClientRect(hwnd, &rc) && (rc.right - rc.left == 0 || rc.bottom - rc.top == 0)); +} + BOOL util_is_avx_supported() { const DWORD XMM_STATE_BIT = 1 << 1; diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index ea0f5cf..9925179 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -170,7 +170,7 @@ BOOL WINAPI fake_ClipCursor(const RECT* lpRect) CopyRect(&g_ddraw->mouse.rc, &dst_rc); - if (g_mouse_locked && !IsIconic(g_ddraw->hwnd)) + if (g_mouse_locked && !util_is_minimized(g_ddraw->hwnd)) { real_MapWindowPoints(g_ddraw->hwnd, HWND_DESKTOP, (LPPOINT)&dst_rc, 2); diff --git a/src/wndproc.c b/src/wndproc.c index 122baa5..9b524f2 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -137,7 +137,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } case WM_D3D9DEVICELOST: { - if (((!g_ddraw->windowed && !g_ddraw->nonexclusive) || !IsIconic(g_ddraw->hwnd)) && + if (((!g_ddraw->windowed && !g_ddraw->nonexclusive) || !util_is_minimized(g_ddraw->hwnd)) && g_ddraw->renderer == d3d9_render_main && d3d9_on_device_lost()) { @@ -531,7 +531,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam { if (g_ddraw->renderer == d3d9_render_main) /* Needed for Windows 7 */ real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); - + ChangeDisplaySettings(&g_ddraw->render.mode, CDS_FULLSCREEN); real_ShowWindow(g_ddraw->hwnd, SW_RESTORE); mouse_lock();