Skip to content

Commit d60de5e

Browse files
authored
Merge pull request #26903 from anntzer/wc
Simplify CheckButtons and RadioButtons click handler.
2 parents 23b51bf + 82ff273 commit d60de5e

File tree

1 file changed

+16
-25
lines changed

1 file changed

+16
-25
lines changed

lib/matplotlib/widgets.py

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,19 +1118,14 @@ def _clear(self, event):
11181118
def _clicked(self, event):
11191119
if self.ignore(event) or event.button != 1 or not self.ax.contains(event)[0]:
11201120
return
1121-
pclicked = self.ax.transAxes.inverted().transform((event.x, event.y))
1122-
distances = {}
1123-
_, frame_inds = self._frames.contains(event)
1124-
coords = self._frames.get_offset_transform().transform(
1125-
self._frames.get_offsets()
1126-
)
1127-
for i, t in enumerate(self.labels):
1128-
if (i in frame_inds["ind"]
1129-
or t.get_window_extent().contains(event.x, event.y)):
1130-
distances[i] = np.linalg.norm(pclicked - coords[i])
1131-
if len(distances) > 0:
1132-
closest = min(distances, key=distances.get)
1133-
self.set_active(closest)
1121+
idxs = [ # Indices of frames and of texts that contain the event.
1122+
*self._frames.contains(event)[1]["ind"],
1123+
*[i for i, text in enumerate(self.labels) if text.contains(event)[0]]]
1124+
if idxs:
1125+
coords = self._frames.get_offset_transform().transform(
1126+
self._frames.get_offsets())
1127+
self.set_active( # Closest index, only looking in idxs.
1128+
idxs[(((event.x, event.y) - coords[idxs]) ** 2).sum(-1).argmin()])
11341129

11351130
def set_label_props(self, props):
11361131
"""
@@ -1656,18 +1651,14 @@ def _clear(self, event):
16561651
def _clicked(self, event):
16571652
if self.ignore(event) or event.button != 1 or not self.ax.contains(event)[0]:
16581653
return
1659-
pclicked = self.ax.transAxes.inverted().transform((event.x, event.y))
1660-
_, inds = self._buttons.contains(event)
1661-
coords = self._buttons.get_offset_transform().transform(
1662-
self._buttons.get_offsets())
1663-
distances = {}
1664-
for i, t in enumerate(self.labels):
1665-
if (i in inds["ind"]
1666-
or t.get_window_extent().contains(event.x, event.y)):
1667-
distances[i] = np.linalg.norm(pclicked - coords[i])
1668-
if len(distances) > 0:
1669-
closest = min(distances, key=distances.get)
1670-
self.set_active(closest)
1654+
idxs = [ # Indices of buttons and of texts that contain the event.
1655+
*self._buttons.contains(event)[1]["ind"],
1656+
*[i for i, text in enumerate(self.labels) if text.contains(event)[0]]]
1657+
if idxs:
1658+
coords = self._buttons.get_offset_transform().transform(
1659+
self._buttons.get_offsets())
1660+
self.set_active( # Closest index, only looking in idxs.
1661+
idxs[(((event.x, event.y) - coords[idxs]) ** 2).sum(-1).argmin()])
16711662

16721663
def set_label_props(self, props):
16731664
"""

0 commit comments

Comments
 (0)