首页 > 解决方案 > 在绘图回调中绘图和在绘图回调外绘图

问题描述

在https://developer.gnome.org/gtk3/stable/ch01s05.html中解释了使用 Cairo 在 Gtk3 中的自定义绘图。在 这里draw_brush,当鼠标被拖动时,motion-notify-event 的处理程序会绘制小矩形。在原始代码中没有其他绘图。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被调用 from configure_event_cb,我得到一个奇怪的行为,蓝色矩形没有被画笔覆盖,但红色矩形被覆盖,如下图所示: 图片

谁能解释这种行为,以便我可以在我正在开发的应用程序中正确地制作自定义图纸。

标签: cgtk3cairo

解决方案


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

draw_cb中,用于绘图的这个临时表面被复制到屏幕上。如果您之后在屏幕上绘制一个蓝色矩形,这个蓝色矩形最终会出现在您之前绘制的内容之上。

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


推荐阅读