我只是在'draw'信号中的GtkTextView中绘制特定内容,
在下一次信号发射时,我在GtkTextView中绘制了不同的东西。
在下一个信号调用中,如果没有任何东西要绘制,它会清除所有以前的图纸,这很好。
但是当它即将绘制新内容时,它会立即绘制所有先前内容,而不仅仅是所需内容。这不好。
我尝试了很多方法来防止这种行为,cairo_save()
和cairo_restore()
的每种可能组合似乎都没有。
如何让它不是一次绘制每一张上一张图纸,而只是新图片?
答案 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
。因此,我不会将此视为一个答案,但如果没有其他人提供更好的方法,我可以选择使用一些可能的方法。