From: Masao M. <mu...@hi...> - 2004-02-22 17:15:05
|
むとうです。 以前、直すと宣言していたものの中で、以下の件に ついて対応しました。 On Wed, 31 Dec 2003 04:46:29 +0900 Masao Mutoh <mu...@hi...> wrote: > ■ GDKのFactory関連 > GDKでは、実装がWin32の時やX11の時でそれぞれ別々のGTypeを > 持ちます。 > で、実は、いくつかのGdk関連のクラスで現在問題になっている > のですが、Ruby側から登録されていないGTypeがあるために、 > 無名クラスとして値が返されるメソッドが結構あったりして > そのままでは使えない状態になっています。 > たとえば、Gdk::Screen.defaultなど。 > > で、以下の2つの対応方法を考えてみました。 > > 1. GdkGCX11やGdkGCWin32はGdk::GCとして見えるようにする > 2. GdkGCX11はGdk::GCX11に、GdkGCWin32はGdk::GCWin32にする > > 1.の場合、GOBJ2RVAL2(val, gtype)というのを作って明示的にRuby化 > されるときのクラスを決定してしまう、という比較的安易な対応が > できると思います。 > > 2.の場合、すべて手作業でG_DEF_CLASSをするという手もありますが > 結構面倒くさいかなーと。 > プラッガブルに追加されるようなものを想定すると、 > 自動でクラスとgtypeのマッピングを生成するようなことを考える > 必要がありますが、タイミング的にそれはちと難しいかなぁと > 思っています。 > > 実装の問題は置いておいて、本来どっちであるべきかというのも > 実は悩ましいです。 > > GTK+は一つの環境には基本的に1つの実装(X11 or Win32 or linuxfb) > がインストールされると思うのですが、その場合、rbbrなどで見たときに > すべてのGdkクラス群が1つのサブクラス(というか実体)を持つという > 感じになるのがちょっと冗長かな、と。 > ドキュメント書くのも面倒くさいし(ホンネ)。 > > あー、でもここまで書いてきて思ったのですが、 > やっぱり2の方が良さそうだなぁ。手動でもそんなに数が多いわけでも > ないし。 結局、2.の案を採用しました。 具体的には、 G_DEF_CLASS3(gtype_name, ruby_name, module); というのを用意しました。 G_DEF_CLASS3("GdkScreenX11", "ScreenX11", Gdk); のように使います。 これで、Gdk::Screen.defaultを呼び出すとClassの代わりにGdk::ScreenX11 が呼び出されるようになり、その後はGdk::ScreenX11を使うことができます。 glibに手を入れましたので、内容についてご確認ください>さかいさん #ちょっと遅くなるかなぁ、と思ったのですが...まぁなんとかいけそうです(主観)。 > ■ Ruby/ATKの実装 > これ、もう少しで終わります...。 ほぼ、終わりました。ATKに関してはこのまま1.0にしても良いかな。 -- .:% Masao Mutoh<mu...@hi...> |