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 :
Voici ma source d'affichage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Partager