ページ

2008年4月25日金曜日

RubberBand(その10)枠線を点線に

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

画像を背景に配置して、実際の使用感を確かめてみよう。


悪くは無いが少し手を加えてみる。Preview.app 風に灰色と白の点線でどうだろうか。


これにしよう。


ソース:RubberBand-7.zip

点線の描画には NSBezierPath を使う。

 CGFloat dasharray[] = {3.0, 3.0};
NSBezierPath* path = [NSBezierPath bezierPath];
[path appendBezierPathWithRect:_rect];
[path setLineWidth:0.5];

[[NSColor grayColor] set];
[path setLineDash:dasharray count:2 phase:0.0];
[path stroke];

[[NSColor whiteColor] set];
[path setLineDash:dasharray count:2 phase:3.0];
[path stroke];


NSBezierPath#setLineDash:count:phase: を使うと簡単に描ける。
最初に渡す配列は描画と非描画のドットパターンを表す。例えば今回の {3.0, 3.0}は下のようなパターンを表す。最後の phaseはどっとパターンを何ドット目から開始するかを指定する(一種オフセットのようなもの)。

同じドットパターンで phase だけづらして描けば今回のような白と灰色の点線になる。

なおそのまま描画するとアンチエイリアスが効いてしまい線がぼやけてしまう。


そこで NSBezierPath#setShouldAntialias: を使い一時的にアンチエイリアスを切ってやる。
 NSGraphicsContext *gc = [NSGraphicsContext currentContext];
[gc saveGraphicsState];
[gc setShouldAntialias:NO];
:
(線の描画)
:
[gc restoreGraphicsState];


するとくっきりした線が描ける。