8000 Fix macosx backend for Matplotlib>=3.6. · matplotlib/mplcairo@58a75a4 · GitHub
[go: up one dir, main page]

Skip to content

Commit 58a75a4

Browse files
committed
Fix macosx backend for Matplotlib>=3.6.
1 parent 8c3c1e4 commit 58a75a4

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

CHANGELOG.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
next
22
====
33

4+
- Fixed support for macos backend on Matplotlib≥3.6.
45
- Support pdf MaxVersion up to 1.7 (if the underlying cairo supports it).
56

67
v0.5 (2022-08-18)

lib/mplcairo/macosx.py

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,46 @@
11
from matplotlib.backends.backend_macosx import _BackendMac, FigureCanvasMac
22

33
from . import _mplcairo
4-
from .base import FigureCanvasCairo
4+
from .base import FigureCanvasCairo, _LOCK
55

66

77
class FigureCanvasMacCairo(FigureCanvasCairo, FigureCanvasMac):
88

9-
def _draw(self):
10-
renderer = self.get_renderer()
11-
renderer.clear()
12-
self.figure.draw(renderer)
13-
# A bit hackish, but that's what _macosx.FigureCanvas wants...
14-
self._renderer = _mplcairo.cairo_to_straight_rgba8888(
15-
renderer._get_buffer())
16-
return self
9+
if hasattr(FigureCanvasMac, "_draw"):
10+
# Matplotlib<3.6.
11+
12+
def _draw(self):
13+
renderer = self.get_renderer()
14+
renderer.clear()
15+
self.figure.draw(renderer)
16+
# A bit hackish, but that's what _macosx.FigureCanvas wants...
17+
self._renderer = _mplcairo.cairo_to_straight_rgba8888(
18+
renderer._get_buffer())
19+
return self
20+
21+
else:
22+
# Matplotlib>=3.6: just a copy-paste of FigureCanvasMac.draw, but the
23+
# copy ensures that super() correctly refers to FigureCanvasCairo, not
24+
# FigureCanvasAgg.
25+
26+
def draw(self):
27+
if self._is_drawing:
28+
return
29+
self._is_drawing = True
30+
try:
31+
super().draw()
32+
finally:
33+
self._is_drawing = False
34+
self.update()
35+
36+
# Inheriting from FigureCanvasCairo.restore_region would call
37+
# super().draw() which would incorrectly refer to FigureCanvasAgg;
38+
# directly call self.update() instead.
39+
40+
def restore_region(self, region):
41+
with _LOCK:
42+
self.get_renderer().restore_region(region)
43+
self.update()
1744

1845

1946
@_BackendMac.export

0 commit comments

Comments
 (0)
0