50
50
51
51
backend_version = 'v2.2'
52
52
53
+
53
54
def get_hinting_flag ():
54
55
mapping = {
55
56
True : LOAD_FORCE_AUTOHINT ,
@@ -67,7 +68,7 @@ class RendererAgg(RendererBase):
67
68
The renderer handles all the drawing primitives using a graphics
68
69
context instance that controls the colors/styles
69
70
"""
70
- debug = 1
71
+ debug = 1
71
72
72
73
# we want to cache the fonts at the class level so that when
73
74
# multiple figures are created we can reuse them. This helps with
@@ -82,26 +83,34 @@ class RendererAgg(RendererBase):
82
83
83
84
lock = threading .RLock ()
84
85
_fontd = maxdict (50 )
86
+
85
87
def __init__ (self , width , height , dpi ):
86
- if __debug__ : verbose .report ('RendererAgg.__init__' , 'debug-annoying' )
88
+ if __debug__ :
89
+ verbose .report ('RendererAgg.__init__' , 'debug-annoying' )
87
90
RendererBase .__init__ (self )
88
91
self .texd = maxdict (50 ) # a cache of tex image rasters
89
92
90
93
self .dpi = dpi
91
94
self .width = width
92
95
self .height = height
93
- if __debug__ : verbose .report ('RendererAgg.__init__ width=%s, height=%s' % (width , height ), 'debug-annoying' )
94
- self ._renderer = _RendererAgg (int (width ), int (height ), dpi , debug = False )
96
+ if __debug__ :
97
+ verbose .report ('RendererAgg.__init__ ' +
98
+ 'width=%s,height=%s' % (width , height ),
99
+ 'debug-annoying' )
100
+ self ._renderer = _RendererAgg (int (width ), int (height ), dpi ,
101
+ debug = False )
95
102
self ._filter_renderers = []
96
103
97
- if __debug__ : verbose .report ('RendererAgg.__init__ _RendererAgg done' ,
104
+ if __debug__ :
105
+ verbose .report ('RendererAgg.__init__ _RendererAgg done' ,
98
106
'debug-annoying' )
99
107
100
108
self ._update_methods ()
101
109
self .mathtext_parser = MathTextParser ('Agg' )
102
110
103
111
self .bbox = Bbox .from_bounds (0 , 0 , self .width , self .height )
104
- if __debug__ : verbose .report ('RendererAgg.__init__ done' ,
112
+ if __debug__ :
113
+ verbose .report ('RendererAgg.__init__ done' ,
105
114
'debug-annoying' )
106
115
107
116
def _get_hinting_flag (self ):
@@ -133,7 +142,7 @@ def draw_path(self, gc, path, transform, rgbFace=None):
133
142
"""
134
143
Draw the path
135
144
"""
136
- nmax = rcParams ['agg.path.chunksize' ] # here at least for testing
145
+ nmax = rcParams ['agg.path.chunksize' ] # here at least for testing
137
146
npts = path .vertices .shape [0 ]
138
147
if (nmax > 100 and npts > nmax and path .should_simplify and
139
148
rgbFace is None and gc .get_hatch () is None ):
@@ -144,11 +153,11 @@ def draw_path(self, gc, path, transform, rgbFace=None):
144
153
i1 [:- 1 ] = i0 [1 :] - 1
145
154
i1 [- 1 ] = npts
146
155
for ii0 , ii1 in zip (i0 , i1 ):
147
- v = path .vertices [ii0 :ii1 ,:]
156
+ v = path .vertices [ii0 :ii1 , :]
148
157
c = path .codes
149
158
if c is not None :
150
159
c = c [ii0 :ii1 ]
151
- c [0 ] = Path .MOVETO # move to end of last chunk
160
+ c [0 ] = Path .MOVETO # move to end of last chunk
152
161
p = Path (v , c )
153
162
self ._renderer .draw_path (gc , p , transform , rgbFace )
154
163
else :
@@ -158,7 +167,8 @@ def draw_mathtext(self, gc, x, y, s, prop, angle):
158
167
"""
159
168
Draw the math text using matplotlib.mathtext
160
169
"""
161
- if __debug__ : verbose .report ('RendererAgg.draw_mathtext' ,
170
+ if __debug__ :
171
+ verbose .report ('RendererAgg.draw_mathtext' ,
162
172
'debug-annoying' )
163
173
ox , oy , width , height , descent , font_image , used_characters = \
164
174
self .mathtext_parser .parse (s , self .dpi , prop )
@@ -169,18 +179,21 @@ def draw_mathtext(self, gc, x, y, s, prop, angle):
169
179
y = np .round (y - oy + yd )
170
180
self ._renderer .draw_text_image (font_image , x , y + 1 , angle , gc )
171
181
172
- def draw_text (self , gc , x , y , s , prop , angle , ismath = False , mtext = None ):
182
+ def draw_text (self , gc , x , y , s , prop , angle ,
183
+ ismath = False , mtext = None ):
173
184
"""
174
185
Render the text
175
186
"""
176
- if __debug__ : verbose .report ('RendererAgg.draw_text' , 'debug-annoying' )
187
+ if __debug__ :
188
+ verbose .report ('RendererAgg.draw_text' , 'debug-annoying' )
177
189
178
190
if ismath :
179
191
return self .draw_mathtext (gc , x , y , s , prop , angle )
180
192
181
193
flags = get_hinting_flag ()
182
194
font = self ._get_agg_font (prop )
183
- if font is None : return None
195
+ if font is None :
196
+ return None
184
197
if len (s ) == 1 and ord (s ) > 127 :
185
198
font .load_char (ord (s ), flags = flags )
186
199
else :
@@ -194,8 +207,8 @@ def draw_text(self, gc, x, y, s, prop, angle, ismath=False, mtext=None):
194
207
yd = d * np .cos (np .deg2rad (angle ))
195
208
196
209
#print x, y, int(x), int(y), s
197
- self ._renderer .draw_text_image (
198
- font . get_image (), np . round ( x - xd ), np .round (y + yd ) + 1 , angle , gc )
210
+ self ._renderer .draw_text_image (font . get_image (), np . round ( x - xd ),
211
+ np .round (y + yd ) + 1 , angle , gc )
199
212
200
213
def get_text_width_height_descent (self , s , prop , ismath ):
201
214
"""
@@ -222,15 +235,15 @@ def get_text_width_height_descent(self, s, prop, ismath):
222
235
223
236
flags = get_hinting_flag ()
224
237
font = self ._get_agg_font (prop )
225
- font .set_text (s , 0.0 , flags = flags ) # the width and height of unrotated string
238
+ # the width and height of unrotated string
239
+ font .set_text (s , 0.0 , flags = flags )
226
240
w , h = font .get_width_height ()
227
241
d = font .get_descent ()
228
242
w /= 64.0 # convert from subpixels
229
243
h /= 64.0
230
244
d /= 64.0
231
245
return w , h , d
232
246
233
-
234
247
def draw_tex (self , gc , x , y , s , prop , angle , ismath = 'TeX!' , mtext = None ):
235
248
# todo, handle props, angle, origins
236
249
size = prop .get_size_in_points ()
@@ -258,7 +271,8 @@ def _get_agg_font(self, prop):
258
271
"""
259
272
Get the font for text instance t, cacheing for efficiency
260
273
"""
261
- if __debug__ : verbose .report ('RendererAgg._get_agg_font' ,
274
+ if __debug__ :
275
+ verbose .report ('RendererAgg._get_agg_font' ,
262
276
'debug-annoying' )
263
277
264
278
key = hash (prop )
@@ -285,22 +299,26 @@ def points_to_pixels(self, points):
285
299
convert point measures to pixes using dpi and the pixels per
286
300
inch of the display
287
301
"""
288
- if __debug__ : verbose .report ('RendererAgg.points_to_pixels' ,
302
+ if __debug__ :
303
+ verbose .report ('RendererAgg.points_to_pixels' ,
289
304
'debug-annoying' )
290
305
return points * self .dpi / 72.0
291
306
292
307
def tostring_rgb (self ):
293
- if __debug__ : verbose .report ('RendererAgg.tostring_rgb' ,
308
+ if __debug__ :
309
+ verbose .report ('RendererAgg.tostring_rgb' ,
294
310
'debug-annoying' )
295
311
return self ._renderer .tostring_rgb ()
296
312
297
313
def tostring_argb (self ):
298
- if __debug__ : verbose .report ('RendererAgg.tostring_argb' ,
314
+ if __debug__ :
315
+ verbose .report ('RendererAgg.tostring_argb' ,
299
316
'debug-annoying' )
300
317
return self ._renderer .tostring_argb ()
301
318
302
319
def buffer_rgba (self ):
303
- if __debug__ : verbose .report ('RendererAgg.buffer_rgba' ,
320
+ if __debug__ :
321
+ verbose .report ('RendererAgg.buffer_rgba' ,
304
322
'debug-annoying' )
305
323
return self ._renderer .buffer_rgba ()
306
324
@@ -378,9 +396,9 @@ def post_processing(image, dpi):
378
396
post_processing is plotted (using draw_image) on it.
379
397
"""
380
398
381
- # WARNING.
382
- # For agg_filter to work, the rendere's method need
383
- # to overridden in the class. See draw_markers, and draw_path_collections
399
+ # WARNING. For agg_filter to work, the rendere's method need
400
+ # to overridden in the class. See draw_markers, and
401
+ # draw_path_collections
384
402
385
403
from matplotlib ._image import fromarray
386
404
@@ -390,7 +408,6 @@ def post_processing(image, dpi):
390
408
391
409
l , b , w , h = bounds
392
410
393
-
394
411
self ._renderer = self ._filter_renderers .pop ()
395
412
self ._update_methods ()
396
413
@@ -403,18 +420,18 @@ def post_processing(image, dpi):
403
420
404
421
gc = self .new_gc ()
405
422
self ._renderer .draw_image (gc ,
406
- l + ox , height - b - h + oy ,
423
+ l + ox , height - b - h + oy ,
407
424
image )
408
425
409
426
410
427
def new_figure_manager (num , * args , ** kwargs ):
411
428
"""
412
429
Create a new figure manager instance
413
430
"""
414
- if __debug__ : verbose .report ('backend_agg.new_figure_manager' ,
431
+ if __debug__ :
432
+ verbose .report ('backend_agg.new_figure_manager' ,
415
433
'debug-annoying' )
416
434
417
-
418
435
FigureClass = kwargs .pop ('FigureClass' , Figure )
419
436
thisFig = FigureClass (* args , ** kwargs )
420
437
return new_figure_manager_given_figure (num , thisFig )
@@ -451,7 +468,8 @@ def draw(self):
451
468
"""
452
469
Draw the figure using the renderer
453
470
"""
454
- if __debug__ : verbose .report ('FigureCanvasAgg.draw' , 'debug-annoying' )
471
+ if __debug__ :
472
+ verbose .report ('FigureCanvasAgg.draw' , 'debug-annoying' )
455
473
456
474
self .renderer = self .get_renderer (cleared = True )
457
475
# acquire a lock on the shared font cache
@@ -465,9 +483,12 @@ def draw(self):
465
483
def get_renderer (self , cleared = False ):
466
484
l , b , w , h = self .figure .bbox .bounds
467
485
key = w , h , self .figure .dpi
468
- try : self ._lastKey , self .renderer
469
- except AttributeError : need_new_renderer = True
470
- else : need_new_renderer = (self ._lastKey != key )
486
+ try :
487
+ self ._lastKey , self .renderer
488
+ except AttributeError :
489
+ need_new_renderer = True
490
+ else :
491
+ need_new_renderer = (self ._lastKey != key )
471
492
472
493
if need_new_renderer :
473
494
self .renderer = RendererAgg (w , h , self .figure .dpi )
@@ -477,17 +498,20 @@ def get_renderer(self, cleared=False):
477
498
return self .renderer
478
499
479
500
def tostring_rgb (self ):
480
- if __debug__ : verbose .report ('FigureCanvasAgg.tostring_rgb' ,
501
+ if __debug__ :
502
+ verbose .report ('FigureCanvasAgg.tostring_rgb' ,
481
503
'debug-annoying' )
482
504
return self .renderer .tostring_rgb ()
483
505
484
506
def tostring_argb (self ):
485
- if __debug__ : verbose .report ('FigureCanvasAgg.tostring_argb' ,
507
+ if __debug__ :
508
+ verbose .report ('FigureCanvasAgg.tostring_argb' ,
486
509
'debug-annoying' )
487
510
return self .renderer .tostring_argb ()
488
511
489
512
def buffer_rgba (self ):
490
- if __debug__ : verbose .report ('FigureCanvasAgg.buffer_rgba' ,
513
+ if __debug__ :
514
+ verbose .report ('FigureCanvasAgg.buffer_rgba' ,
491
515
'debug-annoying' )
492
516
return self .renderer .buffer_rgba ()
493
517
0 commit comments