Skip to content

Commit 24b1680

Browse files
committed
MNT: make renderer always optional
1 parent 2f8fc76 commit 24b1680

File tree

23 files changed

+109
-70
lines changed

23 files changed

+109
-70
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
No need to specify renderer for get_tightbbox and get_window_extent
2+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3+
4+
The ``get_tightbbox`` and `~.Artist.get_window_extent` methods
5+
no longer require the *renderer* kwarg, saving users from having to
6+
querry it from ``fig.canvas.get_renderer``. If the *renderer*
7+
kwarg is not supplied these methods first check if there is a cached renderer
8+
from a previous draw and use that. If there is no cahched renderer, then
9+
the methods will use ``fig.canvas.get_renderer()`` as a fallback.

lib/matplotlib/_constrained_layout.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@
5252
import numpy as np
5353

5454
from matplotlib import _api, artist as martist
55-
from matplotlib._tight_layout import get_renderer
5655
import matplotlib.transforms as mtransforms
5756
import matplotlib._layoutgrid as mlayoutgrid
5857

@@ -94,7 +93,7 @@ def do_constrained_layout(fig, h_pad, w_pad,
9493
layoutgrid : private debugging structure
9594
"""
9695

97-
renderer = get_renderer(fig)
96+
renderer = fig._get_renderer()
9897
# make layoutgrid tree...
9998
layoutgrids = make_layoutgrids(fig, None, rect=rect)
10099
if not layoutgrids['hasgrids']:

lib/matplotlib/_tight_layout.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -198,18 +198,6 @@ def auto_adjust_subplotpars(
198198
ax_bbox_list, pad, h_pad, w_pad, rect)
199199

200200

201-
def get_renderer(fig):
202-
if fig._cachedRenderer:
203-
return fig._cachedRenderer
204-
else:
205-
canvas = fig.canvas
206-
if canvas and hasattr(canvas, "get_renderer"):
207-
return canvas.get_renderer()
208-
else:
209-
from . import backend_bases
210-
return backend_bases._get_renderer(fig)
211-
212-
213201
def get_subplotspec_list(axes_list, grid_spec=None):
214202
"""
215203
Return a list of subplotspec from the given list of axes.

lib/matplotlib/artist.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ def stale(self, val):
298298
if val and self.stale_callback is not None:
299299
self.stale_callback(self, val)
300300

301-
def get_window_extent(self, renderer):
301+
def get_window_extent(self, renderer=None):
302302
"""
303303
Get the artist's bounding box in display space.
304304
@@ -318,7 +318,7 @@ def get_window_extent(self, renderer):
318318
"""
319319
return Bbox([[0, 0], [0, 0]])
320320

321-
def get_tightbbox(self, renderer):
321+
def get_tightbbox(self, renderer=None):
322322
"""
323323
Like `.Artist.get_window_extent`, but includes any clipping.
324324

lib/matplotlib/axes/_base.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4441,7 +4441,7 @@ def get_default_bbox_extra_artists(self):
44414441
return [a for a in artists if a.get_visible() and a.get_in_layout()
44424442
and (isinstance(a, noclip) or not a._fully_clipped_to_axes())]
44434443

4444-
def get_tightbbox(self, renderer, call_axes_locator=True,
4444+
def get_tightbbox(self, renderer=None, call_axes_locator=True,
44454445
bbox_extra_artists=None, *, for_layout_only=False):
44464446
"""
44474447
Return the tight bounding box of the Axes, including axis and their
@@ -4485,6 +4485,8 @@ def get_tightbbox(self, renderer, call_axes_locator=True,
44854485
"""
44864486

44874487
bb = []
4488+
if renderer is None:
4489+
renderer = self.figure._get_renderer()
44884490

44894491
if not self.get_visible():
44904492
return None

lib/matplotlib/axis.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1198,14 +1198,16 @@ def _update_ticks(self):
11981198

11991199
return ticks_to_draw
12001200

1201-
def _get_ticklabel_bboxes(self, ticks, renderer):
1201+
def _get_ticklabel_bboxes(self, ticks, renderer=None):
12021202
"""Return lists of bboxes for ticks' label1's and label2's."""
1203+
if renderer is None:
1204+
renderer = self.figure._get_renderer()
12031205
return ([tick.label1.get_window_extent(renderer)
12041206
for tick in ticks if tick.label1.get_visible()],
12051207
[tick.label2.get_window_extent(renderer)
12061208
for tick in ticks if tick.label2.get_visible()])
12071209

1208-
def get_tightbbox(self, renderer, *, for_layout_only=False):
1210+
def get_tightbbox(self, renderer=None, *, for_layout_only=False):
12091211
"""
12101212
Return a bounding box that encloses the axis. It only accounts
12111213
tick labels, axis label, and offsetText.
@@ -1217,7 +1219,8 @@ def get_tightbbox(self, renderer, *, for_layout_only=False):
12171219
"""
12181220
if not self.get_visible():
12191221
return
1220-
1222+
if renderer is None:
1223+
renderer = self.figure._get_renderer()
12211224
ticks_to_draw = self._update_ticks()
12221225

12231226
self._update_label_position(renderer)

lib/matplotlib/collections.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ def get_datalim(self, transData):
303303
return bbox
304304
return transforms.Bbox.null()
305305

306-
def get_window_extent(self, renderer):
306+
def get_window_extent(self, renderer=None):
307307
# TODO: check to ensure that this does not fail for
308308
# cases other than scatter plot legend
309309
return self.get_datalim(transforms.IdentityTransform())

lib/matplotlib/contour.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,23 +251,25 @@ def too_close(self, x, y, lw):
251251
def _get_nth_label_width(self, nth):
252252
"""Return the width of the *nth* label, in pixels."""
253253
fig = self.axes.figure
254+
renderer = fig._get_renderer()
254255
return (
255256
text.Text(0, 0,
256257
self.get_text(self.labelLevelList[nth], self.labelFmt),
257258
figure=fig,
258259
size=self.labelFontSizeList[nth],
259260
fontproperties=self.labelFontProps)
260-
.get_window_extent(mpl._tight_layout.get_renderer(fig)).width)
261+
.get_window_extent(renderer).width)
261262

262263
@_api.deprecated("3.5")
263264
def get_label_width(self, lev, fmt, fsize):
264265
"""Return the width of the label in points."""
265266
if not isinstance(lev, str):
266267
lev = self.get_text(lev, fmt)
267268
fig = self.axes.figure
269+
renderer = fig._get_renderer()
268270
width = (text.Text(0, 0, lev, figure=fig,
269271
size=fsize, fontproperties=self.labelFontProps)
270-
.get_window_extent(mpl._tight_layout.get_renderer(fig)).width)
272+
.get_window_extent(renderer).width)
271273
width *= 72 / fig.dpi
272274
return width
273275

