Problème d'affichage GDK et Pixbuf
Je code un projet sous GTK/GDK. Je souhaite afficher une image de fond sur laquelle je dessine. Je souhaite produire également une animation.
Pour cela j'ai crée une pixmap que je réactualise en permanence dans un drawing area. je dessine sur ma pixmap et je produit une animation sans soucis.
Mais quand je charge mon image de fond depuis un fichier dans un pixbuf, puis dans la pixmap avec un gdk_draw_pixbuf. J'obtiens bien le résultat souhaité dans mon drawingarea mais le reste de ma fenetre GTK plante, notamment ma barre de menu qui ne s'affiche plus et qui est transparente.
Que faire ?
Voici ma source de dessin de mon image :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| static void draw_image (GtkWidget *widget, gdouble x, gdouble y, gdouble w, gdouble h)
{
GdkPixbuf *image_carte=NULL;
GtkWidget* image;
GdkGC* gc;
gc = gdk_gc_new (widget->window);
image_carte=gdk_pixbuf_new_from_file("images/carte.png", NULL);
gdk_draw_pixbuf(pixmap,
gc,
image_carte,
x,
y,
x,
y,
w,
h,
GDK_RGB_DITHER_MAX,
0,
0);
g_object_unref (gc);
gdk_pixbuf_unref(image_carte);
} |
Voici ma source d'affichage :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| gboolean affichage(gpointer * d)
{
// ADV + init
DATA * data=(DATA*) d;
// je dessine mon image de fond
draw_image (data->plan, 0, 0, 500,500);
// Je dessine ici un caré pour faire une animation
draw_rect (data->plan, data->perso->pos_x, data->perso->pos_y, 5,5,65535, 0, 0);
GdkRectangle update_rect;
update_rect.x = 0;
update_rect.y = 0;
update_rect.width = 500;
update_rect.height = 500;
gtk_widget_draw (data->plan, &update_rect);
return TRUE;
} |