2010-12-23 30 views
1

我得到了一個使用Cairo上下文的paint函數,最終結果應該是一個GtkImage(沒有中間圖像創建)。我試圖用gdk_cairo_create功能,但是這個代碼:如何從Cairo上下文創建GtkImage?

... 
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); 
... 

失敗:

GDK-CRITICAL **:IA__gdk_cairo_create:斷言`GDK_IS_DRAWABLE(繪製)」失敗

同用一個簡單的:

#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; 
} 

我不明白爲什麼這個失敗。任何幫助表示讚賞!

回答

2

GtkImage沒有GdkWindow,所以撥打gtk_widget_get_window()或訪問widget->window返回NULL。您可以將GtkImage置於GtkEventBox中,然後利用事件框的GdkWindow

雖然,它看起來像你正在嘗試(與gdk_pixbuf_new)創建一個空的空間來繪製。在這種情況下,GtkImage不是您想要的小工具 - 請使用GtkDrawingArea。並且不要忘記在event-expose信號的處理程序中調用您的繪圖函數!

+0

謝謝!我剛剛發現,僅僅爲了使Gtk應用程序正常工作而使用現有代碼進行搜索是不夠的。首先嚐試使用官方的[編程手冊](http://developer.gnome.org/doc/GGAD/ggad.html)獲取一些基本知識。 – Zurbo82 2010-12-23 22:27:45