From 3e69e353bdccbe75e578cf57b9eaef88eaebe57a Mon Sep 17 00:00:00 2001 From: Keegi Date: Sun, 26 Jun 2011 20:46:03 +0300 Subject: [PATCH 1/2] mouse-wheel zooming in gviz window --- gviz.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/gviz.py b/gviz.py index b346b41..253c71f 100644 --- a/gviz.py +++ b/gviz.py @@ -10,6 +10,8 @@ class window(wx.Frame): #print time.time()-s self.p.Bind(wx.EVT_KEY_DOWN,self.key) self.Bind(wx.EVT_KEY_DOWN,self.key) + self.p.Bind(wx.EVT_MOUSEWHEEL,self.zoom) + self.Bind(wx.EVT_MOUSEWHEEL,self.zoom) def key(self, event): x=event.GetKeyCode() @@ -20,6 +22,14 @@ class window(wx.Frame): self.p.layerdown() #print p.lines.keys() + def zoom(self, event): + z=event.GetWheelRotation() + if event.ShiftDown(): + if z > 0: self.p.layerup() + elif z < 0: self.p.layerdown() + else: + if z > 0: self.p.zoom(event.GetX(),event.GetY(),1.2) + elif z < 0: self.p.zoom(event.GetX(),event.GetY(),1/1.2) class gviz(wx.Panel): def __init__(self,parent,size=(200,200),bedsize=(200,200)): @@ -34,6 +44,7 @@ class gviz(wx.Panel): self.layers=[] self.layerindex=0 self.scale=[min(float(size[0])/bedsize[0],float(size[1])/bedsize[1])]*2 + self.translate=[0.0, 0.0] self.mainpen=wx.Pen(wx.Colour(0,0,0)) self.hlpen=wx.Pen(wx.Colour(200,50,50)) self.fades=[wx.Pen(wx.Colour(150+20*i,150+20*i,150+20*i)) for i in xrange(6)] @@ -67,6 +78,11 @@ class gviz(wx.Panel): except: pass + def zoom(self,x,y,factor): + self.scale = [s * factor for s in self.scale] + self.translate = [ x - (x-self.translate[0]) * factor, + y - (y-self.translate[1]) * factor] + self.Refresh() def paint(self,event): dc=wx.PaintDC(self) @@ -78,21 +94,26 @@ class gviz(wx.Panel): dc.SetBrush(wx.Brush((0,255,0))) if len(self.layers): dc.DrawRectangle(self.size[0]-14,(1.0-(1.0*(self.layerindex+1))/len(self.layers))*self.size[1],13,self.size[1]-1) + def scaler(x): + return (self.scale[0]*x[0]+self.translate[0], + self.scale[1]*x[1]+self.translate[1], + self.scale[0]*x[2]+self.translate[0], + self.scale[1]*x[3]+self.translate[1],) if self.showall: l=[] for i in self.layers: dc.DrawLineList(l,self.fades[0]) - l=map(lambda x:(self.scale[0]*x[0],self.scale[1]*x[1],self.scale[0]*x[2],self.scale[1]*x[3],) ,self.lines[i]) + l=map(scaler,self.lines[i]) dc.DrawLineList(l,self.pens[i]) return if self.layerindex Date: Sun, 26 Jun 2011 20:54:30 +0300 Subject: [PATCH 2/2] reversed layerup/layerdown direction on shift-mousewheel --- gviz.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gviz.py b/gviz.py index 253c71f..c781382 100644 --- a/gviz.py +++ b/gviz.py @@ -25,8 +25,8 @@ class window(wx.Frame): def zoom(self, event): z=event.GetWheelRotation() if event.ShiftDown(): - if z > 0: self.p.layerup() - elif z < 0: self.p.layerdown() + if z > 0: self.p.layerdown() + elif z < 0: self.p.layerup() else: if z > 0: self.p.zoom(event.GetX(),event.GetY(),1.2) elif z < 0: self.p.zoom(event.GetX(),event.GetY(),1/1.2)