ページ

2008年4月24日木曜日

RubberBand(その9)マウスカーソルの変更

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

続いてはマウスカーソルの変更。マウスがKnobの上に来たら形状を変更する。
マウスカーソルの形状は標準でいくつか用意されている。

NSCursor Class Referenceより。



Setting the Current Cursor によれば、NSView#addCursorRect:cursor を使うと指定した領域にマウスが入ると自動的にカーソルの形状を替えることができる。

[aView addCursorRect:aRect cursor:aCursor];


また、Managing Cursor-Update Events によれば、ウィンドウやビューのサイズ変更のタイミングでNSView#resetCursorRects が自動的に呼ばれるので、この中で #addCursorRect:cursor: を使うのが良いと記述されている。今回もこれに従うことにする。

-(void)resetCursorRects
{
- (void)resetCursorRects
{
[self discardCursorRects];

NSCursor* crosshairCursor = [NSCursor crosshairCursor];
NSCursor* resizeUpDownCursor = [NSCursor resizeUpDownCursor];
NSCursor* resizeLeftRightCursor = [NSCursor resizeLeftRightCursor];

[self addCursorRect:MakeKnobRect(NSMinX(_rect), NSMinY(_rect))
cursor:crosshairCursor];
[self addCursorRect:MakeKnobRect(NSMidX(_rect), NSMinY(_rect))
cursor:resizeUpDownCursor];
[self addCursorRect:MakeKnobRect(NSMaxX(_rect), NSMinY(_rect))
cursor:crosshairCursor];
[self addCursorRect:MakeKnobRect(NSMinX(_rect), NSMidY(_rect))
cursor:resizeLeftRightCursor];
[self addCursorRect:MakeKnobRect(NSMaxX(_rect), NSMidY(_rect))
cursor:resizeLeftRightCursor];
[self addCursorRect:MakeKnobRect(NSMinX(_rect), NSMaxY(_rect))
cursor:crosshairCursor];
[self addCursorRect:MakeKnobRect(NSMidX(_rect), NSMaxY(_rect))
cursor:resizeUpDownCursor];
[self addCursorRect:MakeKnobRect(NSMaxX(_rect), NSMaxY(_rect))
cursor:crosshairCursor];
}
}


RubberBandの拡大縮小や移動ではこのメソッドが自動的に呼ばれないので、自前で呼出すようにする。

なお、自前で呼出す場合は古い位置での登録情報が残ったままになるので NSView#discardCursorRects を最初に呼んでおく。このメソッドで古い登録情報は消される。

RubberBand-6.zip