From 79c648b14c8b3d9c2169f1c277df75fe4bb8fa27 Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 20 Dec 2014 20:04:44 -0600 Subject: [PATCH] Accommodate upcoming changes to RectangleSelector API --- skimage/viewer/canvastools/recttool.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/skimage/viewer/canvastools/recttool.py b/skimage/viewer/canvastools/recttool.py index 8932e180..c2563eea 100644 --- a/skimage/viewer/canvastools/recttool.py +++ b/skimage/viewer/canvastools/recttool.py @@ -41,15 +41,16 @@ class RectangleTool(CanvasToolBase, RectangleSelector): def __init__(self, viewer, on_move=None, on_release=None, on_enter=None, maxdist=10, rect_props=None): - CanvasToolBase.__init__(self, viewer, on_move=on_move, - on_enter=on_enter, on_release=on_release) - + self._rect = None props = dict(edgecolor=None, facecolor='r', alpha=0.15) props.update(rect_props if rect_props is not None else {}) if props['edgecolor'] is None: props['edgecolor'] = props['facecolor'] - RectangleSelector.__init__(self, self.ax, lambda *args: None, + RectangleSelector.__init__(self, viewer.ax, lambda *args: None, rectprops=props) + CanvasToolBase.__init__(self, viewer, on_move=on_move, + on_enter=on_enter, on_release=on_release) + # Events are handled by the viewer try: self.disconnect_events() @@ -87,6 +88,8 @@ class RectangleTool(CanvasToolBase, RectangleSelector): @property def _rect_bbox(self): + if not self._rect: + return 0, 0, 0, 0 x0 = self._rect.get_x() y0 = self._rect.get_y() width = self._rect.get_width() @@ -142,7 +145,10 @@ class RectangleTool(CanvasToolBase, RectangleSelector): if not self.ax.in_axes(event): self.eventpress = None return - RectangleSelector.release(self, event) + if hasattr(RectangleSelector, '_release'): + RectangleSelector._release(self, event) + else: + RectangleSelector.release(self, event) self._extents_on_press = None # Undo hiding of rectangle and redraw. self.set_visible(True) @@ -158,7 +164,10 @@ class RectangleTool(CanvasToolBase, RectangleSelector): self.set_visible(False) self.redraw() self.set_visible(True) - RectangleSelector.press(self, event) + if hasattr(RectangleSelector, '_press'): + RectangleSelector._press(self, event) + else: + RectangleSelector.press(self, event) def _set_active_handle(self, event): """Set active handle based on the location of the mouse event"""