|
From: <lee...@us...> - 2010-03-21 22:02:38
|
Revision: 8209
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8209&view=rev
Author: leejjoon
Date: 2010-03-21 22:02:31 +0000 (Sun, 21 Mar 2010)
Log Message:
-----------
x or y key during the zoom mode only change the x or y limits
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/lib/matplotlib/backend_bases.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2010-03-21 19:27:52 UTC (rev 8208)
+++ trunk/matplotlib/CHANGELOG 2010-03-21 22:02:31 UTC (rev 8209)
@@ -1,3 +1,5 @@
+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
2010-03-20 Added conditional support for new Tooltip API in gtk backend. - EF
Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-03-21 19:27:52 UTC (rev 8208)
+++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2010-03-21 22:02:31 UTC (rev 8209)
@@ -2049,6 +2049,10 @@
self._lastCursor = None
self._init_toolbar()
self._idDrag=self.canvas.mpl_connect('motion_notify_event', self.mouse_move)
+
+ self._ids_zoom = None
+ self._zoom_mode = None
+
self._button_pressed = None # determined by the button pressed at start
self.mode = '' # a mode string for the status bar
@@ -2123,6 +2127,14 @@
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):
@@ -2225,8 +2237,26 @@
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',
+ self._switch_on_zoom_mode)
+ id2 = self.canvas.mpl_connect('key_release_event',
+ self._switch_off_zoom_mode)
+
+ self._ids_zoom = id1, id2
+
+ self._zoom_mode = event.key
+
+
self.press(event)
+ def _switch_on_zoom_mode(self, event):
+ self._zoom_mode = event.key
+ self.mouse_move(event)
+
+ def _switch_off_zoom_mode(self, event):
+ self._zoom_mode = None
+ self.mouse_move(event)
+
def push_current(self):
'push the current view limits and position onto the stack'
lims = []; pos = []
@@ -2275,6 +2305,9 @@
'the release mouse button callback in zoom to rect mode'
if not self._xypress: return
+ for zoom_id in self._ids_zoom:
+ self.canvas.mpl_disconnect(zoom_id)
+
last_a = []
for cur_xypress in self._xypress:
@@ -2334,8 +2367,13 @@
if y1 < Ymax: y1=Ymax
if self._button_pressed == 1:
- a.set_xlim((x0, x1))
- a.set_ylim((y0, y1))
+ if self._zoom_mode == "x":
+ a.set_xlim((x0, x1))
+ elif self._zoom_mode == "y":
+ a.set_ylim((y0, y1))
+ else:
+ a.set_xlim((x0, x1))
+ a.set_ylim((y0, y1))
elif self._button_pressed == 3:
if a.get_xscale()=='log':
alpha=np.log(Xmax/Xmin)/np.log(x1/x0)
@@ -2353,13 +2391,21 @@
alpha=(Ymax-Ymin)/(y1-y0)
ry1=alpha*(Ymin-y0)+Ymin
ry2=alpha*(Ymax-y0)+Ymin
- a.set_xlim((rx1, rx2))
- a.set_ylim((ry1, ry2))
+ if self._zoom_mode == "x":
+ a.set_xlim((rx1, rx2))
+ elif self._zoom_mode == "y":
+ a.set_ylim((ry1, ry2))
+ else:
+ a.set_xlim((rx1, rx2))
+ a.set_ylim((ry1, ry2))
+
self.draw()
self._xypress = None
self._button_pressed = None
+ self._zoom_mode = None
+
self.push_current()
self.release(event)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|