From 2b50a5cafba16c0636b666284e1aaeddc0d6080e Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Fri, 16 Sep 2022 11:29:51 +0200 Subject: [PATCH] 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. --- lib/matplotlib/offsetbox.py | 67 +++++++------------------------------ 1 file changed, 13 insertions(+), 54 deletions(-) diff --git a/lib/matplotlib/offsetbox.py b/lib/matplotlib/offsetbox.py index 25cab904b77c..89bd3550f3a6 100644 --- a/lib/matplotlib/offsetbox.py +++ b/lib/matplotlib/offsetbox.py @@ -350,8 +350,12 @@ def get_window_extent(self, renderer=None): # docstring inherited if renderer is None: renderer = self.figure._get_renderer() - w, h, xd, yd, offsets = self.get_extent_offsets(renderer) - px, py = self.get_offset(w, h, xd, yd, renderer) + w, h, xd, yd = self.get_extent(renderer) + # Some subclasses redefine get_offset to take no args. + try: + px, py = self.get_offset(w, h, xd, yd, renderer) + except TypeError: + px, py = self.get_offset() return mtransforms.Bbox.from_bounds(px - xd, py - yd, w, h) def draw(self, renderer): @@ -636,15 +640,6 @@ def get_offset(self): """Return offset of the container.""" return self._offset - def get_window_extent(self, renderer=None): - # docstring inherited - if renderer is None: - renderer = self.figure._get_renderer() - w, h, xd, yd = self.get_extent(renderer) - ox, oy = self.get_offset() # w, h, xd, yd) - - return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h) - def get_extent(self, renderer): """Return width, height, xdescent, ydescent of box.""" dpi_cor = renderer.points_to_pixels(1.) @@ -773,14 +768,6 @@ def get_offset(self): """Return offset of the container.""" return self._offset - def get_window_extent(self, renderer=None): - # docstring inherited - if renderer is None: - renderer = self.figure._get_renderer() - w, h, xd, yd = self.get_extent(renderer) - ox, oy = self.get_offset() - return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h) - def get_extent(self, renderer): _, h_, d_ = renderer.get_text_width_height_descent( "lp", self._text._fontproperties, @@ -876,14 +863,6 @@ def get_offset(self): """Return offset of the container.""" return self._offset - def get_window_extent(self, renderer=None): - # docstring inherited - if renderer is None: - renderer = self.figure._get_renderer() - w, h, xd, yd = self.get_extent(renderer) - ox, oy = self.get_offset() # w, h, xd, yd) - return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h) - def get_extent(self, renderer): # clear the offset transforms _off = self.offset_transform.get_matrix() # to be restored later @@ -1061,26 +1040,14 @@ def set_bbox_to_anchor(self, bbox, transform=None): self._bbox_to_anchor_transform = transform self.stale = True - def get_window_extent(self, renderer=None): + def get_offset(self, width, height, xdescent, ydescent, renderer): # docstring inherited - if renderer is None: - renderer = self.figure._get_renderer() - - # Update the offset func, which depends on the dpi of the renderer - # (because of the padding). - fontsize = renderer.points_to_pixels(self.prop.get_size_in_points()) - - def _offset(w, h, xd, yd, renderer): - bbox = Bbox.from_bounds(0, 0, w, h) - pad = self.borderpad * fontsize - bbox_to_anchor = self.get_bbox_to_anchor() - x0, y0 = _get_anchored_bbox(self.loc, bbox, bbox_to_anchor, pad) - return x0 + xd, y0 + yd - - self.set_offset(_offset) - w, h, xd, yd = self.get_extent(renderer) - ox, oy = self.get_offset(w, h, xd, yd, renderer) - return Bbox.from_bounds(ox - xd, oy - yd, w, h) + bbox = Bbox.from_bounds(0, 0, width, height) + pad = (self.borderpad + * renderer.points_to_pixels(self.prop.get_size_in_points())) + bbox_to_anchor = self.get_bbox_to_anchor() + x0, y0 = _get_anchored_bbox(self.loc, bbox, bbox_to_anchor, pad) + return x0 + xdescent, y0 + ydescent def update_frame(self, bbox, fontsize=None): self.patch.set_bounds(bbox.bounds) @@ -1220,14 +1187,6 @@ def get_offset(self): def get_children(self): return [self.image] - def get_window_extent(self, renderer=None): - # docstring inherited - if renderer is None: - renderer = self.figure._get_renderer() - w, h, xd, yd = self.get_extent(renderer) - ox, oy = self.get_offset() - return mtransforms.Bbox.from_bounds(ox - xd, oy - yd, w, h) - def get_extent(self, renderer): if self._dpi_cor: # True, do correction dpi_cor = renderer.points_to_pixels(1.) pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy