在https://developer.gnome.org/gtk3/stable/ch01s05.html中说明了使用Cairo在Gtk3中进行的自定义工程图
此处,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
中另一个填充的红色矩形类似,我得到一个奇怪的行为,其中蓝色矩形没有被画笔覆盖,但是红色矩形克服了手写,如下图所示:
任何人都可以解释这种现象,以便我可以在正在开发的应用程序中正确制作自定义图纸。
答案 0 :(得分:0)
因此,在clear_surface
/ configure_event_cb
中,您绘制到surface
,这也是笔刷绘制到的表面。由于画笔是在以后绘制的,因此它终止于您在此处绘制的红色矩形的顶部。
在draw_cb
中,用于绘图的此临时曲面被复制到屏幕上。如果您随后在屏幕上绘制一个蓝色矩形,则该蓝色矩形将终止于您之前绘制的顶部。
所以基本上:原因是这里使用了两个不同的绘图目标。一种是屏幕上的“实际内容”,该内容随时可能消失。另一个是在configure_event_cb
中创建的内部表面,不会意外消失。