Bonjour.

Je reviens à la charge . Étant toujours dans le défrichage de Cairo je me heurte à un problème.

J'ai écrit un petit programme test tout simple. Une fenêtre dans laquelle j'insère un GtkDrawingArea. Dans le Callback associé au signal "expose" je triture un peu les fonctions Cairo.
Jusque là je suis arrivé à dessiner un rectangle de la couleur de mon choix. Vous me direz, ce n'est pas grand chose, mais pour moi ca veut dire beaucoup . Heuu, il me semble que c'est une chanson ca! Enfin bref, j'avance.

L'étape suivante est d'accéder directement aux données de la surface. Ben oui, dessiner des rectangles c'est bien joli mais c'est tout de même un peu limite. Et c'est là que j'accroche. Je récupère la surface de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
gboolean expose (GtkWidget *widget, GdkEventExpose *event, gpointer user_data)
{
  cairo_t *context = NULL;
  cairo_surface_t *surface=NULL;
 
  // Récupération de la surface
  context = gdk_cairo_create (widget->window);
  surface = cairo_get_target (context);
  ...
La fonction cairo_surface_status (surface) me renvoie bien CAIRO_STATUS_SUCCESS. Donc la surface est valide. Malheureusement lorsque je veux récupérer le buffer la fonction cairo_image_surface_get_data (surface); me renvoie NULL.
J'ai ajouté un test sur le GtkDrawingArea pour être sûr qu'il soit initialisé avec toute modification mais rien n'y fait. Je lance donc une bouteille à la mer...