@@ -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 )
@@ -141,6 +141,9 @@ def __init__(self, *args, **kwargs):
141
141
# occurs automatically for all images on a HiDPI display.
142
142
self ._dpi_ratio = 1
143
143
144
+ # # Create a buffer to store the last image so we can compute a diff
145
+ # self._last_buffer = None
146
+
144
147
def show (self ):
145
148
# show the figure window
146
149
from matplotlib .pyplot import show
@@ -153,6 +156,10 @@ def draw(self):
153
156
finally :
154
157
self .manager .refresh_all () # Swap the frames.
155
158
159
+ def blit (self , bbox = None ):
160
+ self ._png_is_old = True
161
+ self .manager .refresh_all ()
162
+
156
163
def draw_idle (self ):
157
164
self .send_event ("draw" )
158
165
@@ -189,18 +196,14 @@ def get_diff_image(self):
189
196
output = buff
190
197
else :
191
198
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
199
+ diff = buff != self ._last_buff
196
200
output = np .where (diff , buff , 0 )
197
201
198
202
buf = BytesIO ()
199
203
data = output .view (dtype = np .uint8 ).reshape ((* output .shape , 4 ))
200
204
Image .fromarray (data ).save (buf , format = "png" )
201
- # Swap the renderer frames
202
- self ._renderer , self ._last_renderer = (
203
- self ._last_renderer , renderer )
205
+ # store the current buffer so we can compute the next diff
206
+ np .copyto (self ._last_buff , buff )
204
207
self ._force_full = False
205
208
self ._png_is_old = False
206
209
return buf .getvalue ()
@@ -220,9 +223,10 @@ def get_renderer(self, cleared=None):
220
223
if need_new_renderer :
221
224
self ._renderer = backend_agg .RendererAgg (
222
225
w , h , self .figure .dpi )
223
- self ._last_renderer = backend_agg .RendererAgg (
224
- w , h , self .figure .dpi )
225
226
self ._lastKey = key
227
+ self ._last_buff = np .copy (np .frombuffer (
228
+ self ._renderer .buffer_rgba (), dtype = np .uint32
229
+ ).reshape ((self ._renderer .height , self ._renderer .width )))
226
230
227
231
elif cleared :
228
232
self ._renderer .clear ()
0 commit comments