プレビューの続き。
まずはマウスカーソルの表示。これは 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];
}
するとこうなる。
いい感じだ。