在GtkTextView中绘图,然后清除

时间:2016-07-29 03:10:20

标签: c gtk gtk3 cairo

我只是在'draw'信号中的GtkTextView中绘制特定内容,

在下一次信号发射时,我在GtkTextView中绘制了不同的东西。

在下一个信号调用中,如果没有任何东西要绘制,它会清除所有以前的图纸,这很好。

但是当它即将绘制新内容时,它会立即绘制所有先前内容,而不仅仅是所需内容。这不好。

我尝试了很多方法来防止这种行为,cairo_save()cairo_restore()的每种可能组合似乎都没有。

如何让它不是一次绘制每一张上一张图纸,而只是新图片?

1 个答案:

答案 0 :(得分:0)

"画"信号应仅用于改变GtkTextView的恒定外观。

根据我的要求,这可能会按要求运作:

void draw_on_textview (GtkWidget* textview)
{
    cairo_t* cr = gdk_cairo_create(gtk_widget_get_window(textview));

    // Do ALL the drawing AT ONCE here..

    cairo_destroy(cr);
}

当需要删除内容时:

gtk_widget_queue_draw(textview);

然而,这仍然与适当的方法略有不同。正如@jcoppens所说,必须使用draw_layer。因此,我不会将此视为一个答案,但如果没有其他人提供更好的方法,我可以选择使用一些可能的方法。