From: Kentaro F. <fu...@me...> - 2009-02-25 07:54:33
|
現状の GooCanvas では Goo::CanvasItem の subclass で update などのメソッドを Ruby 側で override しても意味がないのをどうにかしようと、PyGooCanvas を眺め ています。 Python バインディングでは PyGObject が GObject のバインディングにまつわる 諸々の面倒を見てくれるようで、コードを書くのは楽になっているようですが追う のは大変。codegen が生成したコードを眺めてやっと理解できましたが、 __GooCanvasItem__interface_init() という関数が CanvasItem のインスタンス生成 をやっていて、その中でインスタンスの update を、_wrap_GooCAnvasItem__proxy_do_update に置き換えるということをしています。このラッパー関数の中で、do_update メソッド (どういう理由か、"update" 名前じゃ駄目らしい) が定義されていたらそっちを呼ぶ、という 仕掛けになっています。 というのがサーベイ結果です。同様の仕組みは Ruby でも実現できそうなので、ちょっと 実験してみようと思います。 ところで、前述のように PyGObject ではバインディングを記述するための様々な ツールを提供していますが、同様の試みは Ruby-gnome2 ではありますでしょうか。 一応こんなの http://trac.novowork.com/rbgtool/wiki は見付けましたが、メンテナンスされていないですね…。 -------------------------------- FUKUCHI kentaro | 福地健太郎 E-mail: fu...@me... Web: http://megaui.net/fukuchi/ |