win32: Set the WS_THICKFRAME style on popup windows
Without it, programmatically resizing the window seems to fail. As popup windows are implicitly borderless, calculations taking the frame size into account need to be avoided.
This commit is contained in:
parent
643281d022
commit
1d417ab27f
2 changed files with 8 additions and 5 deletions
|
@ -1405,7 +1405,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
|||
constrain_max_size = FALSE;
|
||||
}
|
||||
|
||||
if (!(SDL_GetWindowFlags(data->window) & SDL_WINDOW_BORDERLESS)) {
|
||||
if (!(SDL_GetWindowFlags(data->window) & SDL_WINDOW_BORDERLESS) && !SDL_WINDOW_IS_POPUP(data->window)) {
|
||||
size.top = 0;
|
||||
size.left = 0;
|
||||
size.bottom = h;
|
||||
|
@ -1991,7 +1991,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
|||
{
|
||||
RECT rect = { 0 };
|
||||
|
||||
if (!(data->window->flags & SDL_WINDOW_BORDERLESS)) {
|
||||
if (!(data->window->flags & SDL_WINDOW_BORDERLESS) && !SDL_WINDOW_IS_POPUP(data->window)) {
|
||||
WIN_AdjustWindowRectForHWND(hwnd, &rect, prevDPI);
|
||||
}
|
||||
|
||||
|
@ -2008,7 +2008,7 @@ LRESULT CALLBACK WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lPara
|
|||
rect.right = query_client_w_win;
|
||||
rect.bottom = query_client_h_win;
|
||||
|
||||
if (!(data->window->flags & SDL_WINDOW_BORDERLESS)) {
|
||||
if (!(data->window->flags & SDL_WINDOW_BORDERLESS) && !SDL_WINDOW_IS_POPUP(data->window)) {
|
||||
WIN_AdjustWindowRectForHWND(hwnd, &rect, nextDPI);
|
||||
}
|
||||
|
||||
|
|
|
@ -162,7 +162,7 @@ static DWORD GetWindowStyle(SDL_Window *window)
|
|||
DWORD style = 0;
|
||||
|
||||
if (SDL_WINDOW_IS_POPUP(window)) {
|
||||
style |= WS_POPUP;
|
||||
style |= WS_POPUP | WS_THICKFRAME;
|
||||
} else if (window->flags & SDL_WINDOW_FULLSCREEN) {
|
||||
style |= STYLE_FULLSCREEN;
|
||||
} else {
|
||||
|
@ -269,7 +269,7 @@ static bool WIN_AdjustWindowRectWithStyle(SDL_Window *window, DWORD style, DWORD
|
|||
/* borderless windows will have WM_NCCALCSIZE return 0 for the non-client area. When this happens, it looks like windows will send a resize message
|
||||
expanding the window client area to the previous window + chrome size, so shouldn't need to adjust the window size for the set styles.
|
||||
*/
|
||||
if (!(window->flags & SDL_WINDOW_BORDERLESS)) {
|
||||
if (!(window->flags & SDL_WINDOW_BORDERLESS) && !SDL_WINDOW_IS_POPUP(window)) {
|
||||
#if defined(SDL_PLATFORM_XBOXONE) || defined(SDL_PLATFORM_XBOXSERIES)
|
||||
AdjustWindowRectEx(&rect, style, menu, 0);
|
||||
#else
|
||||
|
@ -765,6 +765,9 @@ bool WIN_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_Properties
|
|||
WIN_ConstrainPopup(window, false);
|
||||
WIN_AdjustWindowRectWithStyle(window, style, styleEx, FALSE, &x, &y, &w, &h, SDL_WINDOWRECT_FLOATING);
|
||||
|
||||
int gx, gy;
|
||||
SDL_RelativeToGlobalForWindow(window, window->floating.x, window->floating.y, &gx, &gy);
|
||||
SDL_Log("Create at: %i,%i (%i,%i)", gx, gy, x, y);
|
||||
hwnd = CreateWindowEx(styleEx, SDL_Appname, TEXT(""), style,
|
||||
x, y, w, h, parent, NULL, SDL_Instance, NULL);
|
||||
if (!hwnd) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue