@@ -57,8 +57,6 @@ class GraphicsContextRendererCairo(
57
57
GraphicsContextBase ,
58
58
RendererBase ):
59
59
60
- _draw_previously_disabled = False
61
-
62
60
def __init__ (self , width , height , dpi ):
63
61
# Hide the overloaded constructors used by from_pycairo_ctx and
64
62
# _for_fmt_output.
@@ -131,20 +129,6 @@ def _finish():
131
129
obj ._finish = _finish
132
130
return obj
133
131
134
- @contextlib .contextmanager
135
- def _draw_disabled (self ):
136
- # After a disabled draw, mark the renderer as such so that later
137
- # fetches in _get_cached_or_new_renderer force a redraw (otherwise,
138
- # we can get a blank canvas after interactively saving a CL figure).
139
- # But that redraw is not needed if the fetch is happening in a (later)
140
- # _draw_disabled context, so we clear the flag at entry.
141
- try :
142
- self ._draw_previously_disabled = False
143
- with super ()._draw_disabled ():
144
- yield
145
- finally :
146
- self ._draw_previously_disabled = True
147
-
148
132
def option_image_nocomposite (self ):
149
133
return (not mpl .rcParams ["image.composite_image" ]
150
134
if self ._has_vector_surface () else True )
@@ -226,50 +210,33 @@ def __init__(self, *args, **kwargs):
226
210
device_pixel_ratio = property (
227
211
lambda self : getattr (self , "_dpi_ratio" , 1 ))
228
212
229
- def _get_cached_or_new_renderer (
230
- self , func , * args ,
231
- _ensure_cleared = False , _ensure_drawn = False ,
232
- ** kwargs ):
213
+ # NOTE: Needed for tight_layout() (and we use it too).
214
+ def get_renderer (self , cleared = False ):
215
+ args = (* self .figure .bbox .size , self .figure .dpi )
233
216
last_call , last_renderer = self ._last_renderer_call
234
- if (func , args , kwargs ) == last_call :
235
- if last_renderer ._draw_previously_disabled :
236
- _ensure_cleared = _ensure_drawn = True
237
- if _ensure_cleared :
238
- # This API is present (rather than just throwing away the
239
- # renderer and creating a new one) so to avoid invalidating the
240
- # Text._get_layout cache.
241
- last_renderer .clear ()
242
- if _ensure_drawn :
243
- with _LOCK :
244
- self .figure .draw (last_renderer )
245
- last_renderer ._draw_previously_disabled = False
246
- return last_renderer
217
+ if args == last_call :
218
+ renderer = last_renderer
247
219
else :
248
- renderer = func (* args , ** kwargs )
249
- self ._last_renderer_call = (func , args , kwargs ), renderer
250
- if _ensure_drawn :
251
- with _LOCK :
252
- self .figure .draw (renderer )
253
- return renderer
254
-
255
- # NOTE: Needed for tight_layout() (and we use it too).
256
- def get_renderer (self , cleared = False , * , _ensure_drawn = False ):
257
- return self ._get_cached_or_new_renderer (
258
- GraphicsContextRendererCairo ,
259
- * self .figure .bbox .size , self .figure .dpi ,
260
- _ensure_cleared = cleared , _ensure_drawn = _ensure_drawn )
220
+ renderer = GraphicsContextRendererCairo (* args )
221
+ self ._last_renderer_call = args , renderer
222
+ if cleared : # matplotlib#22245 (<3.6).
223
+ renderer .clear ()
224
+ return renderer
261
225
262
226
renderer = property (get_renderer ) # NOTE: Needed for FigureCanvasAgg.
263
227
264
228
def draw (self ):
265
- self .get_renderer (cleared = True , _ensure_drawn = True )
229
+ renderer = self .get_renderer ()
230
+ renderer .clear ()
231
+ with _LOCK :
232
+ self .figure .draw (renderer )
266
233
super ().draw ()
267
234
268
235
def buffer_rgba (self ): # NOTE: Needed for tests.
269
- return self .get_renderer (_ensure_drawn = True ).buffer_rgba ()
236
+ return self .get_renderer ().buffer_rgba ()
270
237
271
238
def copy_from_bbox (self , bbox ):
272
- return self .get_renderer (_ensure_drawn = True ).copy_from_bbox (bbox )
239
+ return self .get_renderer ().copy_from_bbox (bbox )
273
240
274
241
def restore_region (self , region ):
275
242
with _LOCK :
@@ -369,13 +336,10 @@ def _print_ps_impl(self, is_eps, path_or_stream, *,
369
336
print_eps = partialmethod (_print_ps_impl , True )
370
337
371
338
def _get_fresh_straight_rgba8888 (self ):
372
- # Swap out the cache, as savefig may be playing with the background
373
- # color.
374
- last_renderer_call = self ._last_renderer_call
375
- self ._last_renderer_call = (None , None )
339
+ renderer = self .get_renderer ()
340
+ renderer .clear ()
376
341
with _LOCK :
377
- renderer = self .get_renderer (_ensure_drawn = True )
378
- self ._last_renderer_call = last_renderer_call
342
+ self .figure .draw (renderer )
379
343
return _util .cairo_to_straight_rgba8888 (renderer ._get_buffer ())
380
344
381
345
def print_rgba (self , path_or_stream , * ,
0 commit comments