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)