Revision: 8210
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8210&view=rev
Author:   leejjoon
Date:     2010-03-22 16:47:27 +0000 (Mon, 22 Mar 2010)

Log Message:
-----------
fix incorrect rubber band during the zoom mode when mouse the axes

Modified Paths:
--------------
    trunk/matplotlib/CHANGELOG
    trunk/matplotlib/lib/matplotlib/backend_bases.py

Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG  2010-03-21 22:02:31 UTC (rev 8209)
+++ trunk/matplotlib/CHANGELOG  2010-03-22 16:47:27 UTC (rev 8210)
@@ -1,3 +1,6 @@
+2010-03-22 fix incorrect rubber band during the zoom mode when mouse 
+           leaves the axes. -JJL
+
 2010-03-21 x/y key during the zoom mode only changes the x/y limits. -JJL
 
 2010-03-20 Added pyplot.sca() function suggested by JJL. - EF

Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backend_bases.py    2010-03-21 22:02:31 UTC 
(rev 8209)
+++ trunk/matplotlib/lib/matplotlib/backend_bases.py    2010-03-22 16:47:27 UTC 
(rev 8210)
@@ -2124,18 +2124,6 @@
                 if self._lastCursor != cursors.SELECT_REGION:
                     self.set_cursor(cursors.SELECT_REGION)
                     self._lastCursor = cursors.SELECT_REGION
-                if self._xypress:
-                    x, y = event.x, event.y
-                    lastx, lasty, a, ind, lim, trans = self._xypress[0]
-
-                    if self._zoom_mode == "x":
-                        x1, y1, x2, y2 = event.inaxes.bbox.extents
-                        y, lasty = y1, y2
-                    elif self._zoom_mode == "y":
-                        x1, y1, x2, y2 = event.inaxes.bbox.extents
-                        x, lastx = x1, x2
-                        
-                    self.draw_rubberband(event, x, y, lastx, lasty)
             elif (self._active=='PAN' and
                   self._lastCursor != cursors.MOVE):
                 self.set_cursor(cursors.MOVE)
@@ -2237,12 +2225,14 @@
                     and a.get_navigate() and a.can_zoom():
                 self._xypress.append(( x, y, a, i, a.viewLim.frozen(), 
a.transData.frozen()))
 
-        id1 = self.canvas.mpl_connect('key_press_event',
+        id1 = self.canvas.mpl_connect('motion_notify_event', self.drag_zoom)
+
+        id2 = self.canvas.mpl_connect('key_press_event',
                                       self._switch_on_zoom_mode)
-        id2 = self.canvas.mpl_connect('key_release_event',
+        id3 = self.canvas.mpl_connect('key_release_event',
                                       self._switch_off_zoom_mode)
 
-        self._ids_zoom = id1, id2
+        self._ids_zoom = id1, id2, id3
         
         self._zoom_mode = event.key
 
@@ -2301,6 +2291,29 @@
             a.drag_pan(self._button_pressed, event.key, event.x, event.y)
         self.dynamic_update()
 
+    def drag_zoom(self, event):
+        'the drag callback in zoom mode'
+
+        if self._xypress:
+            x, y = event.x, event.y
+            lastx, lasty, a, ind, lim, trans = self._xypress[0]
+
+            # adjust x, last, y, last 
+            x1, y1, x2, y2 = a.bbox.extents
+            x, lastx = max(min(x, lastx), x1), min(max(x, lastx), x2)
+            y, lasty = max(min(y, lasty), y1), min(max(y, lasty), y2)
+            
+            if self._zoom_mode == "x":
+                x1, y1, x2, y2 = a.bbox.extents
+                y, lasty = y1, y2
+            elif self._zoom_mode == "y":
+                x1, y1, x2, y2 = a.bbox.extents
+                x, lastx = x1, x2
+
+            self.draw_rubberband(event, x, y, lastx, lasty)
+
+
+
     def release_zoom(self, event):
         'the release mouse button callback in zoom to rect mode'
         if not self._xypress: return
@@ -2313,7 +2326,6 @@
         for cur_xypress in self._xypress:
             x, y = event.x, event.y
             lastx, lasty, a, ind, lim, trans = cur_xypress
-
             # ignore singular clicks - 5 pixels is a threshold
             if abs(x-lastx)<5 or abs(y-lasty)<5:
                 self._xypress = None


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to