2010-12-23 4 views
1

J'ai obtenu une fonction de peinture qui fonctionne en utilisant un contexte de Caire et le résultat final devrait être un GtkImage (sans création d'image intermédiaire). J'ai essayé d'utiliser la fonction gdk_cairo_create, mais ce code:Comment créer une image GtkImage à partir d'un contexte Cairo?

... 
GdkPixbuf *pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, 22, 22); 
GtkWidget *image = gtk_image_new_from_pixbuf (pixbuf); 
GdkDrawable *drawable = image->window; 
cairo_t *ctx = gdk_cairo_create (drawable); 
my_cairo_paint_function (ctx); 
... 

échoue avec:

Gdk CRITIQUES **: IA__gdk_cairo_create: affirmation `GDK_IS_DRAWABLE (étirables) » n'a pas pu

même avec un simple:

#include <gtk/gtk.h> 
#include <cairo.h> 

int 
main (int argc, char *argv[]) 
{ 
    gtk_init(&argc, &argv); 
    cairo_t *ctx = gdk_cairo_create (gtk_widget_get_window (gtk_image_new_from_file ("foobar.png"))); 
    gtk_main(); 
    return 0; 
} 

Je ne comprends pas pourquoi cela échoue. Toute aide est appréciée!

Répondre

2

GtkImage n'a pas GdkWindow, donc l'appel à gtk_widget_get_window() ou l'accès des widget->window retours NULL. Vous pouvez mettre le GtkImage dans un GtkEventBox et dessiner sur le GdkWindow de la boîte d'événement.

Cependant, il semble que vous essayez (avec gdk_pixbuf_new) de créer un espace vide sur lequel dessiner. Dans ce cas, GtkImage n'est pas le widget que vous voulez - utilisez GtkDrawingArea. Et n'oubliez pas d'appeler votre fonction de peinture dans le gestionnaire pour le signal event-expose!

+0

Merci! Je viens de découvrir à la dure qu'il ne suffit pas de google autour du code existant pour faire fonctionner les applications Gtk. J'essaierai d'acquérir des connaissances de base en utilisant le [manuel de programmation] officiel (http://developer.gnome.org/doc/GGAD/ggad.html). – Zurbo82

+1

Ce manuel est vraiment vieux. Comme vous pouvez le voir sur la page d'accueil de http://developer.gnome.org, ils travaillent sur un nouveau site de développement. Il est supposé qu'il y ait de nouveaux exemples de programmation programmés par des personnes compétentes dans ce dépôt: http://git.gnome.org/browse/gnome-devel-docs/tree/demos/C Ceux-ci vont aller sur le nouveau site, mais Je ne les ai pas encore vraiment regardés, donc je ne peux pas dire jusqu'où ils sont. – ptomato

Questions connexes