2011年2月6日日曜日

Cocoa ObjC 透明ウィンドウで遊ぶ・その2

AppDelegateのawakeFormNibに、

[window setFrameAutosaveName:@"MainFrame"];

と書いておけばUserDefaultにウィンドウの位置情報を勝手に記憶して、再現してくれることを知る。やってみて首をひねってしまった。

ウィンドウの大きさを次の状態で終了する。

ちょっと縦長にしていおく、と。しかし次回起動時になるとこんなありさまになる。


InterfaceBuilderで設定してある大きさのようだ。というわけでInterfaceBuilderの中をあちこちいじったり探したりしたけれど、それらしい設定はない。変だなあ、ということで、とりあえず、awakeFormNibで一番最初にsetFrameAutosaveNameを書いたところ、期待する動作ができるようになった。順番、関係あるのか?
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
 // Insert code here to initialize your application 
 [window setFrameAutosaveName:@"MainFrame"];
 [window setStyleMask:NSBorderlessWindowMask];
 [window setOpaque:NO];
 [window setBackgroundColor:[NSColor clearColor]];
 [window setMovableByWindowBackground:YES];
 [window makeKeyAndOrderFront:self];
}


さらに起動中のsetOpaque:の変更について。これもあれこれやってみたところ、メインのウィンドウをNSPanalにしておいて、

[window setStyleMask:NSResizableWindowMask | NSUtilityWindowMask ];
に変更した場合、もう一度
    [window setStyleMask:NSBorderlessWindowMask];
    [window setOpaque:NO];
としてもおかしな動作がなかった。うーん、よくわかんない、結果オーライだけど。

半透明なウィンドウをデスクトップのどこかにおいておいて、そこでマウスホイールをころころさせたらworkspaceが切り替わる、という自分用のアプリを書いている。iMacの大画面だと、Warpを使うにもマウスの移動量が大変。だからデスクトップの右下4分の1くらいの領域をworkspace切り替え用に使えればけっこう幸せになるだろう、と。
実はマイクロソフトマウスの第4、第5ボタンに「ctrl+→」とかを割り当てていて、それでworkspaceかえられるのだけれど、今イチ押しづらいんだよなあ。

0 件のコメント:

コメントを投稿