4646from matplotlib .backend_managers import ToolManager
4747from matplotlib .transforms import Affine2D
4848from matplotlib .path import Path
49+ from matplotlib .cbook import _setattr_cm
4950
5051
5152_log = logging .getLogger (__name__ )
@@ -1502,15 +1503,14 @@ def __init__(self, name, canvas, key, x=0, y=0, guiEvent=None):
15021503 self .key = key
15031504
15041505
1505- def _get_renderer (figure , print_method = None , * , draw_disabled = False ):
1506+ def _get_renderer (figure , print_method = None ):
15061507 """
15071508 Get the renderer that would be used to save a `~.Figure`, and cache it on
15081509 the figure.
15091510
1510- If *draw_disabled* is True, additionally replace drawing methods on
1511- *renderer* by no-ops. This is used by the tight-bbox-saving renderer,
1512- which needs to walk through the artist tree to compute the tight-bbox, but
1513- for which the output file may be closed early.
1511+ If you need a renderer without any active draw methods use
1512+ cbook._setattr_cm to temporary patch them out at your call site.
1513+
15141514 """
15151515 # This is implemented by triggering a draw, then immediately jumping out of
15161516 # Figure.draw() by raising an exception.
@@ -1529,12 +1529,6 @@ def _draw(renderer): raise Done(renderer)
15291529 except Done as exc :
15301530 renderer , = figure ._cachedRenderer , = exc .args
15311531
1532- if draw_disabled :
1533- for meth_name in dir (RendererBase ):
1534- if (meth_name .startswith ("draw_" )
1535- or meth_name in ["open_group" , "close_group" ]):
1536- setattr (renderer , meth_name , lambda * args , ** kwargs : None )
1537-
15381532 return renderer
15391533
15401534
@@ -2093,9 +2087,18 @@ def print_figure(
20932087 renderer = _get_renderer (
20942088 self .figure ,
20952089 functools .partial (
2096- print_method , orientation = orientation ),
2097- draw_disabled = True )
2098- self .figure .draw (renderer )
2090+ print_method , orientation = orientation )
2091+ )
2092+ no_ops = {
2093+ meth_name : lambda * args , ** kwargs : None
2094+ for meth_name in dir (RendererBase )
2095+ if (meth_name .startswith ("draw_" )
2096+ or meth_name in ["open_group" , "close_group" ])
2097+ }
2098+
2099+ with _setattr_cm (renderer , ** no_ops ):
2100+ self .figure .draw (renderer )
2101+
20992102 bbox_inches = self .figure .get_tightbbox (
21002103 renderer , bbox_extra_artists = bbox_extra_artists )
21012104 if pad_inches is None :
0 commit comments