Skip to content

Commit edcc3c3

Browse files
committed
Deprecate the private FigureCanvasGTK3._renderer_init.
Previously, subclasses of FigureCanvasGTK3 needed to override the undocumented `_renderer_init` method. Instead, just move the relevant initialization code to the subclass' `__init__`. (Conceptually this is similar to the deprecation of `_init_toolbar` method on toolbars.)
1 parent 26fd914 commit edcc3c3

File tree

4 files changed

+25
-6
lines changed

4 files changed

+25
-6
lines changed

doc/api/api_changes_3.3/deprecations.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,16 @@ what the docs stated). They are deprecated; if you write a backend
406406
which needs to customize such events, please directly override
407407
``press_pan``/``press_zoom``/``release_pan``/``release_zoom`` instead.
408408

409+
FigureCanvasGTK3._renderer_init
410+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
411+
Overriding this method to initialize renderers for GTK3 canvases is deprecated.
412+
Instead, the renderer should be initialized in the ``__init__`` method of the
413+
subclass (which should call the base-class' ``__init__`` as appropriate). To
414+
keep back-compatibility with earlier versions of Matplotlib (which *required*
415+
``_renderer_init`` to be overridden), a fully empty implementation (``def
416+
_renderer_init(self): pass``) may be kept and will not trigger the deprecation
417+
warning.
418+
409419
Path helpers in :mod:`.bezier`
410420
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
411421

lib/matplotlib/backends/backend_gtk3.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,19 @@ def __init__(self, figure):
176176

177177
self.set_double_buffered(True)
178178
self.set_can_focus(True)
179-
self._renderer_init()
179+
180+
renderer_init = cbook._deprecate_method_override(
181+
__class__._renderer_init, self, allow_empty=True, since="3.3",
182+
addendum="Please initialize the renderer, if needed, in the "
183+
"subclass' __init__; a fully empty _renderer_init implementation "
184+
"may be kept for compatibility with earlier versions of "
185+
"Matplotlib.")
186+
if renderer_init:
187+
renderer_init()
188+
189+
@cbook.deprecated("3.3", alternative="__init__")
190+
def _renderer_init(self):
191+
pass
180192

181193
def destroy(self):
182194
#Gtk.DrawingArea.destroy(self)

lib/matplotlib/backends/backend_gtk3agg.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@ def __init__(self, figure):
1717
backend_gtk3.FigureCanvasGTK3.__init__(self, figure)
1818
self._bbox_queue = []
1919

20-
def _renderer_init(self):
21-
pass
22-
2320
def _render_figure(self, width, height):
2421
backend_agg.FigureCanvasAgg.draw(self)
2522

lib/matplotlib/backends/backend_gtk3cairo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ def set_context(self, ctx):
1616
class FigureCanvasGTK3Cairo(backend_gtk3.FigureCanvasGTK3,
1717
backend_cairo.FigureCanvasCairo):
1818

19-
def _renderer_init(self):
20-
"""Use cairo renderer."""
19+
def __init__(self, figure):
20+
super().__init__(figure)
2121
self._renderer = RendererGTK3Cairo(self.figure.dpi)
2222

2323
def _render_figure(self, width, height):

0 commit comments

Comments
 (0)