2011-04-19 21 views
0

由于大多数gdk_gc_*方法在GTK + 3中都不推荐使用,所以如何仅使用Cairo在子窗口上绘制?下面是我想达到什么样的一个简单的例子:如何替换GDK_INCLUDE_INFERIORS?

GdkWindow *tl_window = parent_widget->window; 
GdkGC *gc = gdk_gc_new(tl_window1->window); 
gdk_gc_set_subwindow(gc, GDK_INCLUDE_INFERIORS); 
gdk_gc_set_exposures(gc, FALSE); 
do_my_painting(tl_window, gc); 
gdk_gc_unref(gc); 

http://developer.gnome.org/gdk/stable/gdk-Graphics-Contexts.html#gdk-gc-set-subwindowGDK_INCLUDE_INFERIORS将在源一起使用。所以我假设诀窍是创建一个窗口的来源,然后......好吧......我被卡住了。

回答

0

找到了解决自己

GtkWidget *tl_window = gtk_widget_get_toplevel(widget); 
cairo_t *cairo = gdk_cairo_create(gtk_widget_get_window(tl_window)); 
cairo_surface_t *source_surface = cairo_get_target(cairo); 
cairo_t *cairo_new = cairo_create(source_surface); 
cairo_set_source_surface(cairo, cairo_get_target(cairo_new), 0, 0); 

do_my_painting(cairo_new); 
cairo_paint(cairo); 
cairo_destroy(cairo); 

(我MIS一个破坏cairo_new这里?)

我也找到了下一个环节(没有测试)http://mail.gnome.org/archives/commits-list/2010-August/msg03385.html,他们似乎用像素图而不是表面。