From 51a74dc9c66b76dff795a9da3874602f3f0f0285 Mon Sep 17 00:00:00 2001 From: Jaakko Keränen Date: Fri, 12 Feb 2021 20:52:30 +0200 Subject: Windows: Custom frame behavior A borderless SDL window gets no standard window behavior, so this commit implements support for some of them. There is special handling for the window frame and various snapping modes. Not quite finished yet... It might make sense to research if a custom window class could work with this app (with SDL); could be less work. --- src/app.c | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) (limited to 'src/app.c') diff --git a/src/app.c b/src/app.c index b50321b2..64ddd70e 100644 --- a/src/app.c +++ b/src/app.c @@ -160,12 +160,12 @@ static iString *serializePrefs_App_(const iApp *d) { const iSidebarWidget *sidebar2 = findWidget_App("sidebar2"); appendFormat_String(str, "window.retain arg:%d\n", d->prefs.retainWindowSize); if (d->prefs.retainWindowSize) { - const iBool isMaximized = (SDL_GetWindowFlags(d->window->win) & SDL_WINDOW_MAXIMIZED) != 0; + const iBool isMaximized = snap_Window(d->window) == maximized_WindowSnap; int w, h, x, y; - x = d->window->lastRect.pos.x; - y = d->window->lastRect.pos.y; - w = d->window->lastRect.size.x; - h = d->window->lastRect.size.y; + x = d->window->place.normalRect.pos.x; + y = d->window->place.normalRect.pos.y; + w = d->window->place.normalRect.size.x; + h = d->window->place.normalRect.size.y; appendFormat_String(str, "window.setrect width:%d height:%d coord:%d %d\n", w, h, x, y); appendFormat_String(str, "sidebar.width arg:%d\n", width_SidebarWidget(sidebar)); appendFormat_String(str, "sidebar2.width arg:%d\n", width_SidebarWidget(sidebar2)); @@ -1113,22 +1113,17 @@ iBool handleCommand_App(const char *cmd) { } else if (equal_Command(cmd, "window.maximize")) { if (!argLabel_Command(cmd, "toggle")) { - SDL_MaximizeWindow(d->window->win); + setSnap_Window(d->window, maximized_WindowSnap); } else { - if (SDL_GetWindowFlags(d->window->win) & SDL_WINDOW_MAXIMIZED) { - SDL_RestoreWindow(d->window->win); - } - else { - SDL_MaximizeWindow(d->window->win); - } + setSnap_Window(d->window, snap_Window(d->window) == maximized_WindowSnap ? 0 : + maximized_WindowSnap); } return iTrue; } else if (equal_Command(cmd, "window.fullscreen")) { - const iBool wasFull = - (SDL_GetWindowFlags(d->window->win) & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0; - SDL_SetWindowFullscreen(d->window->win, wasFull ? 0 : SDL_WINDOW_FULLSCREEN_DESKTOP); + const iBool wasFull = snap_Window(d->window) == fullscreen_WindowSnap; + setSnap_Window(d->window, wasFull ? 0 : fullscreen_WindowSnap); postCommandf_App("window.fullscreen.changed arg:%d", !wasFull); return iTrue; } -- cgit v1.2.3