18
18
import matplotlib
19
19
from matplotlib .backends import _macosx
20
20
21
- from .backend_agg import RendererAgg
21
+ from .backend_agg import RendererAgg , FigureCanvasAgg
22
22
23
23
24
24
class Show (ShowBase ):
@@ -83,7 +83,7 @@ class TimerMac(_macosx.Timer, TimerBase):
83
83
# completely implemented at the C-level (in _macosx.Timer)
84
84
85
85
86
- class FigureCanvasMac (_macosx .FigureCanvas , FigureCanvasBase ):
86
+ class FigureCanvasMac (_macosx .FigureCanvas , FigureCanvasAgg ):
87
87
"""
88
88
The canvas the figure renders into. Calls the draw and print fig
89
89
methods, creates the renderers, etc...
@@ -98,21 +98,19 @@ class FigureCanvasMac(_macosx.FigureCanvas, FigureCanvasBase):
98
98
key_press_event, and key_release_event are called from there.
99
99
"""
100
100
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
-
109
101
def __init__ (self , figure ):
110
102
FigureCanvasBase .__init__ (self , figure )
111
103
width , height = self .get_width_height ()
112
104
_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
113
112
114
- @property
115
- def renderer (self ):
113
+ def get_renderer (self , cleared = False ):
116
114
l , b , w , h = self .figure .bbox .bounds
117
115
key = w , h , self .figure .dpi
118
116
try :
@@ -125,62 +123,48 @@ def renderer(self):
125
123
if need_new_renderer :
126
124
self ._renderer = RendererAgg (w , h , self .figure .dpi )
127
125
self ._lastKey = key
126
+ elif cleared :
127
+ self ._renderer .clear ()
128
128
129
129
return self ._renderer
130
130
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
+
132
137
figure = self .figure
133
138
134
139
orig_dpi = figure .dpi
135
140
try :
136
- figure .dpi *= device_scale
137
- renderer = self .renderer
138
141
figure .draw (renderer )
139
142
finally :
140
143
figure .dpi = orig_dpi
141
144
145
+ self ._needs_draw = False
146
+
142
147
return renderer
143
148
149
+ def draw (self ):
150
+ self ._draw ()
151
+ self .invalidate ()
152
+
144
153
def draw_idle (self , * args , ** kwargs ):
154
+ self ._needs_draw = True
155
+ self .invalidate ()
156
+
157
+ def blit (self , bbox ):
145
158
self .invalidate ()
146
159
147
160
def resize (self , width , height ):
148
161
dpi = self .figure .dpi
149
162
width /= dpi
150
163
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 )
152
166
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 ()
184
168
185
169
def new_timer (self , * args , ** kwargs ):
186
170
"""
0 commit comments