Gtk DrawingArea 中的静态图形

Static graphics in Gtk DrawingArea

我想在Gtk绘图区画一些静态图形和一些动态图形。在Gtk绘图区,每次调用queue_draw,都会清除所有已经绘制的图形,对于复杂的图形来说,这是非常耗时的。

有没有办法在已经绘制的图形不被删除的情况下,专门删除一些图形,并添加一些新图形?

例如 image1, I want to keep black line unchanged unless drawing area window size changes, I want to keep 3 out of 5 red spots and add some new blue spots so that new image looks like image2。

如果此问题已得到解答,请分享 link。

我知道 2 种方法可以解决您的问题。

  1. 商店paths。 您可以在空 cairo_t 上绘制一些东西(使用 line_toarc 等),然后调用 cairo_copy_path 并将该路径存储在某处。在接下来的 "draw" 中,您应该调用 cairo_append_path 来应用该路径。

  2. 您可以存储整个 cairo 表面。例如,创建cairo_image_surface,填充它,然后像这样使用它:

    draw_surface (cairo_surface_t *src,
                  cairo_t         *dst,
                  gdouble          x,
                  gdouble          y)
    {
      cairo_surface_mark_dirty (src);
      cairo_save (dst);
      cairo_translate (dst, x, y);
      cairo_set_source_surface (dst, src, 0, 0);
      cairo_paint (dst);
      cairo_restore (dst);
    }