8000 Merge pull request #19059 from ianhi/blit · matplotlib/matplotlib@7db82ea · GitHub
[go: up one dir, main page]

Skip to content

Commit 7db82ea

Browse files
authored
Merge pull request #19059 from ianhi/blit
Support blitting in webagg backend
2 parents 5ab99ee + 2fbbec9 commit 7db82ea

File tree

2 files changed

+85
-92
lines changed

2 files changed

+85
-92
lines changed

lib/matplotlib/backends/backend_webagg_core.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def _handle_key(key):
118118

119119

120120
class FigureCanvasWebAggCore(backend_agg.FigureCanvasAgg):
121-
supports_blit = False
121+
supports_blit = True
122122

123123
def __init__(self, *args, **kwargs):
124124
super().__init__(*args, **kwargs)
@@ -153,6 +153,10 @@ def draw(self):
153153
finally:
154154
self.manager.refresh_all() # Swap the frames.
155155

156+
def blit(self, bbox=None):
157+
self._png_is_old = True
158+
self.manager.refresh_all()
159+
156160
def draw_idle(self):
157161
self.send_event("draw")
158162

@@ -189,18 +193,14 @@ def get_diff_image(self):
189193
output = buff
190194
else:
191195
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
196197
output = np.where(diff, buff, 0)
197198

198199
buf = BytesIO()
199200
data = output.view(dtype=np.uint8).reshape((*output.shape, 4))
200201
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)
204204
self._force_full = False
205205
self._png_is_old = False
206206
return buf.getvalue()
@@ -220,9 +220,10 @@ def get_renderer(self, cleared=None):
220220
if need_new_renderer:
221221
self._renderer = backend_agg.RendererAgg(
222222
w, h, self.figure.dpi)
223-
self._last_renderer = backend_agg.RendererAgg(
224-
w, h, self.figure.dpi)
225223
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)))
226227

227228
elif cleared:
228229
self._renderer.clear()

0 commit comments

Comments
 (0)
0