現在、OS XのOpenGLウィンドウにフルスクリーンビューを追加しています。ユーザーの画面を引き継ぐというアイデアが気に入らないため、OSXの「フルスクリーンモード」を使用していません。
私は独自のカスタムウィンドウクラスを派生させており、そのクラスでセレクターNSWindow
を上書きしました。toggleFullscreen:
- (void)toggleFullScreen:(id)sender
{
_fullscreen = !_fullscreen;
if(_fullscreen) {
NSRect screenRect = [[NSScreen mainScreen] frame];
[self setStyleMask:NSBorderlessWindowMask];
[self setFrame:screenRect display:YES];
[self setLevel:NSMainMenuWindowLevel+1];
[self setOpaque:YES];
[self setHidesOnDeactivate:YES];
} else {
NSRect screenRect = [[NSScreen mainScreen] frame];
unsigned int width = (unsigned int)(screenRect.size.width/2.0f);
unsigned int height = (unsigned int)(screenRect.size.height/2.0f);
NSRect frame = NSMakeRect(0, screenRect.size.height-height, width, height);
[self setStyleMask:NSTitledWindowMask | NSResizableWindowMask];
[self setFrame:frame display:YES];
[self setLevel:NSNormalWindowLevel];
[self setOpaque:YES];
[self setHidesOnDeactivate:NO];
}
}
これはほとんど正しく機能しているようで、フルスクリーンウィンドウ(Appleのドキュメントはこちら)と画面解像度の半分のウィンドウを切り替えます。
問題は、2つのモードを切り替えると、ウィンドウのフォーカスが失われることです。モードを切り替えた直後に使用しているキーボードショートカットを押すと、OSXエラー「ビープ音」が鳴ります。トグルを再度使用する前に、ウィンドウをクリックして「再アクティブ化」する必要があります。
関数にを追加しようとしました[self makeKeyAndOrderFront:nil];
が、問題は解決しません。必要なのは、移行中にウィンドウを「フォーカス」したままにする方法です。その問題を除いて、この方法は完全に機能し、私のに変更を加える必要はありませんNSView
。
編集
関連性があるかどうかはわかりませんが、ペン先からロードするのではなく、プログラムでこのウィンドウを作成しています。