如何替换GDK_INCLUDE_INFERIORS?

时间:2011-04-19 15:19:38

标签: c cairo gtk3

由于大多数gdk_gc_*方法在GTK + 3中已弃用,如何仅使用Cairo在子窗口上绘制?下面是我想要实现的一个简单示例:

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将用于来源。所以我假设诀窍是创建一个窗口的源然后......那么......我被卡住了。

1 个答案:

答案 0 :(得分: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);

(我在这里误导了cairo_new的毁灭吗?)

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