1
0
Fork 0

Change: [OSX] Hide Dock and menu during fullscreen mode.

pull/8491/head
Michael Lutz 2021-01-03 15:13:28 +01:00
parent 784a4ef9b5
commit c860a247d3
4 changed files with 20 additions and 8 deletions

View File

@ -140,7 +140,7 @@ public:
/** Toggle between fullscreen and windowed mode /** Toggle between fullscreen and windowed mode
* @return whether switch was successful * @return whether switch was successful
*/ */
virtual bool ToggleFullscreen() { return false; }; virtual bool ToggleFullscreen(bool fullscreen) { return false; };
/** Return the width of the current view /** Return the width of the current view
* @return width of the current view * @return width of the current view

View File

@ -175,7 +175,7 @@ void QZ_GameSizeChanged()
static CocoaSubdriver *QZ_CreateSubdriver(int width, int height, int bpp, bool fullscreen, bool fallback) static CocoaSubdriver *QZ_CreateSubdriver(int width, int height, int bpp, bool fullscreen, bool fallback)
{ {
CocoaSubdriver *ret = QZ_CreateWindowQuartzSubdriver(width, height, bpp); CocoaSubdriver *ret = QZ_CreateWindowQuartzSubdriver(width, height, bpp);
if (ret != nullptr && fullscreen) ret->ToggleFullscreen(); if (ret != nullptr && fullscreen) ret->ToggleFullscreen(fullscreen);
if (ret != nullptr) return ret; if (ret != nullptr) return ret;
if (!fallback) return nullptr; if (!fallback) return nullptr;
@ -297,7 +297,7 @@ bool VideoDriver_Cocoa::ToggleFullscreen(bool full_screen)
{ {
assert(_cocoa_subdriver != NULL); assert(_cocoa_subdriver != NULL);
return _cocoa_subdriver->ToggleFullscreen(); return _cocoa_subdriver->ToggleFullscreen(full_screen);
} }
/** /**
@ -355,8 +355,8 @@ public:
virtual bool ChangeResolution(int w, int h, int bpp); virtual bool ChangeResolution(int w, int h, int bpp);
virtual bool IsFullscreen() { return false; } virtual bool IsFullscreen();
virtual bool ToggleFullscreen(); /* Full screen mode on OSX 10.7 */ virtual bool ToggleFullscreen(bool fullscreen); /* Full screen mode on OSX 10.7 */
virtual int GetWidth() { return window_width; } virtual int GetWidth() { return window_width; }
virtual int GetHeight() { return window_height; } virtual int GetHeight() { return window_height; }
@ -474,11 +474,18 @@ void WindowQuartzSubdriver::GetDeviceInfo()
CGDisplayModeRelease(cur_mode); CGDisplayModeRelease(cur_mode);
} }
bool WindowQuartzSubdriver::IsFullscreen()
{
return this->window != nil && ([ this->window styleMask ] & NSWindowStyleMaskFullScreen) != 0;
}
/** Switch to full screen mode on OSX 10.7 /** Switch to full screen mode on OSX 10.7
* @return Whether we switched to full screen * @return Whether we switched to full screen
*/ */
bool WindowQuartzSubdriver::ToggleFullscreen() bool WindowQuartzSubdriver::ToggleFullscreen(bool fullscreen)
{ {
if (this->IsFullscreen() == fullscreen) return true;
if ([ this->window respondsToSelector:@selector(toggleFullScreen:) ]) { if ([ this->window respondsToSelector:@selector(toggleFullScreen:) ]) {
[ this->window performSelector:@selector(toggleFullScreen:) withObject:this->window ]; [ this->window performSelector:@selector(toggleFullScreen:) withObject:this->window ];
return true; return true;
@ -531,8 +538,6 @@ bool WindowQuartzSubdriver::SetVideoMode(int width, int height, int bpp)
NSButton* fullscreenButton = [ this->window standardWindowButton:NSWindowFullScreenButton ]; NSButton* fullscreenButton = [ this->window standardWindowButton:NSWindowFullScreenButton ];
[ fullscreenButton setAction:@selector(toggleFullScreen:) ]; [ fullscreenButton setAction:@selector(toggleFullScreen:) ];
[ fullscreenButton setTarget:this->window ]; [ fullscreenButton setTarget:this->window ];
[ this->window setCollectionBehavior: NSWindowCollectionBehaviorFullScreenPrimary ];
} }
[ this->window setDriver:this ]; [ this->window setDriver:this ];

View File

@ -67,6 +67,7 @@ extern NSString *OTTDMainLaunchGameEngine;
- (BOOL)windowShouldClose:(id)sender; - (BOOL)windowShouldClose:(id)sender;
- (void)windowDidEnterFullScreen:(NSNotification *)aNotification; - (void)windowDidEnterFullScreen:(NSNotification *)aNotification;
- (void)windowDidChangeScreenProfile:(NSNotification *)aNotification; - (void)windowDidChangeScreenProfile:(NSNotification *)aNotification;
- (NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions;
@end @end

View File

@ -860,5 +860,11 @@ static const char *Utf8AdvanceByUtf16Units(const char *str, NSUInteger count)
if (!driver->setup) driver->WindowResized(); if (!driver->setup) driver->WindowResized();
} }
/** Presentation options to use for fullsreen mode. */
- (NSApplicationPresentationOptions)window:(NSWindow *)window willUseFullScreenPresentationOptions:(NSApplicationPresentationOptions)proposedOptions
{
return NSApplicationPresentationFullScreen | NSApplicationPresentationHideMenuBar | NSApplicationPresentationHideDock;
}
@end @end
#endif /* WITH_COCOA */ #endif /* WITH_COCOA */