在Gtk3中使用Cairo进行自定义绘制在https://developer.gnome.org/gtk3/stable/ch01s05.html中进行了解释,在拖动鼠标时,draw_brush中的运动通知事件处理程序会绘制小矩形。在原始代码中,没有其他绘图。假设我通过添加以下代码在draw_cb中绘制了一个蓝色实心矩形:
cairo_set_source_rgb(cr,0.1,0.1,0.8);
cairo_rectangle(cr,80,80,50,50);
cairo_fill(cr);类似地,在clear_surface中从configure_event_cb调用的另一个填充红色矩形,我得到了一个奇怪的行为,蓝色矩形没有被画笔覆盖,但红色矩形被覆盖,如下图所示:

有没有人可以解释这个行为,这样我就可以在我正在开发的应用程序中正确地制作自定义绘图。
发布于 2019-04-07 00:36:08
因此,在clear_surface / configure_event_cb中,可以绘制到surface,这也是画笔绘制到的曲面。由于画笔是稍后绘制的,因此它最终位于您在此处绘制的红色矩形的顶部。
在draw_cb中,用于图形的临时曲面将复制到屏幕上。如果您随后在屏幕上绘制了一个蓝色矩形,则此蓝色矩形将最终显示在您之前绘制的内容之上。
所以基本上:原因是这里使用的两个不同的绘图目标。一种是屏幕上的“实际内容”,它随时都可能消失。另一个是在configure_event_cb中创建的内部曲面,它不会意外消失。
https://stackoverflow.com/questions/55543306
复制相似问题