2 using System.Collections.Generic;
3 using System.Diagnostics;
11 /// 子リストに Activity を登録すると、活性化・非活性化・デバイス依存リソースの生成・解放が、親と連動するようになる。
14 /// 子リストには静的・動的の2種類があり、それぞれ以下のように使い分ける。
16 /// (A) メンバとして定義する静的な子の場合:
17 /// ・子Activity の生成と子リストへの追加は、親Activity のコンストラクタで行う。
20 /// (B) 活性化時に生成する動的な子の場合:
21 /// ・子Activity の生成と子リストへの追加は、親Activity の On活性化() で行う。
22 /// ・子リストからの削除は、親Activity の On非活性化() で行う。
25 public List<Activity> 子リスト { get; } = new List<Activity>();
27 public bool 活性化している { get; private set; } = false; // 派生クラスからも設定は禁止。
30 get { return !this.活性化している; }
31 private set { this.活性化している = !value; } // 派生クラスからも設定は禁止。
33 public bool デバイス依存リソースが生成されている { get; private set; } = false; // 派生クラスからも設定は禁止。
34 public bool デバイス依存リソースが生成されていない
36 get { return !this.デバイス依存リソースが生成されている; }
37 private set { this.デバイス依存リソースが生成されている = !value; } // 派生クラスからも設定は禁止。
41 /// この Activity を初期化し、進行や描画を行える状態にする。
42 /// これにはデバイス依存リソースの作成も含まれる。
44 public void 活性化する( FDK.メディア.デバイスリソース dr )
46 Debug.Assert( this.活性化していない );
52 // (2) 自分のデバイス依存リソースを作成する。
53 this.デバイス依存リソースを作成する( dr, 子へ再帰する: false ); // 自分だけ。
55 // (3) すべての子Activityを活性化し、デバイス依存リソースを作成する。
56 foreach( var child in this.子リスト )
57 child.活性化する( dr ); // この中でデバイス依存リソースが作成される。
61 /// この Activity を終了し、進行や描画を行わない状態に戻す。
62 /// これにはデバイス依存リソースの解放も含まれる。
64 public void 非活性化する( FDK.メディア.デバイスリソース dr )
66 Debug.Assert( this.活性化している );
68 // (1) すべての子Activityのデバイス依存リソースを解放し、非活性化する。
69 foreach( var child in this.子リスト )
70 child.非活性化する( dr ); // この中でデバイス依存リソースも解放される。
72 // (2) 自分のデバイス依存リソースを解放する。
73 this.デバイス依存リソースを解放する( dr, 子へ再帰する: false ); // 自分だけ。
81 /// デバイスに依存するリソースを作成する。
84 /// 活性化時だけではなく、活性化している最中はいつでも
85 /// (デバイスが再構築またはリサイズされた 後 に)呼び出される可能性がある。
87 public void デバイス依存リソースを作成する( FDK.メディア.デバイスリソース dr, bool 子へ再帰する = true )
89 Debug.Assert( this.活性化している );
90 Debug.Assert( this.デバイス依存リソースが生成されていない ); // 多重呼び出しは NG。
92 // (1) 自分のデバイス依存リソースを生成する。
93 this.Onデバイス依存リソースの作成( dr );
94 this.デバイス依存リソースが生成されている = true;
98 // (2) すべての子Activityのデバイス依存リソースを生成する。
99 foreach( var child in this.子リスト )
100 child.デバイス依存リソースを作成する( dr, 子へ再帰する );
105 /// デバイスに依存するリソースを解放する。
108 /// 非活性化時だけではなく、活性化している最中はいつでも
109 /// (デバイスが再構築またはリサイズされる 前 に)呼び出される可能性がある。
111 public void デバイス依存リソースを解放する( FDK.メディア.デバイスリソース dr, bool 子へ再帰する = true )
113 Debug.Assert( this.活性化している );
114 Debug.Assert( this.デバイス依存リソースが生成されている ); // 多重呼び出しは NG。
118 // (1) すべての子Activityのデバイス依存リソースを解放する。
119 foreach( var child in this.子リスト )
120 child.デバイス依存リソースを解放する( dr, 子へ再帰する );
123 // (2) 自分のデバイス依存リソースを解放する。
124 this.Onデバイス依存リソースの解放( dr );
125 this.デバイス依存リソースが生成されていない = true;
128 /* public void 進行描画する( FDK.メディア.デバイスリソース dr )
130 // このクラスでは、進行描画用の共通メソッドは定義しない。
131 // (派生クラスにより引数がいろいろ変わるので、共通して定義する意味が薄い。)
135 // 活性化していないときに呼び出しがあるならコーディングミス。
136 Debug.Assert( this.活性化していない );
138 // デバイス依存リソースが使えないなら何もしない(デバイス再構築またはリサイズ中)。
139 if( this.デバイス依存リソースが解放済みである )
144 // 以下、派生クラスでオーバーライドするもの。
146 protected virtual void On活性化( FDK.メディア.デバイスリソース dr )
149 protected virtual void On非活性化( FDK.メディア.デバイスリソース dr )
152 protected virtual void Onデバイス依存リソースの作成( FDK.メディア.デバイスリソース dr )
155 protected virtual void Onデバイス依存リソースの解放( FDK.メディア.デバイスリソース dr )