diff --git a/doc/users/next_whats_new/2017-11-24_figurecanvas_inaxes.rst b/doc/users/next_whats_new/2017-11-24_figurecanvas_inaxes.rst new file mode 100644 index 000000000000..6de6f8a7740d --- /dev/null +++ b/doc/users/next_whats_new/2017-11-24_figurecanvas_inaxes.rst @@ -0,0 +1,6 @@ + +Add ``inaxes`` method to FigureCanvas +------------------------------------------------------------- + +The `FigureCanvas` class has now an ``inaxes`` method to check whether a point is in an axes +and returns the topmost axes, else None. diff --git a/lib/matplotlib/backend_bases.py b/lib/matplotlib/backend_bases.py index 7fec6081f405..a8d546003158 100644 --- a/lib/matplotlib/backend_bases.py +++ b/lib/matplotlib/backend_bases.py @@ -1496,15 +1496,12 @@ def __init__(self, name, canvas, x, y, guiEvent=None): self._update_enter_leave() return - # Find all axes containing the mouse if self.canvas.mouse_grabber is None: - axes_list = [a for a in self.canvas.figure.get_axes() - if a.in_axes(self)] + self.inaxes = self.canvas.inaxes((x, y)) else: - axes_list = [self.canvas.mouse_grabber] + self.inaxes = self.canvas.mouse_grabber - if axes_list: - self.inaxes = cbook._topmost_artist(axes_list) + if self.inaxes is not None: try: trans = self.inaxes.transData.inverted() xdata, ydata = trans.transform_point((x, y)) @@ -1514,8 +1511,6 @@ def __init__(self, name, canvas, x, y, guiEvent=None): else: self.xdata = xdata self.ydata = ydata - else: - self.inaxes = None self._update_enter_leave() @@ -1993,6 +1988,39 @@ def enter_notify_event(self, guiEvent=None, xy=None): event = LocationEvent('figure_enter_event', self, x, y, guiEvent) self.callbacks.process('figure_enter_event', event) + @cbook.deprecated("2.1") + def idle_event(self, guiEvent=None): + """Called when GUI is idle.""" + s = 'idle_event' + event = IdleEvent(s, self, guiEvent=guiEvent) + self.callbacks.process(s, event) + + def inaxes(self, xy): + """ + Check if a point is in an axes. + + Parameters + ---------- + xy : tuple or list + (x,y) coordinates. + x position - pixels from left of canvas. + y position - pixels from bottom of canvas. + + Returns + ------- + axes: topmost axes containing the point, or None if no axes. + + """ + axes_list = [a for a in self.figure.get_axes() + if a.patch.contains_point(xy)] + + if axes_list: + axes = cbook._topmost_artist(axes_list) + else: + axes = None + + return axes + def grab_mouse(self, ax): """ Set the child axes which are currently grabbing the mouse events.
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: