在the Reference Manual of GtkDrawingArea中,它说
绘图信号通常在绘图区域首次出现在屏幕上时,或者当它被另一个窗口覆盖然后被覆盖时传递。您还可以通过添加到绘图区域窗口的“损坏区域”来强制曝光事件;
gtk_widget_queue_draw_area()
和gdk_window_invalidate_rect()
同样是很好的方法。 然后,您将获得无效区域的绘制信号。
那么如何在绘制信号的处理程序中获取无效区域? 它是剪辑区域吗?
答案 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()
的包装器,它使用整数而不是浮点坐标,所以如果你想要浮点坐标,你也可以使用后一个函数。