Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e62af58

Browse files
committed
Fix DPI scaling on macosx
Rename _device_scale to _dpi_ratio, as expected by Figure.set_size_inches(). Also, make sure the value of _dpi_ratio on instances of FigureCanvasMac are updated *before* setting figure DPI so that the proper value is available for downstream code. This is part of the fix needed to make set_size_inches work on macosx.
1 parent ec7509e commit e62af58

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

lib/matplotlib/backends/backend_macosx.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ def __init__(self, figure):
4646
FigureCanvasBase.__init__(self, figure)
4747
width, height = self.get_width_height()
4848
_macosx.FigureCanvas.__init__(self, width, height)
49-
self._device_scale = 1.0
49+
self._dpi_ratio = 1.0
5050

5151
def _set_device_scale(self, value):
52-
if self._device_scale != value:
53-
self.figure.dpi = self.figure.dpi / self._device_scale * value
54-
self._device_scale = value
52+
if self._dpi_ratio != value:
53+
# Need the new value in place before setting figure.dpi, which
54+
# will trigger a resize
55+
self._dpi_ratio, old_value = value, self._dpi_ratio
56+
self.figure.dpi = self.figure.dpi / old_value * self._dpi_ratio
5557

5658
def _draw(self):
5759
renderer = self.get_renderer(cleared=self.figure.stale)
@@ -77,8 +79,8 @@ def resize(self, width, height):
7779
dpi = self.figure.dpi
7880
width /= dpi
7981
height /= dpi
80-
self.figure.set_size_inches(width * self._device_scale,
81-
height * self._device_scale,
82+
self.figure.set_size_inches(width * self._dpi_ratio,
83+
height * self._dpi_ratio,
8284
forward=False)
8385
FigureCanvasBase.resize_event(self)
8486
self.draw_idle()

0 commit comments

Comments
 (0)