From c683190b2098ab60437469d335c1cc3e8e37a9a0 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig Date: Sat, 24 Mar 2018 17:49:36 +0100 Subject: [PATCH 1/3] Implement resizeable --- darwin/window.m | 16 ++++++++++++++++ examples/controlgallery/main.c | 1 + ui.h | 2 ++ unix/window.c | 12 ++++++++++++ windows/window.cpp | 16 ++++++++++++++++ 5 files changed, 47 insertions(+) diff --git a/darwin/window.m b/darwin/window.m index 1a048207..848d3986 100644 --- a/darwin/window.m +++ b/darwin/window.m @@ -16,6 +16,7 @@ struct uiWindow { BOOL suppressSizeChanged; int fullscreen; int borderless; + int resizeable; }; @implementation uiprivNSWindow @@ -357,6 +358,21 @@ void uiWindowSetMargined(uiWindow *w, int margined) uiprivSingleChildConstraintsSetMargined(&(w->constraints), w->margined); } +int uiWindowResizeable(uiWindow *w) +{ + return w->resizeable; +} + +void uiWindowSetResizeable(uiWindow *w, int resizeable) +{ + w->resizeable = resizeable; + if(resizeable){ + [w->window setStyleMask:[w->window styleMask] | NSResizableWindowMask]; + } else { + [w->window setStyleMask:[w->window styleMask] & ~NSResizableWindowMask]; + } +} + static int defaultOnClosing(uiWindow *w, void *data) { return 0; diff --git a/examples/controlgallery/main.c b/examples/controlgallery/main.c index c0d536c1..f2b42557 100644 --- a/examples/controlgallery/main.c +++ b/examples/controlgallery/main.c @@ -311,6 +311,7 @@ int main(void) tab = uiNewTab(); uiWindowSetChild(mainwin, uiControl(tab)); uiWindowSetMargined(mainwin, 1); + uiWindowSetResizeable(mainwin, 0); uiTabAppend(tab, "Basic Controls", makeBasicControlsPage()); uiTabSetMargined(tab, 0, 1); diff --git a/ui.h b/ui.h index b5fb9a27..6636593b 100644 --- a/ui.h +++ b/ui.h @@ -130,6 +130,8 @@ _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); +_UI_EXTERN int uiWindowResizeable(uiWindow *w); +_UI_EXTERN void uiWindowSetResizeable(uiWindow *w, int resizeable); _UI_EXTERN uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar); typedef struct uiButton uiButton; diff --git a/unix/window.c b/unix/window.c index c5ba2038..bfd86deb 100644 --- a/unix/window.c +++ b/unix/window.c @@ -19,6 +19,7 @@ struct uiWindow { uiControl *child; int margined; + int resizeable; int (*onClosing)(uiWindow *, void *); void *onClosingData; @@ -229,6 +230,17 @@ void uiWindowSetMargined(uiWindow *w, int margined) uiprivSetMargined(w->childHolderContainer, w->margined); } +int uiWindowResizeable(uiWindow *w) +{ + return w->resizeable; +} + +void uiWindowSetResizeable(uiWindow *w, int resizeable) +{ + w->resizeable = resizeable; + gtk_window_set_resizable(w->window, resizeable); +} + uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar) { uiWindow *w; diff --git a/windows/window.cpp b/windows/window.cpp index 2ea5b7ce..6fbb76f3 100644 --- a/windows/window.cpp +++ b/windows/window.cpp @@ -13,6 +13,7 @@ struct uiWindow { int (*onClosing)(uiWindow *, void *); void *onClosingData; int margined; + int resizeable; BOOL hasMenubar; void (*onContentSizeChanged)(uiWindow *, void *); void *onContentSizeChangedData; @@ -428,6 +429,21 @@ void uiWindowSetMargined(uiWindow *w, int margined) windowRelayout(w); } +int uiWindowResizeable(uiWindow *w) +{ + return w->resizeable; +} + +void uiWindowSetResizeable(uiWindow *w, int resizeable) +{ + w->resizeable = resizeable; + if (w->resizeable) { + setStyle(w->hwnd, getStyle(w->hwnd) | WS_THICKFRAME); + } else { + setStyle(w->hwnd, getStyle(w->hwnd) & ~WS_THICKFRAME); + } +} + // see http://blogs.msdn.com/b/oldnewthing/archive/2003/09/11/54885.aspx and http://blogs.msdn.com/b/oldnewthing/archive/2003/09/13/54917.aspx // TODO use clientSizeToWindowSize() static void setClientSize(uiWindow *w, int width, int height, BOOL hasMenubar, DWORD style, DWORD exstyle) From 07491c611f107ad263898d44cfb3e506f8a23597 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig Date: Sat, 24 Mar 2018 18:50:35 +0100 Subject: [PATCH 2/3] Cleanup, resizeable example in tester --- darwin/window.m | 2 +- examples/controlgallery/main.c | 1 - test/menus.c | 9 +++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/darwin/window.m b/darwin/window.m index 848d3986..b71c6cf1 100644 --- a/darwin/window.m +++ b/darwin/window.m @@ -366,7 +366,7 @@ int uiWindowResizeable(uiWindow *w) void uiWindowSetResizeable(uiWindow *w, int resizeable) { w->resizeable = resizeable; - if(resizeable){ + if(resizeable) { [w->window setStyleMask:[w->window styleMask] | NSResizableWindowMask]; } else { [w->window setStyleMask:[w->window styleMask] & ~NSResizableWindowMask]; diff --git a/examples/controlgallery/main.c b/examples/controlgallery/main.c index f2b42557..c0d536c1 100644 --- a/examples/controlgallery/main.c +++ b/examples/controlgallery/main.c @@ -311,7 +311,6 @@ int main(void) tab = uiNewTab(); uiWindowSetChild(mainwin, uiControl(tab)); uiWindowSetMargined(mainwin, 1); - uiWindowSetResizeable(mainwin, 0); uiTabAppend(tab, "Basic Controls", makeBasicControlsPage()); uiTabSetMargined(tab, 0, 1); diff --git a/test/menus.c b/test/menus.c index 87ff80a3..178a30b5 100644 --- a/test/menus.c +++ b/test/menus.c @@ -17,6 +17,7 @@ uiMenuItem *enableThisItem; uiMenuItem *forceCheckedItem; uiMenuItem *forceUncheckedItem; uiMenuItem *whatWindowItem; +uiMenuItem *resizeableItem; uiMenu *moreTestsMenu; uiMenuItem *quitEnabledItem; uiMenuItem *prefsEnabledItem; @@ -50,6 +51,11 @@ static void whatWindow(uiMenuItem *item, uiWindow *w, void *data) printf("menu item clicked on window %p\n", (void *) w); } +static void toggleResize(uiMenuItem *item, uiWindow *w, void *data) +{ + uiWindowSetResizeable(w, uiMenuItemChecked(item)); +} + void initMenus(void) { fileMenu = uiNewMenu("File"); @@ -79,6 +85,9 @@ void initMenus(void) uiMenuAppendSeparator(testMenu); whatWindowItem = uiMenuAppendItem(testMenu, "What Window?"); uiMenuItemOnClicked(whatWindowItem, whatWindow, NULL); + resizeableItem = uiMenuAppendCheckItem(testMenu, "Enable Resize"); + uiMenuItemSetChecked(resizeableItem, 1); + uiMenuItemOnClicked(resizeableItem, toggleResize, NULL); moreTestsMenu = uiNewMenu("More Tests"); quitEnabledItem = uiMenuAppendCheckItem(moreTestsMenu, "Quit Item Enabled"); From 945431ccb773b32d9898871ef83525e230a9539b Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig Date: Sat, 24 Mar 2018 18:57:33 +0100 Subject: [PATCH 3/3] Also disable maximize on windows --- windows/window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/windows/window.cpp b/windows/window.cpp index 6fbb76f3..2b3136b9 100644 --- a/windows/window.cpp +++ b/windows/window.cpp @@ -438,9 +438,9 @@ void uiWindowSetResizeable(uiWindow *w, int resizeable) { w->resizeable = resizeable; if (w->resizeable) { - setStyle(w->hwnd, getStyle(w->hwnd) | WS_THICKFRAME); + setStyle(w->hwnd, getStyle(w->hwnd) | WS_THICKFRAME | WS_MAXIMIZEBOX); } else { - setStyle(w->hwnd, getStyle(w->hwnd) & ~WS_THICKFRAME); + setStyle(w->hwnd, getStyle(w->hwnd) & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX); } }