2011年3月1日火曜日

メモ:NSBorderlessWindowMask設定のNSWindowにあるQCViewにキーイベントを送る

動機
未来派図画工作さんのTwitter(zuga)紹介されていたこちらのプロジェクトで遊んでみてた(感謝).
Keyboardパッチを利用したqtzを入れたところイベントがとれないみたいだった.
そういう使い方は想定されていないプロジェクトなんだと思うが,ちょっとやりたいことがあったので調べてみた.

調べてみた
調べてみるとNSWindowのスタイルをNSBorderlessWindowMaskにするとキーイベントがとれなくなるということがわかった.
これを回避するにはNSWindowのsubclassで"- (BOOL)canBecomeKeyWindow"の返り値をYESにすればよいそうだ.

やってみた
しかしこれだけでは私の環境ではQCView内のqtzへはイベントが送られていないようだった.
とりあえずmakeFirstResponderでqcViewを指定してあげたら反応してくれました.

で,出来たコードがこちら(説明のママだけど一応).
MyWindow.h
#import <Cocoa/Cocoa.h>
@interface MyWindow : NSWindow {
}
@end

MyWindow.m
#import "MyWindow.h"
@implementation MyWindow
- (BOOL)canBecomeKeyWindow
{
return YES;
}
@end

MainMenu.xibでやること
Windowを選択し,インスペクタのIdentityタブにあるClassをMyWindowにする.
Saveを忘れずに.

QC_FullscreenAppDelegate.m をチョコット編集
#import "QC_FullscreenAppDelegate.h"
@implementation QC_FullscreenAppDelegate

-(void)fullscreen{

[window makeFirstResponder:qcView];
}
@end



なんのひねりもないですが,メモとしてPOST.

0 件のコメント: