如何在其绘制信号处理程序中获取GtkDrawingArea的无效区域

时间:2018-02-11 14:02:51

标签: gtk gtk3 cairo pygobject pycairo

the Reference Manual of GtkDrawingArea中,它说

  

绘图信号通常在绘图区域首次出现在屏幕上时,或者当它被另一个窗口覆盖然后被覆盖时传递。您还可以通过添加到绘图区域窗口的“损坏区域”来强制曝光事件; gtk_widget_queue_draw_area()gdk_window_invalidate_rect()同样是很好的方法。 然后,您将获得无效区域的绘制信号。

那么如何在绘制信号的处理程序中获取无效区域? 它是剪辑区域吗?

1 个答案:

答案 0 :(得分:4)

这在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()的包装器,它使用整数而不是浮点坐标,所以如果你想要浮点坐标,你也可以使用后一个函数。