Come sapere se un NSWindow è fullscreen in Mac OS X Lion?
-
25-10-2019 - |
Domanda
Credo che dovrei controllare se contiene [NSApplication presentationOptions]
NSFullScreenModeApplicationPresentationOptions
, ma come faccio a ottenere questo?
EDIT: usando [NSApplication presentationOptions]
non funziona come nella mia app basato su documenti ci potrebbero essere alcuni documenti in fullscreen e altri no. Ora sto cercando un'altra soluzione. Mi chiedo perché non v'è una proprietà chiamata [NSWindow isFullscreen]
o qualcosa di simile.
Soluzione
Stavo solo cercando una soluzione me stesso e in base alla risposta di Matthieu ho creato una categoria a NSWindow che funziona bene per me.
@interface NSWindow (FullScreen)
- (BOOL)mn_isFullScreen;
@end
@implementation NSWindow (FullScreen)
- (BOOL)mn_isFullScreen
{
return (([self styleMask] & NSFullScreenWindowMask) == NSFullScreenWindowMask);
}
@end
Altri suggerimenti
È necessario utilizzare un operatore & bit a bit di test che tale opzione è in uso. Non testato ma probabilmente qualcosa di simile:
- (BOOL) inFullScreenMode {
NSApplicationPresentationOptions opts = [[NSApplication sharedApplication ] presentationOptions];
if ( opts & NSApplicationPresentationFullScreen) {
return YES;
}
return NO;
}
Per vedere se uno dei tuoi finestre sono in modalità a schermo intero è sufficiente controllare la maschera stile della finestra.
NSUInteger masks = [someNSWindow styleMask]
if ( masks & NSFullScreenWindowMask) {
// Do something
}
Per Swift 3.0
if let window = NSApp.mainWindow {
let isWindowFullscreen = window.styleMask.contains(NSFullScreenWindowMask)
}
Ovviamente, per la domanda iniziale, si dovrebbe sostituire NSApp.mainWindow
con qualsiasi finestra del documento hai intenzione di controllare.
Il modo in cui ho gestito in pre-10.7 (dove né NSApplicationPresentationFullScreen
né NSFullScreenWindowMask
era disponibile) era quello di verificare
if ([mainWindow frame].size.height == [[mainWindow screen] frame].size.height)
{
// window is fullscreen
}
e questo pezzo di veramente vecchio codice sembrano funzionare ancora non solo sul "Leone", ma anche su di oggi - al momento della scrittura 10.14.x -. OS