@@ -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