我只是简单地在GtkTextView中以“绘制”信号绘制特定内容,

在下一个信号发射时,我在GtkTextView中绘制了不同的内容。



在下一个信号调用中,如果没有要绘制的内容,则清除所有先前的图形,这很好。

但是,当要绘制新内容时,它会一次绘制所有以前的内容,而不仅仅是需要的内容。不好



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

如何使它不会一次绘制所有以前的图形,而只能一次绘制新的图形?

最佳答案

“绘制”信号应仅用于更改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。因此,我不认为这是答案,而是在没有其他人提供更好方法的情况下可以选择使用的一些可能方法。

07-24 14:13