我希望能够使用Cairo使用Gtk3直接绘制到根窗口。我有一个像这样的全屏窗口上绘制的旧Gtk2代码:
GdkWindow* drawable;
GdkGC* gc;
drawable = gdk_screen_get_root_window (gdk_screen_get_default());
gc = gdk_gc_new (drawable);
gdk_gc_set_subwindow (gc, GDK_INCLUDE_INFERIORS);
...
do_draw(drawable, gc);
用Gtk3我试过这个,
GdkWindow* drawable;
drawable = gdk_screen_get_root_window (gdk_screen_get_default());
cairo_surface_t *source_surface = gdk_window_create_similar_surface (drawable, CAIRO_CONTENT_COLOR_ALPHA, gdk_window_get_width(drawable), gdk_window_get_height(drawable) );
cairo_t *cairo = cairo_create(source_surface);
cairo_set_source_surface(cairo, source_surface, 0, 0);
....
do_draw(cairo);
代码似乎运行得很好,但屏幕上从未出现任何内容。有没有办法对Gtk3和开罗做类似的事情?
gdk_window_create_similar_surface
创建一个新曲面;类似的";到一个已经给定的。但它仍然是一个新的表面。
我认为您正在寻找gdk_cairo_create()
(已弃用(。
与您的问题无关,但以下代码应该做什么?为什么准备将曲面复制到自身?我认为这在开罗是不允许的。
cairo_t *cairo = cairo_create(source_surface);
cairo_set_source_surface(cairo, source_surface, 0, 0);