Gtk+ 3 migration guide显示如何使用 GdkEventExpose.region
字段为重新渲染小部件提供细粒度区域。我们已经在 Inkscape 中做了类似的事情,以避免在绘图 Canvas 上渲染过多的复杂内容。
但是,指南中的示例展示了如何对旧的 Gtk+ 2 Exposure_event 处理程序执行此操作。
如何在新的 Gtk+ 3 绘制处理程序中执行等效操作,该处理程序接收“准备剪辑的”Cairo 上下文作为参数,而不是 GdkEventExpose
?
我猜想一种可能性是在“已剪辑”的 cairo 上下文中使用 cairo_copy_clip_rectangle_list 来获取构成要绘制区域的矩形列表。有人有使用这个的经验吗?这看起来是一个明智的方法吗?
最佳答案
是的,您应该在小部件的::draw() 信号处理程序中获得的 cairo_t 上使用 cairo_copy_clip_rectangle_list() 。请参阅此提交的示例: http://git.gnome.org/browse/vte/commit/?id=21a064ac8b5925108b0ab9bd6516664c8cd3e268
关于c - 如何使用 cairo 确定 Gtk+ 3 中的非矩形绘图区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14077335/