1818import matplotlib
1919from matplotlib .backends import _macosx
2020
21- from .backend_agg import RendererAgg
21+ from .backend_agg import RendererAgg , FigureCanvasAgg
2222
2323
2424class Show (ShowBase ):
@@ -83,7 +83,7 @@ class TimerMac(_macosx.Timer, TimerBase):
8383 # completely implemented at the C-level (in _macosx.Timer)
8484
8585
86- class FigureCanvasMac (_macosx .FigureCanvas , FigureCanvasBase ):
86+ class FigureCanvasMac (_macosx .FigureCanvas , FigureCanvasAgg ):
8787 """
8888 The canvas the figure renders into. Calls the draw and print fig
8989 methods, creates the renderers, etc...
@@ -98,21 +98,19 @@ class FigureCanvasMac(_macosx.FigureCanvas, FigureCanvasBase):
9898 key_press_event, and key_release_event are called from there.
9999 """
100100
101- filetypes = FigureCanvasBase .filetypes .copy ()
102- filetypes ['bmp' ] = 'Windows bitmap'
103- filetypes ['jpeg' ] = 'JPEG'
104- filetypes ['jpg' ] = 'JPEG'
105- filetypes ['gif' ] = 'Graphics Interchange Format'
106- filetypes ['tif' ] = 'Tagged Image Format File'
107- filetypes ['tiff' ] = 'Tagged Image Format File'
108-
109101 def __init__ (self , figure ):
110102 FigureCanvasBase .__init__ (self , figure )
111103 width , height = self .get_width_height ()
112104 _macosx .FigureCanvas .__init__ (self , width , height )
105+ self ._needs_draw = True
106+ self ._device_scale = 1.0
107+
108+ def _set_device_scale (self , value ):
109+ if self ._device_scale != value :
110+ self .figure .dpi = self .figure .dpi / self ._device_scale * value
111+ self ._device_scale = value
113112
114- @property
115- def renderer (self ):
113+ def get_renderer (self , cleared = False ):
116114 l , b , w , h = self .figure .bbox .bounds
117115 key = w , h , self .figure .dpi
118116 try :
@@ -125,62 +123,48 @@ def renderer(self):
125123 if need_new_renderer :
126124 self ._renderer = RendererAgg (w , h , self .figure .dpi )
127125 self ._lastKey = key
126+ elif cleared :
127+ self ._renderer .clear ()
128128
129129 return self ._renderer
130130
131- def _draw (self , device_scale ):
131+ def _draw (self ):
132+ renderer = self .get_renderer ()
133+
134+ if not self ._needs_draw :
135+ return renderer
136+
132137 figure = self .figure
133138
134139 orig_dpi = figure .dpi
135140 try :
136- figure .dpi *= device_scale
137- renderer = self .renderer
138141 figure .draw (renderer )
139142 finally :
140143 figure .dpi = orig_dpi
141144
145+ self ._needs_draw = False
146+
142147 return renderer
143148
149+ def draw (self ):
150+ self ._draw ()
151+ self .invalidate ()
152+
144153 def draw_idle (self , * args , ** kwargs ):
154+ self ._needs_draw = True
155+ self .invalidate ()
156+
157+ def blit (self , bbox ):
145158 self .invalidate ()
146159
147160 def resize (self , width , height ):
148161 dpi = self .figure .dpi
149162 width /= dpi
150163 height /= dpi
151- self .figure .set_size_inches (width , height )
164+ self .figure .set_size_inches (width * self ._device_scale ,
165+ height * self ._device_scale )
152166 FigureCanvasBase .resize_event (self )
153-
154- def _print_bitmap (self , filename , * args , ** kwargs ):
155- # In backend_bases.py, print_figure changes the dpi of the figure.
156- # But since we are essentially redrawing the picture, we need the
157- # original dpi. Pick it up from the renderer.
158- dpi = kwargs ['dpi' ]
159- old_dpi = self .figure .dpi
160- self .figure .dpi = self .renderer .dpi
161- width , height = self .figure .get_size_inches ()
162- width , height = width * dpi , height * dpi
163- filename = six .text_type (filename )
164- self .write_bitmap (filename , width , height , dpi )
165- self .figure .dpi = old_dpi
166-
167- def print_bmp (self , filename , * args , ** kwargs ):
168- self ._print_bitmap (filename , * args , ** kwargs )
169-
170- def print_jpg (self , filename , * args , ** kwargs ):
171- self ._print_bitmap (filename , * args , ** kwargs )
172-
173- def print_jpeg (self , filename , * args , ** kwargs ):
174- self ._print_bitmap (filename , * args , ** kwargs )
175-
176- def print_tif (self , filename , * args , ** kwargs ):
177- self ._print_bitmap (filename , * args , ** kwargs )
178-
179- def print_tiff (self , filename , * args , ** kwargs ):
180- self ._print_bitmap (filename , * args , ** kwargs )
181-
182- def print_gif (self , filename , * args , ** kwargs ):
183- self ._print_bitmap (filename , * args , ** kwargs )
167+ self .draw_idle ()
184168
185169 def new_timer (self , * args , ** kwargs ):
186170 """
0 commit comments