@@ -118,7 +118,7 @@ def _handle_key(key):
118
118
119
119
120
120
class FigureCanvasWebAggCore (backend_agg .FigureCanvasAgg ):
121
- supports_blit = False
121
+ supports_blit = True
122
122
123
123
def __init__ (self , * args , ** kwargs ):
124
124
super ().__init__ (* args , ** kwargs )
@@ -153,6 +153,10 @@ def draw(self):
153
153
finally :
154
154
self .manager .refresh_all () # Swap the frames.
155
155
156
+ def blit (self , bbox = None ):
157
+ self ._png_is_old = True
158
+ self .manager .refresh_all ()
159
+
156
160
def draw_idle (self ):
157
161
self .send_event ("draw" )
158
162
@@ -189,18 +193,14 @@ def get_diff_image(self):
189
193
output = buff
190
194
else :
191
195
self .set_image_mode ('diff' )
192
- last_buffer = (np .frombuffer (self ._last_renderer .buffer_rgba (),
193
- dtype = np .uint32 )
194
- .reshape ((renderer .height , renderer .width )))
195
- diff = buff != last_buffer
196
+ diff = buff != self ._last_buff
196
197
output = np .where (diff , buff , 0 )
197
198
198
199
buf = BytesIO ()
199
200
data = output .view (dtype = np .uint8 ).reshape ((* output .shape , 4 ))
200
201
Image .fromarray (data ).save (buf , format = "png" )
201
- # Swap the renderer frames
202
- self ._renderer , self ._last_renderer = (
203
- self ._last_renderer , renderer )
202
+ # store the current buffer so we can compute the next diff
203
+ np .copyto (self ._last_buff , buff )
204
204
self ._force_full = False
205
205
self ._png_is_old = False
206
206
return buf .getvalue ()
@@ -220,9 +220,10 @@ def get_renderer(self, cleared=None):
220
220
if need_new_renderer :
221
221
self ._renderer = backend_agg .RendererAgg (
222
222
w , h , self .figure .dpi )
223
- self ._last_renderer = backend_agg .RendererAgg (
224
- w , h , self .figure .dpi )
225
223
self ._lastKey = key
224
+ self ._last_buff = np .copy (np .frombuffer (
225
+ self ._renderer .buffer_rgba (), dtype = np .uint32
226
+ ).reshape ((self ._renderer .height , self ._renderer .width )))
226
227
227
228
elif cleared :
228
229
self ._renderer .clear ()
0 commit comments