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

Skip to content

Commit 0974d53

Browse files
committed
Avoid changing dpi in Text.get_window_extent if unspecified.
Somehow this causes height changes to propagate from the canvas until it's zero-height (for Tk at least). This is probably a bug, but it's much more subtle and difficult to find, so this patch will suffice for now.
1 parent ff365ec commit 0974d53

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

lib/matplotlib/text.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import logging
77
import math
88
import weakref
9+
try:
10+
from contextlib import nullcontext
11+
except ImportError:
12+
from contextlib import ExitStack as nullcontext # Py 3.6.
913

1014
import numpy as np
1115

@@ -891,21 +895,26 @@ def get_window_extent(self, renderer=None, dpi=None):
891895
#return _unit_box
892896
if not self.get_visible():
893897
return Bbox.unit()
894-
if dpi is None:
895-
dpi = self.figure.dpi
896-
if self.get_text() == '':
897-
with cbook._setattr_cm(self.figure, dpi=dpi):
898+
if dpi is not None:
899+
dpi_context = cbook._setattr_cm(self.figure, dpi=dpi)
900+
else:
901+
# This should not be necessary, but causes subtle bugs with some
902+
# backends.
903+
# See https://github.com/matplotlib/matplotlib/issues/16926
904+
dpi_context = contextlib.nullcontext()
905+
906+
with dpi_context:
907+
if self.get_text() == '':
898908
tx, ty = self._get_xy_display()
899909
return Bbox.from_bounds(tx, ty, 0, 0)
900910

901-
if renderer is not None:
902-
self._renderer = renderer
903-
if self._renderer is None:
904-
self._renderer = self.figure._cachedRenderer
905-
if self._renderer is None:
906-
raise RuntimeError('Cannot get window extent w/o renderer')
911+
if renderer is not None:
912+
self._renderer = renderer
913+
if self._renderer is None:
914+
self._renderer = self.figure._cachedRenderer
915+
if self._renderer is None:
916+
raise RuntimeError('Cannot get window extent w/o renderer')
907917

908-
with cbook._setattr_cm(self.figure, dpi=dpi):
909918
bbox, info, descent = self._get_layout(self._renderer)
910919
x, y = self.get_unitless_position()
911920
x, y = self.get_transform().transform((x, y))

0 commit comments

Comments
 (0)