Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7db82ea

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

File tree

Expand file treeCollapse file tree

2 files changed

+85
-92
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+85
-92
lines changed

‎lib/matplotlib/backends/backend_webagg_core.py

Copy file name to clipboardExpand all lines: lib/matplotlib/backends/backend_webagg_core.py
+11-10Lines 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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.