ページ

2008年3月23日日曜日

画面キャプチャその16 - 複数のウィンドウをキャプチャ(6)

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

選択されたウィンドウをハイライトする方法を解説する。

ここでは(2)と(5)のウィンドウが選択されているとする。表示は下のようにしたい。


選択されたウィンドウ毎にマスク処理を施していく。順番は表示順序で一番下から。今回のケースでは(5)から始める。


[1] まずウィンドウの領域をすべてハイライトする。この時点ではハイライトしたくない所も含まれる。


[2] 次にマスクを作成する為に(5)のウィンドウの上に重なっているウィンドウを探す。すると(3)と(4)が見つかる。※(2)も該当するが後でハイライト表示するので今回は無視している。


[3] (3)と(4)のウィンドウ領域を合成した領域を作る。実装コードでは NSBezierPathを使う。


[4] この領域をクリッピングエリアとして指定し、その上で(5)の領域を灰色で塗りつぶす。すると左上のマスクしたい部分だけが塗りつぶされる。これで(5)の見えている部分だけがハイライト表示となった。


[5] 同様にして他の選択されたウィンドウを処理する。(2)の場合は、上に(1)のウィンドウが重なっているので、これを元にしてマスク領域を作り塗りつぶす。


次回は実装コードの解説を行う。