2012-03-13 6 views
0

古いクラッタコードでキャストを並べ替える際に問題が発生しました。それは、このようなコードを持っていますGTKクラッタテクスチャと通常のクラッタテクスチャをキャストする

static void image_init(CtkImage *image) 
{ 
    priv->texture = clutter_texture_new(); 
    ... 
} 

static void refresh_icon (CtkImage *image) 
{ 
    CtkImagePrivate *priv = image->priv; 
    gtk_clutter_texture_set_from_pixbuf (CLUTTER_TEXTURE (priv->texture), priv->pixbuf, NULL); 
} 

これは、これは時間のコンパイルエラー生成します。

error: passing argument 1 of ‘gtk_clutter_texture_set_from_pixbuf’ from incompatible pointer type [-Werror] 
/usr/include/clutter-gtk-1.0/clutter-gtk/gtk-clutter-texture.h:99:17: note: expected ‘struct GtkClutterTexture *’ but argument is of type ‘struct ClutterTexture *’ 

私は、これはコンパイルん、私はGTK_CLUTTER_TEXTUREを使って、それを修正することができると思ったが、実行時エラーと不足しています

に結果の
gtk_clutter_texture_set_from_pixbuf (GTK_CLUTTER_TEXTURE (texture), tiled, NULL); 

GLib-GObject-WARNING **: invalid cast from `ClutterTexture' to `GtkClutterTexture' 

Clutter-Gtk-CRITICAL **: gtk_clutter_texture_set_from_pixbuf: assertion `GTK_CLUTTER_IS_TEXTURE (texture)' failed 
pixbufsの

何が起こっているのですか?なぜこれが失敗しますか?どのようにデバッグすることができますか?

答えて

0

初期化されていないGtkClutterTexture *ポインタを関数に渡していますが、これにはゴミだけが含まれています。あなたはgtk_clutter_texture_new()を使ってGtkClutterTextureオブジェクトを作成してから、pixbufでそれを塗りつぶす必要があります。

編集: 更新された例では、clutter_texture_new()があります。これはgtk_clutter_texture_new()と同じではないため、GTK_CLUTTER_TEXTURE()でキャストしようとすると、キャストしようとしないタイプにキャストしようとすると、ランタイム警告が生成されます。

+0

私は例のコード(謝罪)でそれを示していませんでしたが、私たちはgtk_clutter_texture_newを持っています。私はこの例を複雑にしたくないので、プライベートオブジェクトに添付されています。私はそれを更新しました。 –

1

GtkClutterTextureはClutterTextureのサブクラスです。これは、すべての関数がClutterTextureを受け付けるときにGtkClutterTextureを使うことができることを意味しますが、GtkClutterTextureを取るメソッドではClutterTextureを使うことはできません。

この例では、clutter_texture_new()を使用してテクスチャを作成し、そのポインタをgtk_clutter_texture_set_from_pixbuf()に渡します。あなたはGtkClutterTextureを作成するか、あなたのような何か使用して、GdkPixbufのから画像データを設定するclutter_texture_set_from_rgb_data()関数を使用します。

clutter_texture_set_from_rgb_data (CLUTTER_TEXTURE (texture), 
            gdk_pixbuf_get_pixels (pixbuf), 
            gdk_pixbuf_get_has_alpha (pixbuf), 
            gdk_pixbuf_get_width (pixbuf), 
            gdk_pixbuf_get_height (pixbuf), 
            gdk_pixbuf_get_rowstride (pixbuf), 
            gdk_pixbuf_get_has_alpha (pixbuf) ? 4 : 3, 
            CLUTTER_TEXTURE_NONE, 
            &gerror); 

GtkClutterTexture.set_from_pixbuf()はまったく同じものです。

関連する問題