まずはxcatsan師匠の教えの通りにやってみる。
実験用プロジェクトをつくり、Viewに単純な四角を黒でぬりつぶす。
NSRect rect=NSMakeRect(100, 100, 100, 200); NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:rect xRadius:2 yRadius:2]; [[NSColor colorWithDeviceRed:0.0 green:0.0 blue:0.0 alpha:1.0] set]; [path fill];これで次のようになる。
この四角をグラデーションで塗りつぶす。
NSArray* colorArray = [NSArray arrayWithObjects: [NSColor colorWithDeviceWhite:1.0 alpha:1.0], [NSColor colorWithDeviceWhite:0.8 alpha:1.0], [NSColor colorWithDeviceWhite:0.4 alpha:1.0], [NSColor colorWithDeviceWhite:0.1 alpha:1.0], [NSColor colorWithDeviceWhite:0.0 alpha:1.0], nil]; NSGradient* gradient = [[NSGradient alloc] initWithColors:colorArray]; [gradient drawInBezierPath:path angle:270];
これは5階調もつけてしまった例。こんなにたくさん階調をつけなくてもそれらしくなる、ということが実験でわかったので、あとあと3階調に減らしている。しかし、簡単だなあ。NSColorの配列を渡してinitするだけでいいのか。drawInBezierPathしているけど、drawInRectの方が単純でいいのかな。
5階調のまま半透明なウィンドウ&Viewの上に描画してみる。
これを3階調に減らしてみる。
なるほど、これならすぐにSpinに組み込んでも大丈夫だろうということで、SpinのSpacesViewの描画部分に入れてみる。
現在activeなWorkspaceだけalphaが1.0でくどいので、alphaを落としてみる。
さらにグレイから黒へのグラデーションでに変更。
Spinへの組み込みはこんな感じのソースにしてある。
-(NSArray *)setColorArray:(BOOL)state{ float alha; if (state==YES) alha=0.8; else alha=0.5; NSArray* colorArray = [NSArray arrayWithObjects: [NSColor colorWithDeviceWhite:0.4 alpha:alha], [NSColor colorWithDeviceWhite:0.1 alpha:alha], [NSColor colorWithDeviceWhite:0.0 alpha:alha], nil]; return colorArray; } - (void)drawRect:(NSRect)dirtyRect { NSBezierPath* path = [NSBezierPath bezierPathWithRoundedRect:[self bounds] xRadius:5 yRadius:5]; NSArray* colorArray; if ([self active]==YES) { colorArray = [self setColorArray:YES]; } else{ colorArray = [self setColorArray:NO]; } NSGradient* gradient = [[NSGradient alloc] initWithColors:colorArray]; [gradient drawInBezierPath:path angle:270]; }見て目についてはもう少し研究したい。
0 件のコメント:
コメントを投稿