c - 如何使用 cairo 确定 Gtk+ 3 中的非矩形绘图区域?

标签 c gtk cairo gtk3 inkscape

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/

相关文章:

c - 与化学相关的编程挑战

python - pygtk 中的多行 gtk 条目

python - 如何将标准字典/列表迭代器与 python gtk GenericTreeModel 一起使用?

c++ - 开罗的 Alpha 透明度

gtk+: How to Draw Custom Window Borders Like Chrome or Steam

c - NSAddImage 的替换(在 GLLoadGen 中)

c - 为什么 main 中未初始化的局部变量在 c 中为零(不是垃圾)?

r - 开罗的 R-3.3.2 问题中的半透明

c - 如何从Linux中的C获取当前时间(以毫秒为单位)?

python - (Py)GTK : How can I force my window to be repainted/call expose-event?