【问题标题】:How to replace GDK_INCLUDE_INFERIORS?如何替换 GDK_INCLUDE_INFERIORS?
【发布时间】:2011-04-19 15:19:37
【问题描述】:

由于大多数 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 将用于源。所以我认为诀窍是创建窗口的源,然后......好吧......我被卡住了。

【问题讨论】:

    标签: c cairo gtk3


    【解决方案1】:

    自己找到了解决办法

    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,他们似乎使用像素图而不是表面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 2014-12-17
      • 2019-03-23
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多