β版前最後の機能としてSimpleViewerにドラッグ&ドロップを実装する。SimpleViewer上の画像をつかんでファインダなどの他のアプリへ渡せるようにしよう。
まずはドラッグ開始から。これは NSViewのメソッド NSView#dragImage:at:offset:event:pasteboard:source:slideBack: を使うと簡単にできる。このメソッドを mouseDwon: に実装すればマウスボタンを押した時にドラッグが開始される。
- (void)mouseDown:(NSEvent *)theEvent
{
[self dragImage:dragged_image
at:NSMakePoint(0, 0)
offset:NSZeroSize
event:theEvent
pasteboard:pboard
source:self
slideBack:YES];
}
dragged_image にはとりあえず表示中の画像をそのまま渡しておく。
こんな感じ。
なお SimpleViewer(NSPanel)はデフォルトでウィンドウのドラッグ移動が有効になっているので、今回のドラッグと動作がバッティングしてうまくいかない。画像のドラッグが始まると同時にウィンドウの移動が行われてしまる。そこでNSWindow#setMovableByWindowBackground:を使いドラッグ時ウィンドウ移動の動作を切っておく。
SimpleViewerPanel.m
[self setMovableByWindowBackground:NO];
ただこれはこれで不便だ。もう一工夫必要だな。