From 4a9ced64391ce055d42d2ec66b8d894792dd2b17 Mon Sep 17 00:00:00 2001 From: Ryan May Date: Mon, 23 Oct 2017 17:57:47 -0600 Subject: [PATCH 1/2] MNT: Remove duplicated get_renderer The contents of this method are identical to those in FigureCanvasAgg, which is a superclass of FigureCanvasMac, so just remove it. --- lib/matplotlib/backends/backend_macosx.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/lib/matplotlib/backends/backend_macosx.py b/lib/matplotlib/backends/backend_macosx.py index d06cc34eaa89..c9f3c8b35d17 100644 --- a/lib/matplotlib/backends/backend_macosx.py +++ b/lib/matplotlib/backends/backend_macosx.py @@ -76,24 +76,6 @@ def _set_device_scale(self, value): self.figure.dpi = self.figure.dpi / self._device_scale * value self._device_scale = value - def get_renderer(self, cleared=False): - l, b, w, h = self.figure.bbox.bounds - key = w, h, self.figure.dpi - try: - self._lastKey, self._renderer - except AttributeError: - need_new_renderer = True - else: - need_new_renderer = (self._lastKey != key) - - if need_new_renderer: - self._renderer = RendererAgg(w, h, self.figure.dpi) - self._lastKey = key - elif cleared: - self._renderer.clear() - - return self._renderer - def _draw(self): renderer = self.get_renderer() From cb25f2ef78e5113148e142a73ba25a7b166a921e Mon Sep 17 00:00:00 2001 From: Ryan May Date: Mon, 23 Oct 2017 17:58:48 -0600 Subject: [PATCH 2/2] BUG: Fix stale rendering on MacOSX backend (Fixes #8282) Unlike on other backends (like Qt), MacOSX backend was never telling the renderer to clear. This resulted in draws that would happen on top of the previous Agg buffer. It seems enough to clear the renderer if the figure is stale. --- lib/matplotlib/backends/backend_macosx.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/backends/backend_macosx.py b/lib/matplotlib/backends/backend_macosx.py index c9f3c8b35d17..de403f79ce76 100644 --- a/lib/matplotlib/backends/backend_macosx.py +++ b/lib/matplotlib/backends/backend_macosx.py @@ -77,7 +77,7 @@ def _set_device_scale(self, value): self._device_scale = value def _draw(self): - renderer = self.get_renderer() + renderer = self.get_renderer(cleared=self.figure.stale) if self.figure.stale: self.figure.draw(renderer)