Mercurial > code > home > repos > light9
annotate light8/Xfader.py @ 271:97c08a1c4351
gyrocontroller: remap buttons, fix keep mode
Also, solo mode is now default, colors are brighter, numeric names for subs
are converted to subs with only that channel up, send zeroes when exiting
author | David McClosky <dmcc@bigasterisk.com> |
---|---|
date | Fri, 17 Jun 2005 04:23:07 +0000 |
parents | e04f7b552bcd |
children |
rev | line source |
---|---|
51
71489bb71528
- Meet Fader. He is going to grow up and be a crossfader some day
dmcc
parents:
4
diff
changeset
|
1 from Tix import * |
0 | 2 from __future__ import division |
3 | |
4 class Xfader(Canvas): | |
5 def __init__(self, scalelevelsIn): | |
6 global scalelevels | |
7 scalelevels=scalelevelsIn | |
8 self.checkbuttons={} | |
9 self.startcoord=None | |
10 def sub2(self,a,b): | |
11 return ( (a[0]-b[0]), (a[1]-b[1])) | |
12 def down(self,ev): | |
13 global scalelevels | |
14 self.startcoord=(ev.x,-ev.y) | |
15 self.startlevels = dict([(k,v.get()) for k,v in scalelevels.items()]) | |
16 # find the channel names of the selected subs | |
17 self.onchannel = { | |
18 'x':[x for x in scalelevels.keys() if self.checkbuttons[x]['x'].get()], | |
19 'y':[x for x in scalelevels.keys() if self.checkbuttons[x]['y'].get()] | |
20 } | |
21 | |
22 | |
23 #self.create_line(0,0,100,100,tag='transient') | |
24 | |
25 def getoriglevel(self,subname): | |
26 return self.startlevels[subname] | |
27 def up(self,ev): | |
28 self.startcoord=None | |
29 self.delete('transient') | |
30 # self.clearallbuttons() | |
31 def moved(self,ev): | |
32 if self.startcoord is None: | |
33 return | |
34 pos=(ev.x,-ev.y) | |
35 deltas= self.sub2(pos,self.startcoord) | |
36 for axis,delta in zip(('x','y'),deltas): | |
37 onchan=self.onchannel[axis] | |
38 for subn in onchan: | |
39 newlev = self.getoriglevel(subn) + 1.0*delta/75 | |
40 newlev = int(newlev*1000)/1000.0 | |
41 newlev = min(1.0,max(newlev,0.0)) | |
42 scalelevels[subn].set( newlev ) | |
43 def width(self): | |
44 return int(self['width']) | |
45 def height(self): | |
46 return int(self['height']) | |
47 def setupwidget(self,parent): | |
102 | 48 Canvas.__init__(self,parent,width=150,height=150,bg="grey40") |
0 | 49 self.pack(side='bottom') |
50 self.create_rectangle(5,5,self.width()-5,self.height()-5) | |
51 self.create_line(0,self.height()/2,150,self.height()/2) | |
52 self.create_line(self.width()/2,0,self.width()/2,self.height()) | |
53 self.bind("<ButtonPress-1>",self.down) | |
54 self.bind("<ButtonRelease-1>",self.up) | |
55 self.bind("<B1-Motion>",self.moved) | |
56 | |
57 def registerbutton(self,subname,axis,checkvar): | |
58 if subname not in self.checkbuttons: | |
59 self.checkbuttons[subname]={} | |
60 self.checkbuttons[subname][axis]=checkvar | |
61 def clearallbuttons(self, axis='both'): | |
62 for cb in self.checkbuttons.values(): | |
63 if axis == 'both': | |
64 for a in cb.values(): | |
65 a.set(0) | |
66 else: | |
67 cb[axis].set(0) | |
68 def grab(self,axis): | |
69 self.clearallbuttons(axis) | |
70 for n,sv in scalelevels.items(): | |
71 if sv.get() and n != 'blacklight': | |
72 self.checkbuttons[n][axis].set(1) | |
73 | |
74 |