ページ

2008年9月21日日曜日

環境設定(11)

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

プレビューの続き。


まずはマウスカーソルの表示。これは NSCursorから画像を取得して重ね合わせれば良い。

 [frame_image lockFocus];
   :
if ([[UserDefaults valueForKey:UDKEY_MOUSE_CURSOR] boolValue]) {
NSPoint cursor_point = NSMakePoint(50, 60);
[[[NSCursor arrowCursor] image] compositeToPoint:cursor_point operation:NSCompositeSourceOver];
}


マウスカーソルを描きたい NSViewのフォーカスをロックし(lockFocus)、いつものごとく#compositeToPoint:operation:で合成する。

するとこうなる。



次は影付け。NSShadow を使えば簡単にできる。
[NSGraphicsContext saveGraphicsState];          // (*0)

// Window Shadow
if ([[UserDefaults valueForKey:UDKEY_WINDOW_SHADOW] boolValue]) {

NSShadow* shadow = [[NSShadow alloc] init]; // (*1)
[shadow setShadowOffset:NSMakeSize(10.0, -10.0)];
[shadow setShadowBlurRadius:10.0];
[shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.3]];
[shadow set]; // (*2)

}
// Compsite Image
[example_image compositeToPoint:draw_point operation:NSCompositeSourceOver]; // (*3)

[NSGraphicsContext restoreGraphicsState]; // (*4)


NSShadowのインスタンスを作成した後(*1)、set メッセージを投げてやる(*2)。するとこの後の描画には影が自動的に付く様になる。サンプル画像を描画する(*3)。ポイントはNSGraphicsContextの保持(*0)と復帰(*4)を前後に挟むこと。これらが無いと、この後の描画全てに影が付いてしまうことになる。

結果はこんな感じ。


なおサンプルの画像は次のように左上に余白があるもの使う。これは余白が無いと右上と左下の影が切れてしまう為。



最後に背景。下のような画像を用意して合成するだけ。


if ([[UserDefaults valueForKey:UDKEY_BACKGROUND] boolValue]) {
[[NSImage imageNamed:@"output_background"] compositeToPoint:NSZeroPoint operation:NSCompositeSourceOver];
}



するとこうなる。


いい感じだ。