diff --git a/darwin/window.m b/darwin/window.m index 1a0482075..b71c6cf1c 100644 --- a/darwin/window.m +++ b/darwin/window.m @@ -16,6 +16,7 @@ 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/test/menus.c b/test/menus.c index 87ff80a36..178a30b55 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"); diff --git a/ui.h b/ui.h index b5fb9a271..6636593bb 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 c5ba20384..bfd86deb4 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 2ea5b7ce7..2b3136b99 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 | WS_MAXIMIZEBOX); + } else { + setStyle(w->hwnd, getStyle(w->hwnd) & ~WS_THICKFRAME & ~WS_MAXIMIZEBOX); + } +} + // 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)