2626"""
2727
2828from collections import namedtuple
29- from contextlib import contextmanager , nullcontext
29+ from contextlib import ExitStack , contextmanager , nullcontext
3030from enum import Enum , IntEnum
3131import functools
3232import importlib
@@ -2256,22 +2256,16 @@ def print_figure(
22562256
22572257 # Remove the figure manager, if any, to avoid resizing the GUI widget.
22582258 with cbook ._setattr_cm (self , manager = None ), \
2259- cbook ._setattr_cm (self .figure , dpi = dpi ), \
2260- cbook ._setattr_cm (canvas , _is_saving = True ):
2261- origfacecolor = self .figure .get_facecolor ()
2262- origedgecolor = self .figure .get_edgecolor ()
2263-
2264- if facecolor is None :
2265- facecolor = rcParams ['savefig.facecolor' ]
2266- if cbook ._str_equal (facecolor , 'auto' ):
2267- facecolor = origfacecolor
2268- if edgecolor is None :
2269- edgecolor = rcParams ['savefig.edgecolor' ]
2270- if cbook ._str_equal (edgecolor , 'auto' ):
2271- edgecolor = origedgecolor
2272-
2273- self .figure .set_facecolor (facecolor )
2274- self .figure .set_edgecolor (edgecolor )
2259+ cbook ._setattr_cm (self .figure , dpi = dpi ), \
2260+ cbook ._setattr_cm (canvas , _is_saving = True ), \
2261+ ExitStack () as stack :
2262+
2263+ for prop in ["facecolor" , "edgecolor" ]:
2264+ color = locals ()[prop ]
2265+ if color is None :
2266+ color = rcParams [f"savefig.{ prop } " ]
2267+ if not cbook ._str_equal (color , "auto" ):
2268+ stack .enter_context (self .figure ._cm_set (** {prop : color }))
22752269
22762270 if bbox_inches is None :
22772271 bbox_inches = rcParams ['savefig.bbox' ]
@@ -2306,8 +2300,7 @@ def print_figure(
23062300 _bbox_inches_restore = None
23072301
23082302 # we have already done CL above, so turn it off:
2309- cl_state = self .figure .get_constrained_layout ()
2310- self .figure .set_constrained_layout (False )
2303+ stack .enter_context (self .figure ._cm_set (constrained_layout = False ))
23112304 try :
23122305 # _get_renderer may change the figure dpi (as vector formats
23132306 # force the figure dpi to 72), so we need to set it again here.
@@ -2323,11 +2316,7 @@ def print_figure(
23232316 if bbox_inches and restore_bbox :
23242317 restore_bbox ()
23252318
2326- self .figure .set_facecolor (origfacecolor )
2327- self .figure .set_edgecolor (origedgecolor )
23282319 self .figure .set_canvas (self )
2329- # reset to cached state
2330- self .figure .set_constrained_layout (cl_state )
23312320 return result
23322321
23332322 @classmethod
0 commit comments