The Drawing Model @ HIView Programming Guide
ちょっと脱線。
The Coordinate System @ HIView Programming GuideQuartzって左下隅が原点とのこと。びっくり。混乱を避けるための救済措置はあるが。
Drawing in Views @ HIView Programming Guide
ToolBox API徒然草(2004/01/16)
和訳っぽいものを発見。出所が不明だが。
また、Viewベースのコントロールが旧コントロールと大きく違う点は、それがウィンド
ウと関連付けず単独で定義できることです。当然、この場合に表示はなされていません
が、カット&ペースト処理などで、単独オブジェクトとして別ウィンドウに移動させるよ
うな処理が簡単にできます。
へ~~。ControlにParent Windowがないってこと??nonownedwnd.cppってそのためにあるのか?
Composite WIndowではEventWindowUpdateやkEventWIndowDrawがこないらしい。
今回用があるのは次の箇所。前出のThe Drawing Modelの和訳に相当するようです。反が違うので内容が違う部分もありますが、大筋では同じです。
ウィンドウ上にHIViewベースでのコントロールを描画する場合には、そのウィンドウが
コンポジット(合成)モードである必要があります。そうでないと、すべてのコントロー
ルに対して旧Control Managerベースの描画が採用されます。コンポジットウィンドウ
でのViewの描画順序は、同じ階層での順序情報により決まり、描画時のα値(透明度)
も正しく認識されます。その結果として、描画におけるコントロールの重なり具合も美し
く再現されます。コンポジットウィンドウにおけるViewの再描画については、Carbon
Event Handlerを用意し、イベントクラスがkEventClassControlで、そのイベント種類
がkEventControlDrawのCarbon Eventを受け取った時に実行するようにします。
旧WaitNextEvent()ループによるアップデートイベント時の再描画や、Carbon Eventの
EventWindowUpdateやkEventWindowDrawを受け取ったことを認知しての再描画は
行えませんので注意してください。なぜなら、コンポジットウィンドウでは、そうしたイ
ベントは発生しないからです。もし直ちにViewの再描画を行いたい場合には、目的に応
じたAPIを用いて「再描画領域」を記録させます。例えば、HIViewSetNeedsDisplay()や
HIViewSetNeedsDisplayInRegion()などです。また、Mac OS X 10.4以降では
HIViewSetNeedsDisplayInRect()やHIViewSetNeedsDisplayInShape()なども利用する
ことができます。この時の再描画は、RunApplicationEventLoop()やWaitNextEvent()
で実行されているイベントループの処理タイミングに依存します。もし、イベントループ
に依存せず、直ちにViewの再描画を行いたい場合には、Mac OS X 10.3以降で利用でき
るHIViewRender()を用います。
2008年4月23日水曜日
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