@@ -1118,19 +1118,14 @@ def _clear(self, event):
1118
1118
def _clicked (self , event ):
1119
1119
if self .ignore (event ) or event .button != 1 or not self .ax .contains (event )[0 ]:
1120
1120
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 ()])
1134
1129
1135
1130
def set_label_props (self , props ):
1136
1131
"""
@@ -1656,18 +1651,14 @@ def _clear(self, event):
1656
1651
def _clicked (self , event ):
1657
1652
if self .ignore (event ) or event .button != 1 or not self .ax .contains (event )[0 ]:
1658
1653
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 ()])
1671
1662
1672
1663
def set_label_props (self , props ):
1673
1664
"""
0 commit comments