|
From: Kouhei S. <ko...@co...> - 2013-05-12 09:14:16
|
須藤です。 In <201...@fu...> "[ruby-gnome2-devel-ja] Clutter::Colorのクラスメソッド定義がおかしい?" on Sun, 12 May 2013 01:51:55 +0900, Kentaro Fukuchi <ke...@fu...> wrote: > clutter-color.c では、from_hls や from_string という関数が定義されています。 > > void clutter_color_from_string(ClutterColor *color, const gchar *str) > > この第一引数には out 属性が付与されており、caller-allocates として処理 > されています。実際、gir を見るとメソッドではなく関数として定義されて > います。 おぉ。。。 GObject Introspection 1.36だとそうなるんですね。。。 1.32のときはメソッドになっていたのです。 > ところが何が悪いのか、Ruby 側では Clutter::Color.from_string() は引数 > を String 一つのみ要求しており、上記定義とは異なっています。 > この from_string に適当な文字列(例: "rgba(0, 0, 0, 0)")を与えると > Segmentation Fault を引き起こします。同様の問題が from_hls の方でも > 起きています。 > > Ruby での Gobject introspection の扱いがよくわかっていないのですが、 > 第一引数が、クラスメソッドが定義されているクラスと同じクラスで、 > かつ caller-allocates の時に、なにか問題が起きているのではないで > しょうか。 gitの方でout caller-allocatesに対応しておきました! > #私としては from_* みたいなクラスメソッドは clutter 側で、callee-allocates > #で実装するのがこの場合の筋だとは思いますが。 ソースは見てないんですが、挙動だけみると、構造体のときはout もout caller-allocatesも同じように扱っているみたいでした。 > また、上記以外で、サンプルが動かなかったものについて修正を試みた > ものがあります。 > > https://github.com/fukuchi/ruby-gnome2/commit/6628e038891d9a77832c47ddc93c52c8ef5a2d4c#clutter/sample/canvas.rb > https://github.com/fukuchi/ruby-gnome2/commit/9655f1e60f23e3bf8080007c700ba542f4d954cb#clutter/sample/drop-action.rb ありがとうございます! 少し変えたりして取り込んでおきました! |