Как заменить GDK_INCLUDE_INFERIORS? - PullRequest
0 голосов
/ 19 апреля 2011

Поскольку большинство методов 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-subwindow говорит, что GDK_INCLUDE_INFERIORS будет использоваться в источниках. Поэтому я предполагаю, что хитрость заключается в том, чтобы создать источник окна, а затем ... ну, тогда ... Я застрял.

1 Ответ

0 голосов
/ 07 мая 2011

Сам нашел решение

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, где они, кажется, используют растровое изображение вместо поверхности.

...