From 377f46814a3c34fa915d42df1e372bbaccb7dcd7 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Thu, 16 Jun 2016 11:20:28 -0400 Subject: [PATCH] Started adding borderless uiWindow support; implemented on Windows. --- test/page15.c | 12 ++++++++++++ ui.h | 2 ++ windows/window.cpp | 19 ++++++++++++++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/test/page15.c b/test/page15.c index da5f90f5..50cf155a 100644 --- a/test/page15.c +++ b/test/page15.c @@ -93,11 +93,19 @@ void setFullscreen(uiCheckbox *cb, void *data) updatesize(w); } +static void borderless(uiCheckbox *c, void *data) +{ + uiWindow *w = uiWindow(data); + + uiWindowSetBorderless(w, uiCheckboxChecked(c)); +} + uiBox *makePage15(uiWindow *w) { uiBox *page15; uiBox *hbox; uiButton *button; + uiCheckbox *checkbox; page15 = newVerticalBox(); @@ -136,5 +144,9 @@ uiBox *makePage15(uiWindow *w) uiWindowOnContentSizeChanged(w, onSize, NULL); updatesize(w); + checkbox = uiNewCheckbox("Borderless"); + uiCheckboxOnToggled(checkbox, borderless, w); + uiBoxAppend(page15, uiControl(checkbox), 0); + return page15; } diff --git a/ui.h b/ui.h index b5419482..f6d6dd83 100644 --- a/ui.h +++ b/ui.h @@ -109,6 +109,8 @@ _UI_EXTERN int uiWindowFullscreen(uiWindow *w); _UI_EXTERN void uiWindowSetFullscreen(uiWindow *w, int fullscreen); _UI_EXTERN void uiWindowOnContentSizeChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data); _UI_EXTERN void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *w, void *data), void *data); +_UI_EXTERN int uiWindowBorderless(uiWindow *w); +_UI_EXTERN void uiWindowSetBorderless(uiWindow *w, int borderless); _UI_EXTERN void uiWindowSetChild(uiWindow *w, uiControl *child); _UI_EXTERN int uiWindowMargined(uiWindow *w); _UI_EXTERN void uiWindowSetMargined(uiWindow *w, int margined); diff --git a/windows/window.cpp b/windows/window.cpp index aea9c225..760702ba 100644 --- a/windows/window.cpp +++ b/windows/window.cpp @@ -22,6 +22,7 @@ struct uiWindow { BOOL changingSize; int fullscreen; WINDOWPLACEMENT fsPrevPlacement; + int borderless; }; // from https://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing @@ -411,7 +412,8 @@ void uiWindowSetFullscreen(uiWindow *w, int fullscreen) SWP_FRAMECHANGED | SWP_NOOWNERZORDER) == 0) logLastError(L"error making window fullscreen"); } else { - setStyle(w->hwnd, getStyle(w->hwnd) | WS_OVERLAPPEDWINDOW); + if (!w->borderless) // keep borderless until that is turned off + setStyle(w->hwnd, getStyle(w->hwnd) | WS_OVERLAPPEDWINDOW); if (SetWindowPlacement(w->hwnd, &(w->fsPrevPlacement)) == 0) logLastError(L"error leaving fullscreen"); if (SetWindowPos(w->hwnd, NULL, @@ -434,6 +436,21 @@ void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *, void *), void *data) w->onClosingData = data; } +int uiWindowBorderless(uiWindow *w) +{ + return w->borderless; +} + +void uiWindowSetBorderless(uiWindow *w, int borderless) +{ + w->borderless = borderless; + if (w->borderless) + setStyle(w->hwnd, getStyle(w->hwnd) & ~WS_OVERLAPPEDWINDOW); + else + if (!w->fullscreen) // keep borderless until leaving fullscreen + setStyle(w->hwnd, getStyle(w->hwnd) | WS_OVERLAPPEDWINDOW); +} + void uiWindowSetChild(uiWindow *w, uiControl *child) { if (w->child != NULL) {