From 27da912bda6d6bcd6f79ce75caf3c33f496dc75e Mon Sep 17 00:00:00 2001 From: Steven Silvester Date: Sat, 25 Jun 2016 08:51:00 -0500 Subject: [PATCH] Clean up rectangle selector span validation Fix rectangle selector release bug Clean up span checking in release --- lib/matplotlib/widgets.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index 9ffa30a4a1f8..20fe3b12f446 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1833,6 +1833,18 @@ def _release(self, event): if not self.interactive: self.to_draw.set_visible(False) + # update the eventpress and eventrelease with the resulting extents + x1, x2, y1, y2 = self.extents + self.eventpress.xdata = x1 + self.eventpress.ydata = y1 + xy1 = self.ax.transData.transform_point([x1, y1]) + self.eventpress.x, self.eventpress.y = xy1 + + self.eventrelease.xdata = x2 + self.eventrelease.ydata = y2 + xy2 = self.ax.transData.transform_point([x2, y2]) + self.eventrelease.x, self.eventrelease.y = xy2 + if self.spancoords == 'data': xmin, ymin = self.eventpress.xdata, self.eventpress.ydata xmax, ymax = self.eventrelease.xdata, self.eventrelease.ydata @@ -1854,27 +1866,16 @@ def _release(self, event): xproblems = self.minspanx is not None and spanx < self.minspanx yproblems = self.minspany is not None and spany < self.minspany - if (((self.drawtype == 'box') or (self.drawtype == 'line')) and - (xproblems or yproblems)): - # check if drawn distance (if it exists) is not too small in - # neither x nor y-direction - self.extents = [0, 0, 0, 0] + # check if drawn distance (if it exists) is not too small in + # either x or y-direction + if self.drawtype != 'none' and (xproblems or yproblems): + for artist in self.artists: + artist.set_visible(False) + self.update() return - # update the eventpress and eventrelease with the resulting extents - x1, x2, y1, y2 = self.extents - self.eventpress.xdata = x1 - self.eventpress.ydata = y1 - xy1 = self.ax.transData.transform_point([x1, y1]) - self.eventpress.x, self.eventpress.y = xy1 - - self.eventrelease.xdata = x2 - self.eventrelease.ydata = y2 - xy2 = self.ax.transData.transform_point([x2, y2]) - self.eventrelease.x, self.eventrelease.y = xy2 - + # call desired function self.onselect(self.eventpress, self.eventrelease) - # call desired function self.update() return False