ロード トップ 参照元 逆検索 検索 ヘルプ

[logo] 覚え書き


このページは、書きかけのものとか そういうテンポラリなものを置くところ。

見てもいいけど... 内容は消えるか 移動するか どちらかになります。


MGLにおけるコンポーネントとは何か

mglsvr の処理

作りたいものは、MGL API をそっくり動かせる 矩形領域ということになるだろう。

mglsvr では、その矩形領域は、フォーカスされたとき キー入力イベントを受け取ることが できるようになってる。これは、コンポーネントでも同じで良い。

大昔のGUI なんかは、フォーカスされたものだけが、実行されるような構造だったり するけども、 mglsvr では、フォーカスされずとも さらには、画面から見えなくとも動ける ... というより 別プロセスだから、動けるようにしないとまずかったわけだ。
画面から見えなくとも動けるというのは、どういうことかと言うと、 offscreen を持っていて、見えなくなるということは、offscreen に切り替わる という構造をしているわけだ。

フォーカスされてなくとも動けるというのは、どういうことかというと 誰も勝手にその画面を触れない .. ということである。
どうしても画面をさわりたかったら、イベントを送って offscreen にしてもらう。 画面上になにかが出ているかも知れないが、それは残像であって、実像ではない。

mglsvr コンポーネントをサポートするということは、この構造は壊さない ということになる。

cmgl でかわること

上のようなルールだけをベースにすれば良いかというと たぶんマズイ。 cmgl で どういう風に変えていくべきだろうか?

たとえば、network から イベントが送られてきたら、それはすみやかに 処理されるべきである。mglsvr でもサポートしていた。

mgterm などでは、そうやって受け取ったものは、画面に出力する。 mglsvr では、VISIBLE,UNVISIBLE の状態をもっていて、UNVISIBLE のときは、 memscreen に切り替わっていて、そこに書くことになる。 また、VISIBLE でフォーカスされてない状態でも、画面はいつでも使える 状態であった。だから、いつ画面を変更しても良い。
その代わり、だれも画面は勝手にさわらない .. そういう設計だったわけである。
こうした理由は、mglsvr では 複数プロセスが parallel で 動いていた。こういう状態が普通だから通常勝手に画面は、触れない。


そういう処理はサポートすべきだろう。ということで、VISIBLE,UNVISBLE という 状態があり、VISIBLE でも フォーカスされた状態があることになった。

それだけで良いかというと ... そうではない。


コンポーネントでも 別プロセスの mgl プログラムを張り付けられるわけだが、 それ以外のものは(実行可能でもその瞬間は)止まっている。
張り付けた mgl プログラムを 止めてでも、画面をさわる..といった方針が 妥当だろう。

これで、VISIBLE の状態が増えた、画面を触って元に戻せばよい状態と 触ってはダメな状態である。これは、フォーカスされている状態と関係ない。
これは、画面を LOCK している状態とそうでない状態ということにする。 画面を LOCK している状態にできるものは、LOCK を外すというメソッドを提供 する必要がある。ちなみに、ここで言うメソッドとは、LOCK を外せというイベントを 受け取ることができるという意味である。このイベントは、特別で溜っていた イベントがあったとしても、それらを追い越すという処理が必要かも知れない。

さて、コンポーネントは普通オーバラップする。親のコンポーネントの中に 子どものコンポーネントを張り付ける ... そういったことはできないといけない。

処理を考える前に、画面に見えるものの状態はどうなっているべき かを整理してみる。

そして、1) 2) は、オーバラップできない。3) の上には 1) もしくは 2) が オーバラップできるが、画面をセーブするという条件が付く。

また、オーバラップされている 3) は、イベントが来てもすぐに実行してはならない。 という条件がある。

さて、こういう条件では、コンポーネントを張り付けたら最後、 張り付けたコンポーネントをどかさない限り 動かせない状態になってしまう。

それでかまわないケースもある。ダイアログとか popup メニューとか である。

それはひとまず置いておいて... 張り付けたときに、その部分は親子で調整する という宣言をしてもらえば、良いのかも知れない。


(最終更新 Thu Mar 30 19:14:07 2006)