我只需在一个“绘制”信号中绘制GtkTextView中的特定内容,
在下一个信号发射中,我在GtkTextView中画了不同的东西。
在下一次信号调用中,如果没有要绘制的东西,它会清除所有以前的绘图,这是很好的。
但是当它要绘制新的内容时,它会同时绘制所有以前的内容,而不仅仅是所需的内容。这是不好的。
我尝试了很多方法来防止这种行为,每一个可能的结合cairo_save()和cairo_restore()似乎都没有做到这一点。
我怎么能使它不是一次画以前的每一幅画,而是只画一张新的?
发布于 2016-07-29 23:43:15
“绘制”信号只用于更改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。因此,我不认为这是一个答案,而是一些可能的方法,如果没有其他人提供更好的方法,我可以选择使用。
https://stackoverflow.com/questions/38649940
复制相似问题