queue_draw_area是否有特定的处理程序?

时间:2015-07-19 03:33:09

标签: python gtk cairo gdk

我正在使用Cairo gi.repository.Gtk.DrawingArea,我需要处理两种不同的事件:

  • 更新摘要行(draw_summary()
  • 绘制一个新点(draw_dot()

理想情况下,当我需要draw_dot()时,我只会使一个小区域(如我的绘图区域的垂直条带)无效,并且当我想draw_dummary()时,我会使其他区域无效}。我每次都可以重绘整个区域,但这会变得很昂贵,我宁愿只更新需要它的地方。

据我所知,我唯一可用的触发机制是调用:

      plot.queue_draw_area

- 但此调用依次通过以下方式与draw事件相关联:

      self.plot_area.connect("draw", self.handle_draw)

...这意味着我无法将draw_dotdraw_summary电话分开排队。当我调用queue_draw_area时,我所能做的只是调用我的一个处理程序。是否有标准模式将绘图操作分解为可以独立排队的单独函数?

1 个答案:

答案 0 :(得分:1)

嗯。你的绘图实际上如何工作?我的意思是,GTK还可以通过其他原因来调用你的回调,而不是内部重绘。所以你绘制回调必须能够处理完整的重绘。

对于优化:您可以获取cairo上下文的剪辑上下文,以确定实际需要重绘的部分。 C中的函数是cairo_clip_extents来获取边界矩形,而`cairo_copy_clip_rectangle_list'来获取作为剪辑一部分的所有单个矩形的列表。