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

Skip to content

Commit 5a467eb

Browse files
committed
Inherit OffsetBox.get_window_extent.
Adjust OffsetBox.get_window_extent to use get_extent (which is typically redefined in subclasses) instead of get_extent_offsets (which is not), and make it check whether the current class' get_offset takes any arguments or not (which is not consistent, but fixing that requires some backcompat work). Also set the offset-getter of AnchoredOffsetbox as a fixed method on the class, rather than dynamicaly setting in that class' get_extent_offset. These changes then let us inherit the implementation of OffsetBox.get_window_extent across most subclasses instead of having to copy-paste it again and again.
1 parent 5c45952 commit 5a467eb

File tree

1 file changed

+15
-54
lines changed

1 file changed

+15
-54
lines changed

lib/matplotlib/offsetbox.py

Lines changed: 15 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
Contains a single `.Text` instance.
2323
"""
2424

25+
import inspect
26+
2527
import numpy as np
2628

2729
import matplotlib as mpl
@@ -350,8 +352,12 @@ def get_window_extent(self, renderer=None):
350352
# docstring inherited
351353
if renderer is None:
352354
renderer = self.figure._get_renderer()
353-
w, h, xd, yd, offsets = self.get_extent_offsets(renderer)
354-
px, py = self.get_offset(w, h, xd, yd, renderer)
355+
w, h, xd, yd = self.get_extent(renderer)
356+
# Some subclasses redefine get_offset to take no args.
357+
if inspect.signature(self.get_offset).parameters:
358+
px, py = self.get_offset(w, h, xd, yd, renderer)
359+
else:
360+
px, py = self.get_offset()
355361
return mtransforms.Bbox.from_bounds(px - xd, py - yd, w, h)
356362

357363
def draw(self, renderer):
@@ -636,15 +642,6 @@ def get_offset(self):
636642
"""Return offset of the container."""
637643
return self._offset
638644

639-
def get_window_extent(self, renderer=None):
640-
# docstring inherited
641-
if renderer is None:
642-
renderer = self.figure._get_renderer()
643-
w, h, xd, yd = self.get_extent(renderer)
644-
ox, oy = self.get_offset() # w, h, xd, yd)
645-
646-
return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h)
647-
648645
def get_extent(self, renderer):
649646
"""Return width, height, xdescent, ydescent of box."""
650647
dpi_cor = renderer.points_to_pixels(1.)
@@ -773,14 +770,6 @@ def get_offset(self):
773770
"""Return offset of the container."""
774771
return self._offset
775772

776-
def get_window_extent(self, renderer=None):
777-
# docstring inherited
778-
if renderer is None:
779-
renderer = self.figure._get_renderer()
780-
w, h, xd, yd = self.get_extent(renderer)
781-
ox, oy = self.get_offset()
782-
return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h)
783-
784773
def get_extent(self, renderer):
785774
_, h_, d_ = renderer.get_text_width_height_descent(
786775
"lp", self._text._fontproperties,
@@ -876,14 +865,6 @@ def get_offset(self):
876865
"""Return offset of the container."""
877866
return self._offset
878867

879-
def get_window_extent(self, renderer=None):
880-
# docstring inherited
881-
if renderer is None:
882-
renderer = self.figure._get_renderer()
883-
w, h, xd, yd = self.get_extent(renderer)
884-
ox, oy = self.get_offset() # w, h, xd, yd)
885-
return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h)
886-
887868
def get_extent(self, renderer):
888869
# clear the offset transforms
889870
_off = self.offset_transform.get_matrix() # to be restored later
@@ -1061,26 +1042,14 @@ def set_bbox_to_anchor(self, bbox, transform=None):
10611042
self._bbox_to_anchor_transform = transform
10621043
self.stale = True
10631044

1064-
def get_window_extent(self, renderer=None):
1045+
def get_offset(self, width, height, xdescent, ydescent, renderer):
10651046
# docstring inherited
1066-
if renderer is None:
1067-
renderer = self.figure._get_renderer()
1068-
1069-
# Update the offset func, which depends on the dpi of the renderer
1070-
# (because of the padding).
1071-
fontsize = renderer.points_to_pixels(self.prop.get_size_in_points())
1072-
1073-
def _offset(w, h, xd, yd, renderer):
1074-
bbox = Bbox.from_bounds(0, 0, w, h)
1075-
pad = self.borderpad * fontsize
1076-
bbox_to_anchor = self.get_bbox_to_anchor()
1077-
x0, y0 = _get_anchored_bbox(self.loc, bbox, bbox_to_anchor, pad)
1078-
return x0 + xd, y0 + yd
1079-
1080-
self.set_offset(_offset)
1081-
w, h, xd, yd = self.get_extent(renderer)
1082-
ox, oy = self.get_offset(w, h, xd, yd, renderer)
1083-
return Bbox.from_bounds(ox - xd, oy - yd, w, h)
1047+
bbox = Bbox.from_bounds(0, 0, width, height)
1048+
pad = (self.borderpad
1049+
* renderer.points_to_pixels(self.prop.get_size_in_points()))
1050+
bbox_to_anchor = self.get_bbox_to_anchor()
1051+
x0, y0 = _get_anchored_bbox(self.loc, bbox, bbox_to_anchor, pad)
1052+
return x0 + xdescent, y0 + ydescent
10841053

10851054
def update_frame(self, bbox, fontsize=None):
10861055
self.patch.set_bounds(bbox.bounds)
@@ -1220,14 +1189,6 @@ def get_offset(self):
12201189
def get_children(self):
12211190
return [self.image]
12221191

1223-
def get_window_extent(self, renderer=None):
1224-
# docstring inherited
1225-
if renderer is None:
1226-
renderer = self.figure._get_renderer()
1227-
w, h, xd, yd = self.get_extent(renderer)
1228-
ox, oy = self.get_offset()
1229-
return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h)
1230-
12311192
def get_extent(self, renderer):
12321193
if self._dpi_cor: # True, do correction
12331194
dpi_cor = renderer.points_to_pixels(1.)

0 commit comments

Comments
 (0)