発振器の選択枠が表示されない
2008.1.28
Leopardで発振器の選択枠が消去されてしまう
表示されないというより、表示したものが消されてしまうと言った方が正確です。一瞬だけちらっと見えるので、描いてはいるのに消されてしまうようなのです。
Leopardでは表示システムが変更されたのでしょうか?
注)この絵は選択枠がきちんと表示されている対策後の状態です
drawRect:での描画方法
drawRect:では選択枠を描く際に、自分のフレーム外に描くために一時的にフレームを拡げるという事をやっていますが、それがいけないのかもしれません。昔はこれでよかったんですけどね。
ソースはこんな感じです。
- (void)drawRect:(NSRect)rect
{
NSRect bounds,frame,savedFrame;
NSBezierPath *borderPath;
if(enabled)
[[NSColor blackColor] set];
else
[[NSColor grayColor] set];
borderPath = [NSBezierPath bezierPathWithRect:[self bounds]];
[borderPath stroke];
if(![self inLiveResize])
{
if(enabled) [arrangedWaveform stroke];
savedFrame = [self frame];
frame = NSInsetRect(savedFrame,-3,-3);
[self setFrame:frame];
bounds = [self bounds];
bounds = NSInsetRect(bounds,1,1);
borderPath = [NSBezierPath bezierPathWithRect:bounds];
[borderPath setLineWidth:2];
if(showBorder && enabled)
[[NSColor blackColor] set];
else
[[NSColor windowBackgroundColor] set];
[borderPath stroke];
[self setFrame:savedFrame];
}
}
内側に描いてみる
外に描いてはダメというなら、内側に描くしかないかと思って試してみたのですが、こうすると他のビューと大きさが不揃いになってしまいます。大きさをそろえるために本来いじる必要のない他のビューまで手を付けるのは気が進みません。
またレイアウトが崩れるので、ビューを並べているコードまで修正が必要になってきてしまいます。
領土を主張する
このメソッドで自分の領土を主張してみたところ、何とうまくいってしまいました。これが正しい方法なのかどうかはわかりませんが、drawRect:メソッドを変更せずに対応できるのはありがたいので採用する事にしました。
2ピクセルというのは試行錯誤で決めた値です。3だと隣を浸食してしまうらしく、たまに選択枠が削られてしまう事がありました。
- (NSRect)visibleRect
{
return NSInsetRect([self bounds],-2,-2);
}
HOME
前のページへ