开罗:重新填充对象(圆圈)并将其删除

时间:2013-04-27 20:32:43

标签: c++ c gtk drawing cairo

我正在使用cairo画一些弧,这是函数。

cairo_t* drawCircle(cairo_surface_t *container, int x, int y, int r, int cr, int cg, int   cb, int ca)
{
  cairo_t               *cairoInstance;                                                                                                                                 //Create instance
  cairoInstance = cairo_create(container);  

  cairo_set_source_rgba(cairoInstance, 0,0,1,0.5);
  cairo_arc(cairoInstance, x, y, r, 0, 2*M_PI);
  cairo_stroke_preserve(cairoInstance);
  cairo_fill(cairoInstance);


  gtk_widget_queue_draw_area(GTK_WIDGET(window), 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); //Redraws the window

return cairoInstance;
}

第一个问题:当我稍后更改source_rgba然后填充时,它会填充以前的颜色。有没有办法在再次填充不同颜色之前重置填充?

其次,如果我想稍后取消/删除圆弧/圆圈,我该怎么做?我试图使用cairo_destroy但它似乎破坏了实例而不删除实际对象。

谢谢!

1 个答案:

答案 0 :(得分:2)

Cairo使用模板/绘画模型,因此(通常)在现有图像 1 之上进行绘制。

它不维护图层或对象。就像在纸上画画一样,在绘制之后你不能移动修改圆圈。它已成为像素图中的一种模式。

删除圆圈,请使用原始背景(cairo_set_source_rgb(cr, 1, 1, 1); cairo_paint(cr))填充整个图像,然后重新绘制圆圈之外的所有内容。

<子> 1。您可以更改栅格操作码以执行其他类型的合成。