【问题标题】:How to get invalid region of GtkDrawingArea in its draw signal handler如何在其绘制信号处理程序中获取 GtkDrawingArea 的无效区域
【发布时间】:2018-02-11 14:02:50
【问题描述】:
在the Reference Manual of GtkDrawingArea 中,它说
绘图信号通常在绘图区域第一次出现在屏幕上时传递,或者当它被另一个窗口覆盖然后又被覆盖时传递。您还可以通过添加到绘图区域窗口的“损坏区域”来强制暴露事件; gtk_widget_queue_draw_area() 和 gdk_window_invalidate_rect() 是同样的好方法。 然后您将获得无效区域的平局信号。
那么如何在绘图信号的处理程序中获取无效区域?
是剪辑区域吗?
【问题讨论】:
标签:
gtk
gtk3
cairo
pygobject
pycairo
【解决方案1】:
the documentation for the draw signal itself:
信号处理程序将获得一个cr,其剪辑区域已设置为小部件的脏区域,即需要重新绘制的区域。想要完全避免重绘自己的复杂小部件可以使用gdk_cairo_get_clip_rectangle() 获得剪辑区域的完整范围,或者他们可以使用cairo_copy_clip_rectangle_list() 获得更细粒度的脏区表示。
gdk_cairo_get_clip_rectangle() 是cairo_clip_extents() 的包装器,它使用整数而不是浮点坐标,因此如果您想要浮点坐标,也可以使用后一个函数。