Gtk DrawingArea中的静态图形

时间:2018-08-09 07:34:56

标签: python gtk3

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

有没有一种方法可以专门删除一些图形,并在不删除已绘制图形的情况下添加一些新图形?

例如在image1中,我想保持黑线不变,除非绘图区域窗口大小发生变化,我要在5个红色斑点中保留3个,并添加一些新的蓝色斑点,以便新图像看起来像{{ 3}}。

如果这个问题已经回答,请分享链接。

1 个答案:

答案 0 :(得分:0)

我知道两种解决您问题的方法。

  1. 存储paths。 您可以在空白的line_to上绘制内容(使用arccairo_t等),然后调用cairo_copy_path并将该路径存储在某处。在下一个"draw"上,您应该调用cairo_append_path以应用该路径。

  2. 您可以存储整个开罗表面。例如,创建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);
    }