ページ

2010年1月2日土曜日

NSBezierPath を使ったマスキング(クリッピング)

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

-[NSBezierPath setClip:] を使うとちょっとしたマスキングが行える。
例えばこんなマスク。


上の図は描画エリア(クリッピングエリア)を赤く描画したもの。

これを使うとこんな絵が描ける。



1番目のマスクは角丸の NSBezierPath を作り setClip: を呼ぶだけ。2番目は角丸の NSBezierPath に一回り大きい矩形の範囲を -[appendBezierPathWithRect:] で追加した後、-[setWindingRule:] に NSEventOddWindingRule を指定して中抜きするようにする。
(例)

[path22 appendBezierPathWithRect:baseFrame22];
[path22 setWindingRule:NSEvenOddWindingRule];


その上で -[setClip:] を呼ぶとそれ以降の描画がフチの部分だけに限定される。つまり中の部分がマスキングされる。


サンプルのソースコードは GitHub からどうぞ。
NSBezierPathSpecialClip at master from xcatsan's SampleCode - GitHub

ビルドして実行すると下記のウィンドウが出る。