lib/matplotlib/figure.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,7 +1618,7 @@ def get_default_bbox_extra_artists(self):
16181618
bbox_artists.extend(ax.get_default_bbox_extra_artists())
16191619
return bbox_artists
16201620

1621-
def get_tightbbox(self, renderer, bbox_extra_artists=None):
1621+
def get_tightbbox(self, renderer=None, bbox_extra_artists=None):
16221622
"""
16231623
Return a (tight) bounding box of the figure *in inches*.
16241624
@@ -1645,6 +1645,9 @@ def get_tightbbox(self, renderer, bbox_extra_artists=None):
16451645
containing the bounding box (in figure inches).
16461646
"""
16471647

1648+
if renderer is None:
1649+
renderer = self.figure._get_renderer()
1650+
16481651
bb = []
16491652
if bbox_extra_artists is None:
16501653
artists = self.get_default_bbox_extra_artists()
@@ -2060,13 +2063,8 @@ def dpi(self):
20602063
def dpi(self, value):
20612064
self._parent.dpi = value
20622065

2063-
@property
2064-
def _cachedRenderer(self):
2065-
return self._parent._cachedRenderer
2066-
2067-
@_cachedRenderer.setter
2068-
def _cachedRenderer(self, renderer):
2069-
self._parent._cachedRenderer = renderer
2066+
def _get_renderer(self):
2067+
return self._parent._get_renderer()
20702068

20712069
def _redo_transform_rel_fig(self, bbox=None):
20722070
"""
@@ -2496,6 +2494,14 @@ def axes(self):
24962494

24972495
get_axes = axes.fget
24982496

2497+
def _get_renderer(self):
2498+
if self._cachedRenderer is not None:
2499+
return self._cachedRenderer
2500+
elif hasattr(self.canvas, 'get_renderer'):
2501+
return self.canvas.get_renderer()
2502+
else:
2503+
return _get_renderer(self)
2504+
24992505
def _get_dpi(self):
25002506
return self._dpi
25012507

@@ -2644,7 +2650,7 @@ def get_constrained_layout_pads(self, relative=False):
26442650
hspace = info['hspace']
26452651

26462652
if relative and (w_pad is not None or h_pad is not None):
2647-
renderer = _get_renderer(self)
2653+
renderer = self._get_renderer()
26482654
dpi = renderer.dpi
26492655
w_pad = w_pad * dpi / renderer.width
26502656
h_pad = h_pad * dpi / renderer.height

lib/matplotlib/gridspec.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ def tight_layout(self, figure, renderer=None,
474474
"might be incorrect.")
475475

476476
if renderer is None:
477-
renderer = _tight_layout.get_renderer(figure)
477+
renderer = figure._get_renderer()
478478

479479
kwargs = _tight_layout.get_tight_layout_figure(
480480
figure, figure.axes, subplotspec_list, renderer,

0 commit comments

Comments
 (0)