[docs]classRubberbandPainter:"""The rubberband painter should be used in conjunction with the rubberband tool. ``RubberbandState`` should be shared between the two. """def__init__(self,rubberband_state:RubberbandState)->None:self.rubberband_state=rubberband_statedefpaint(self,items:Collection[Item],cairo:CairoContext)->None:data=self.rubberband_statex0,y0,x1,y1=data.x0,data.y0,data.x1,data.y1ifx0!=x1ory0!=y1:cairo.identity_matrix()cairo.rectangle(min(x0,x1),min(y0,y1),abs(x1-x0),abs(y1-y0))cairo.set_source_rgba(0.9,0.9,0.9,0.3)cairo.fill_preserve()cairo.set_line_width(2.0)cairo.set_dash((7.0,5.0))cairo.set_source_rgba(0.5,0.5,0.7,0.7)cairo.stroke()
[docs]defrubberband_tool(rubberband_state):"""Rubberband selection tool. Should be used in conjunction with ``RubberbandPainter``. """gesture=Gtk.GestureDrag.new()gesture.connect("drag-begin",on_drag_begin,rubberband_state)gesture.connect("drag-update",on_drag_update,rubberband_state)gesture.connect("drag-end",on_drag_end,rubberband_state)returngesture