Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何替换GDK_包括_下级?_C_Cairo_Gtk3 - Fatal编程技术网

C 如何替换GDK_包括_下级?

C 如何替换GDK_包括_下级?,c,cairo,gtk3,C,Cairo,Gtk3,由于大多数的gdk\u 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_pa

由于大多数的
gdk\u 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);

表示将在源代码上使用
GDK\u INCLUDE\u subderiors
。所以我假设技巧是创建一个窗口源,然后。。。那么。。。我卡住了。

我自己找到了解决办法

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);
(我是不是错失了开罗的毁灭?)

我还发现了下一个链接(没有测试),其中他们似乎使用了pixmap而不是曲面