diff --git a/doc/api/next_api_changes/behavior/20611-MRR.rst b/doc/api/next_api_changes/behavior/20611-MRR.rst new file mode 100644 index 000000000000..62288874dc6b --- /dev/null +++ b/doc/api/next_api_changes/behavior/20611-MRR.rst @@ -0,0 +1,6 @@ +``RectangleSelector`` ``onselect`` now reports actual mouse press and release coordinates +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The current docstrings in `.RectangleSelector` describe ``onselect`` as a function with the +the signature ``def onselect(eclick: MouseEvent, erelease: MouseEvent)``. The +previous behaviour reported the ``extent`` of the rectangle, not the mouse event +coordinates. The new behaviour reports the actual mouse event coordinates. diff --git a/lib/matplotlib/tests/test_widgets.py b/lib/matplotlib/tests/test_widgets.py index 71ebd176f0b9..473fece3a796 100644 --- a/lib/matplotlib/tests/test_widgets.py +++ b/lib/matplotlib/tests/test_widgets.py @@ -17,8 +17,8 @@ def onselect(epress, erelease): ax._got_onselect = True assert epress.xdata == 100 assert epress.ydata == 100 - assert erelease.xdata == 199 - assert erelease.ydata == 199 + assert erelease.xdata == 200 + assert erelease.ydata == 200 tool = widgets.RectangleSelector(ax, onselect, **kwargs) do_event(tool, 'press', xdata=100, ydata=100, button=1) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index a199e45d4018..c7dbc1b80b15 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -2701,7 +2701,6 @@ def _press(self, event): if self._active_handle is None: x = event.xdata y = event.ydata - self.visible = False self.extents = x, x, y, y self.visible = True else: @@ -2714,25 +2713,13 @@ def _release(self, event): if not self._interactive: self._to_draw.set_visible(False) - # update the eventpress and eventrelease with the resulting extents - x0, x1, y0, y1 = self.extents - self._eventpress.xdata = x0 - self._eventpress.ydata = y0 - xy0 = self.ax.transData.transform([x0, y0]) - self._eventpress.x, self._eventpress.y = xy0 - - self._eventrelease.xdata = x1 - self._eventrelease.ydata = y1 - xy1 = self.ax.transData.transform([x1, y1]) - self._eventrelease.x, self._eventrelease.y = xy1 - # calculate dimensions of box or line if self.spancoords == 'data': - spanx = abs(self._eventpress.xdata - self._eventrelease.xdata) - spany = abs(self._eventpress.ydata - self._eventrelease.ydata) + spanx = abs(self._eventpress.xdata - event.xdata) + spany = abs(self._eventpress.ydata - event.ydata) elif self.spancoords == 'pixels': - spanx = abs(self._eventpress.x - self._eventrelease.x) - spany = abs(self._eventpress.y - self._eventrelease.y) + spanx = abs(self._eventpress.x - event.x) + spany = abs(self._eventpress.y - event.y) else: _api.check_in_list(['data', 'pixels'], spancoords=self.spancoords) @@ -2747,7 +2734,7 @@ def _release(self, event): return # call desired function - self.onselect(self._eventpress, self._eventrelease) + self.onselect(self._eventpress, event) self.update() return False 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