« Window 抽象化機構 | メイン | Extension »

2014年01月29日

吉里吉里Z 開発:: Layer Tree Owner

    

Window 抽象化機構 として、前回書いたものです。
より分かりやすい名前ということで、Layer Tree Owner としました。
今まで Layer は必ず Window が保有し、Window オブジェクトを指定しないと、Layer クラスを生成できなかったものを、Layer Tree Owner Intarface を実装するクラスであれば、Layer を保有できるような構造を入れました。
iTVPLayerTreeOwner を実装し、layerTreeOwnerInterface プロパティでそのインターフェイスのポインタを返すことで、Layer Tree Owner となります。
LayerManager/Layer から呼び出されるメソッドの実装は必須ですが、LayerManager へイベントを伝えるメソッドの実装は自由になっています。
まずは、Layer Tree Owner Intarface を実装したクラスとして、Window 以外に BitmapLayerTreeOwner クラスを追加しました。
BitmapLayerTreeOwner は、描画を Bitmap に行うクラスです。
そのままでは画面などには描画されないので、画面に描画したい時は画像更新イベントを受けたら Layer にコピーするなどする必要があります。
ただ、性質上ツールなど用で Window ではなくファイルに保存するなどしたい場合に使えると思います。
BitmapLayerTreeOwner は以下のメソッドを実装しています。

class BitmapLayerTreeOwner {
// functions
function BitmapLayerTreeOwner()
function fireClick( x, y )
function fireDoubleClick( x, y )
function fireMouseDown( x, y, mb, flags )
function fireMouseUp( x, y, mb, flags )
function fireMouseMove( x, y, flags )
function fireMouseWheel( shift, delta, x, y )
function fireReleaseCapture()
function fireMouseOutOfWindow()
function fireTouchDown( x, y, cx, cy, id )
function fireTouchUp( x, y, cx, cy, id )
function fireTouchMove( x, y, cx, cy, id )
function fireTouchScaling( startdist, curdist, cx, cy, flag )
function fireTouchRotate( startangle, curangle, dist, cx, cy, flag )
function fireMultiTouch()
function fireKeyDown( key, shift )
function fireKeyUp( key, shift )
function fireKeyPress( key)
function fireDisplayRotate( orientation, rotate, bpp, hresolution, vresolution )
function fireRecheckInputState()

// events
function onSetMouseCursor( cursor )
function onGetCursorPos( x, y )
function onSetCursorPos( x, y )
function onReleaseMouseCapture()
function onSetHintText( sender, hint )
function onResizeLayer( w, h )
function onChangeLayerImage()
function onSetAttentionPoint( layer, x, y )
function onDisableAttentionPoint()
function onSetImeMode( mode )
function onResetImeMode()

// properties
property width r
property height r
property bitmap r
property layerTreeOwnerInterface r for internal
property focusedLayer
property primaryLayer r
}

通常とメソッド/イベントが逆になっていることに注意。
LayerManager から呼ばれるものが on~とイベントになっていて、LayerManager へイベントで通知するものがfire~となっている。

現在のところ、この機能は dev_layer_tree_owner ブランチに入れています。

このインターフェイスで、複数のプライマリーレイヤーをより自然な形で実装しやすくなります。
今までは、1つの DrawDevice に複数の LayerManager がつながる形で少しやっかいでしたが、Layer Tree Owner では、DrawDevice に任意ノードを追加し、そのノードを Layer Tree Owner とすることで、複数のレイヤーツリーをノードに分離して、管理できます。
BitmapLayerTreeOwner 以外に、複数のレイヤーツリーを作ることの出来る DrawDevice は実装予定です。



投稿者 Takenori : 2014年01月29日 23:06




comments powered by Disqus
Total : Today : Yesterday : なかのひと