diff --git a/src/core/windows/SDL_windows.c b/src/core/windows/SDL_windows.c index 286e8e6802..3259e787d4 100644 --- a/src/core/windows/SDL_windows.c +++ b/src/core/windows/SDL_windows.c @@ -330,10 +330,10 @@ void WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect) winrect->bottom = sdlrect->y + sdlrect->h - 1; } -BOOL WIN_IsRectEmpty(const RECT *rect) +bool WIN_WindowRectValid(const RECT *rect) { - // Calculating this manually because Xbox does not support Win32 IsRectEmpty. - return (rect->right <= rect->left) || (rect->bottom <= rect->top); + // A window can be resized to zero height, but not zero width + return (rect->right > 0); } // Some GUIDs we need to know without linking to libraries that aren't available before Vista. diff --git a/src/core/windows/SDL_windows.h b/src/core/windows/SDL_windows.h index b781b12368..ef54fe379e 100644 --- a/src/core/windows/SDL_windows.h +++ b/src/core/windows/SDL_windows.h @@ -156,8 +156,8 @@ extern BOOL WIN_IsEqualIID(REFIID a, REFIID b); extern void WIN_RECTToRect(const RECT *winrect, SDL_Rect *sdlrect); extern void WIN_RectToRECT(const SDL_Rect *sdlrect, RECT *winrect); -// Returns true if the rect is empty -extern BOOL WIN_IsRectEmpty(const RECT *rect); +// Returns false if a window client rect is not valid +bool WIN_WindowRectValid(const RECT *rect); extern SDL_AudioFormat SDL_WaveFormatExToSDLFormat(WAVEFORMATEX *waveformat); diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c index 46f33f3a85..9baa9e4222 100644 --- a/src/video/windows/SDL_windowsevents.c +++ b/src/video/windows/SDL_windowsevents.c @@ -1792,7 +1792,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara } if (!data->disable_move_size_events) { - if (GetClientRect(hwnd, &rect) && !WIN_IsRectEmpty(&rect)) { + if (GetClientRect(hwnd, &rect) && WIN_WindowRectValid(&rect)) { ClientToScreen(hwnd, (LPPOINT) &rect); ClientToScreen(hwnd, (LPPOINT) &rect + 1); @@ -1804,7 +1804,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara } // Moving the window from one display to another can change the size of the window (in the handling of SDL_EVENT_WINDOW_MOVED), so we need to re-query the bounds - if (GetClientRect(hwnd, &rect) && !WIN_IsRectEmpty(&rect)) { + if (GetClientRect(hwnd, &rect) && WIN_WindowRectValid(&rect)) { w = rect.right; h = rect.bottom; @@ -2084,7 +2084,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara RECT rect; float x, y; - if (!GetClientRect(hwnd, &rect) || WIN_IsRectEmpty(&rect)) { + if (!GetClientRect(hwnd, &rect) || !WIN_WindowRectValid(&rect)) { if (inputs) { SDL_small_free(inputs, isstack); } diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c index e9f911d123..daaa90713f 100644 --- a/src/video/windows/SDL_windowswindow.c +++ b/src/video/windows/SDL_windowswindow.c @@ -535,7 +535,7 @@ static bool SetupWindowData(SDL_VideoDevice *_this, SDL_Window *window, HWND hwn } if (!(window->flags & SDL_WINDOW_MINIMIZED)) { RECT rect; - if (GetClientRect(hwnd, &rect) && !WIN_IsRectEmpty(&rect)) { + if (GetClientRect(hwnd, &rect) && WIN_WindowRectValid(&rect)) { int w = rect.right; int h = rect.bottom; @@ -1062,7 +1062,7 @@ void WIN_GetWindowSizeInPixels(SDL_VideoDevice *_this, SDL_Window *window, int * HWND hwnd = data->hwnd; RECT rect; - if (GetClientRect(hwnd, &rect) && !WIN_IsRectEmpty(&rect)) { + if (GetClientRect(hwnd, &rect) && WIN_WindowRectValid(&rect)) { *w = rect.right; *h = rect.bottom; } else if (window->last_pixel_w && window->last_pixel_h) {