And implemented borderless windows on OS X.
This commit is contained in:
parent
256a452fbd
commit
dd2ee50710
|
@ -21,6 +21,7 @@ This README is being written.<br>
|
||||||
* **16 June 2016**
|
* **16 June 2016**
|
||||||
* Added `uiWindowContentSize()`, `uiWindowSetContentSize()`, and `uiWindowOnContentSizeChanged()` methods for manipulating uiWindow content sizes. Note the use of "content size"; the size you work with does NOT include window decorations (titlebars, menus, etc.).
|
* Added `uiWindowContentSize()`, `uiWindowSetContentSize()`, and `uiWindowOnContentSizeChanged()` methods for manipulating uiWindow content sizes. Note the use of "content size"; the size you work with does NOT include window decorations (titlebars, menus, etc.).
|
||||||
* Added `uiWindowFullscreen()` and `uiWindowSetFullscreen()` to allow making fullscreen uiWindows, taking advantage of OS facilities for fullscreen and without changing the screen resolution (!).
|
* Added `uiWindowFullscreen()` and `uiWindowSetFullscreen()` to allow making fullscreen uiWindows, taking advantage of OS facilities for fullscreen and without changing the screen resolution (!).
|
||||||
|
* Added `uiWindowBorderless()` and `uiWindowSetBorderless()` for allowing borderless uiWindows.
|
||||||
|
|
||||||
* **15 June 2016**
|
* **15 June 2016**
|
||||||
* Added `uiFormDelete()`; thanks to @emersion.
|
* Added `uiFormDelete()`; thanks to @emersion.
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
// 15 august 2015
|
// 15 august 2015
|
||||||
#import "uipriv_darwin.h"
|
#import "uipriv_darwin.h"
|
||||||
|
|
||||||
|
#define defaultStyleMask (NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask)
|
||||||
|
|
||||||
struct uiWindow {
|
struct uiWindow {
|
||||||
uiDarwinControl c;
|
uiDarwinControl c;
|
||||||
NSWindow *window;
|
NSWindow *window;
|
||||||
|
@ -16,6 +18,7 @@ struct uiWindow {
|
||||||
void *onContentSizeChangedData;
|
void *onContentSizeChangedData;
|
||||||
BOOL suppressSizeChanged;
|
BOOL suppressSizeChanged;
|
||||||
int fullscreen;
|
int fullscreen;
|
||||||
|
int borderless;
|
||||||
};
|
};
|
||||||
|
|
||||||
@interface windowDelegateClass : NSObject<NSWindowDelegate> {
|
@interface windowDelegateClass : NSObject<NSWindowDelegate> {
|
||||||
|
@ -323,9 +326,13 @@ void uiWindowSetFullscreen(uiWindow *w, int fullscreen)
|
||||||
if (!w->fullscreen && !fullscreen)
|
if (!w->fullscreen && !fullscreen)
|
||||||
return;
|
return;
|
||||||
w->fullscreen = fullscreen;
|
w->fullscreen = fullscreen;
|
||||||
|
if (w->fullscreen && w->borderless) // borderless doesn't play nice with fullscreen; don't toggle while borderless
|
||||||
|
return;
|
||||||
w->suppressSizeChanged = YES;
|
w->suppressSizeChanged = YES;
|
||||||
[w->window toggleFullScreen:w->window];
|
[w->window toggleFullScreen:w->window];
|
||||||
w->suppressSizeChanged = NO;
|
w->suppressSizeChanged = NO;
|
||||||
|
if (!w->fullscreen && w->borderless) // borderless doesn't play nice with fullscreen; restore borderless after removing
|
||||||
|
[w->window setStyleMask:NSBorderlessWindowMask];
|
||||||
}
|
}
|
||||||
|
|
||||||
void uiWindowOnContentSizeChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data)
|
void uiWindowOnContentSizeChanged(uiWindow *w, void (*f)(uiWindow *, void *), void *data)
|
||||||
|
@ -340,6 +347,29 @@ void uiWindowOnClosing(uiWindow *w, int (*f)(uiWindow *, void *), void *data)
|
||||||
w->onClosingData = data;
|
w->onClosingData = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int uiWindowBorderless(uiWindow *w)
|
||||||
|
{
|
||||||
|
return w->borderless;
|
||||||
|
}
|
||||||
|
|
||||||
|
void uiWindowSetBorderless(uiWindow *w, int borderless)
|
||||||
|
{
|
||||||
|
w->borderless = borderless;
|
||||||
|
if (w->borderless) {
|
||||||
|
// borderless doesn't play nice with fullscreen; wait for later
|
||||||
|
if (!w->fullscreen)
|
||||||
|
[w->window setStyleMask:NSBorderlessWindowMask];
|
||||||
|
} else {
|
||||||
|
[w->window setStyleMask:defaultStyleMask];
|
||||||
|
// borderless doesn't play nice with fullscreen; restore state
|
||||||
|
if (w->fullscreen) {
|
||||||
|
w->suppressSizeChanged = YES;
|
||||||
|
[w->window toggleFullScreen:w->window];
|
||||||
|
w->suppressSizeChanged = NO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void uiWindowSetChild(uiWindow *w, uiControl *child)
|
void uiWindowSetChild(uiWindow *w, uiControl *child)
|
||||||
{
|
{
|
||||||
NSView *childView;
|
NSView *childView;
|
||||||
|
@ -389,7 +419,7 @@ uiWindow *uiNewWindow(const char *title, int width, int height, int hasMenubar)
|
||||||
uiDarwinNewControl(uiWindow, w);
|
uiDarwinNewControl(uiWindow, w);
|
||||||
|
|
||||||
w->window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, (CGFloat) width, (CGFloat) height)
|
w->window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, (CGFloat) width, (CGFloat) height)
|
||||||
styleMask:(NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask)
|
styleMask:defaultStyleMask
|
||||||
backing:NSBackingStoreBuffered
|
backing:NSBackingStoreBuffered
|
||||||
defer:YES];
|
defer:YES];
|
||||||
[w->window setTitle:toNSString(title)];
|
[w->window setTitle:toNSString(title)];
|
||||||
|
|
Loading…
Reference in New Issue