2010-12-23 4 views
1

저는 카이로 컨텍스트를 사용하여 작동하는 페인트 함수를 얻었고 최종 결과는 중간 이미지 생성없이 GtkImage 여야합니다. '주장'GDK_IS_DRAWABLE (당김)카이로 컨텍스트에서 GtkImage를 만드는 방법은 무엇입니까?

같은 실패

GDK-CRITICAL ** : IA__gdk_cairo_create

... 
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_cairo_create 기능을하지만,이 코드를 사용하려고 간단하게 :

#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에는 gtk_widget_get_window() 또는 widget->window에 대한 호출이 NULL을 반환합니다. GtkImageGtkEventBox에 넣고 이벤트 상자의 GdkWindow을 그릴 수 있습니다.

그래도 (gdk_pixbuf_new (으)로) 그려야 할 빈 공간을 만드는 것처럼 보입니다. 이 경우 GtkImage은 원하는 위젯이 아니므로 GtkDrawingArea을 사용하십시오. event-expose 신호 처리기에서 페인트 기능을 호출하는 것을 잊지 마십시오!

+0

감사합니다. 방금 Gtk 앱을 작동시키기 위해 기존 코드를 검색하는 것만으로는 충분하지 않다는 것을 알았습니다. 공식 [프로그래밍 매뉴얼] (http://developer.gnome.org/doc/GGAD/ggad.html)을 사용하여 기본적인 지식을 먼저 얻으려고합니다. – Zurbo82

+1

설명서가 실제로 오래되었습니다. http://developer.gnome.org의 첫 페이지에서 볼 수 있듯이, 그들은 새로운 개발자 사이트에서 작업하고 있습니다. 이 저장소에있는 유능한 사람들이 프로그래밍 한 새로운 프로그래밍 예제가 있어야합니다 : http://git.gnome.org/browse/gnome-devel-docs/tree/demos/C 이것들은 새로운 사이트로 갈 것입니다. 나는 아직 그들을 쳐다 보지 않아서 그들이 얼마나 멀리 있는지 말할 수 없다. – ptomato

관련 문제