在绘图回调中绘图和在绘图回调之外绘图

时间:2019-04-05 21:01:39

标签: c gtk3 cairo

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中另一个填充的红色矩形类似,我得到一个奇怪的行为,其中蓝色矩形没有被画笔覆盖,但是红色矩形克服了手写,如下图所示: pic

任何人都可以解释这种现象,以便我可以在正在开发的应用程序中正确制作自定义图纸。

1 个答案:

答案 0 :(得分:0)

因此,在clear_surface / configure_event_cb中,您绘制到surface,这也是笔刷绘制到的表面。由于画笔是在以后绘制的,因此它终止于您在此处绘制的红色矩形的顶部。

draw_cb中,用于绘图的此临时曲面被复制到屏幕上。如果您随后在屏幕上绘制一个蓝色矩形,则该蓝色矩形将终止于您之前绘制的顶部。

所以基本上:原因是这里使用了两个不同的绘图目标。一种是屏幕上的“实际内容”,该内容随时可能消失。另一个是在configure_event_cb中创建的内部表面,不会意外消失。