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

Skip to content

Commit 2b50a5c

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 2b50a5c

File tree

1 file changed

+13
-54
lines changed

1 file changed

+13
-54
lines changed

lib/matplotlib/offsetbox.py

Lines changed: 13 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -350,8 +350,12 @@ def get_window_extent(self, renderer=None):
350350
# docstring inherited
351351
if renderer is None:
352352
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)
353+
w, h, xd, yd = self.get_extent(renderer)
354+
# Some subclasses redefine get_offset to take no args.
355+
try:
356+
px, py = self.get_offset(w, h, xd, yd, renderer)
357+
except TypeError:
358+
px, py = self.get_offset()
355359
return mtransforms.Bbox.from_bounds(px - xd, py - yd, w, h)
356360

357361
def draw(self, renderer):
@@ -636,15 +640,6 @@ def get_offset(self):
636640
"""Return offset of the container."""
637641
return self._offset
638642

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-
648643
def get_extent(self, renderer):
649644
"""Return width, height, xdescent, ydescent of box."""
650645
dpi_cor = renderer.points_to_pixels(1.)
@@ -773,14 +768,6 @@ def get_offset(self):
773768
"""Return offset of the container."""
774769
return self._offset
775770

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-
784771
def get_extent(self, renderer):
785772
_, h_, d_ = renderer.get_text_width_height_descent(
786773
"lp", self._text._fontproperties,
@@ -876,14 +863,6 @@ def get_offset(self):
876863
"""Return offset of the container."""
877864
return self._offset
878865

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-
887866
def get_extent(self, renderer):
888867
# clear the offset transforms
889868
_off = self.offset_transform.get_matrix() # to be restored later
@@ -1061,26 +1040,14 @@ def set_bbox_to_anchor(self, bbox, transform=None):
10611040
self._bbox_to_anchor_transform = transform
10621041
self.stale = True
10631042

1064-
def get_window_extent(self, renderer=None):
1043+
def get_offset(self, width, height, xdescent, ydescent, renderer):
10651044
# 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)
1045+
bbox = Bbox.from_bounds(0, 0, width, height)
1046+
pad = (self.borderpad
1047+
* renderer.points_to_pixels(self.prop.get_size_in_points()))
1048+
bbox_to_anchor = self.get_bbox_to_anchor()
1049+
x0, y0 = _get_anchored_bbox(self.loc, bbox, bbox_to_anchor, pad)
1050+
return x0 + xdescent, y0 + ydescent
10841051

10851052
def update_frame(self, bbox, fontsize=None):
10861053
self.patch.set_bounds(bbox.bounds)
@@ -1220,14 +1187,6 @@ def get_offset(self):
12201187
def get_children(self):
12211188
return [self.image]
12221189

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-
12311190
def get_extent(self, renderer):
12321191
if self._dpi_cor: # True, do correction
12331192
dpi_cor = renderer.points_to_pixels(1.)

0 commit comments

Comments
 (0)