From 0428f821e57b6c39cbdb5357d1d8e127d9cd9914 Mon Sep 17 00:00:00 2001 From: Tony S Yu Date: Mon, 10 Dec 2012 21:18:50 -0500 Subject: [PATCH] BUG: Fix background update when canvas resized --- skimage/viewer/canvastools/base.py | 21 +++++++++++++++++---- skimage/viewer/utils/core.py | 6 ++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/skimage/viewer/canvastools/base.py b/skimage/viewer/canvastools/base.py index 8b631d38..3951c15f 100644 --- a/skimage/viewer/canvastools/base.py +++ b/skimage/viewer/canvastools/base.py @@ -25,6 +25,7 @@ class CanvasToolBase(object): if useblit: self.canvas.draw() self.img_background = self.canvas.copy_from_bbox(self.ax.bbox) + self.connect_event('resize_event', self._update_saved_image) self.useblit = useblit if on_update is None: @@ -58,18 +59,30 @@ class CanvasToolBase(object): return not self.active def set_visible(self, val): - for a in self._artists: - a.set_visible(val) + for artist in self._artists: + artist.set_visible(val) def redraw(self): if self.useblit: self.canvas.restore_region(self.img_background) - for artist in self._artists: - self.ax.draw_artist(artist) + self._draw_artists() self.canvas.blit(self.ax.bbox) else: self.canvas.draw_idle() + def _draw_artists(self): + for artist in self._artists: + self.ax.draw_artist(artist) + + def _update_saved_image(self, event): + # Hide canvas artists and save background image + self.set_visible(False) + self.canvas.draw() + self.img_background = self.canvas.copy_from_bbox(self.ax.bbox) + # Redraw canvas artists + self.set_visible(True) + self._draw_artists() + class ToolHandles(object): """Control handles for canvas tools. diff --git a/skimage/viewer/utils/core.py b/skimage/viewer/utils/core.py index 9646bbd6..a49af7e5 100644 --- a/skimage/viewer/utils/core.py +++ b/skimage/viewer/utils/core.py @@ -105,6 +105,12 @@ class FigureCanvas(FigureCanvasQTAgg): QtGui.QSizePolicy.Expanding) FigureCanvasQTAgg.updateGeometry(self) + def resizeEvent(self, event): + FigureCanvasQTAgg.resizeEvent(self, event) + # Call to `resize_event` missing in FigureManagerQT. + # See https://github.com/matplotlib/matplotlib/pull/1585 + self.resize_event() + #TODO: Consider overriding Matplotlib key-event handling # def keyPressEvent(self, event): # # Override key events defined by Matplotlib