# HG changeset patch # User drewp # Date 1026026532 0 # Node ID 626aa21796309d3b23e3063980cd6d6840820d14 # Parent dea1e1d6d43912ad4863dff177bcfb241727d699 some naming and defaults tweaks some naming and defaults tweaks interrupted fades now go to the new destination at the same rate they were traveling. not very cool diff -r dea1e1d6d439 -r 626aa2179630 Widgets/FlyingFader.py --- a/Widgets/FlyingFader.py Sun Jul 07 07:09:37 2002 +0000 +++ b/Widgets/FlyingFader.py Sun Jul 07 07:22:12 2002 +0000 @@ -2,22 +2,22 @@ from time import time class FlyingFader(Frame): - def __init__(self, master, variable, label, time=1.5, font=('Arial', 8), + def __init__(self, master, variable, label, fadedur=1.5, font=('Arial', 8), **kw): Frame.__init__(self, master) self.name = label self.variable = variable - self.fadelength = time + self.fadedur = fadedur self.curfade = None self.fadetimes = 0, 0 self.config({'bd':1, 'relief':'raised'}) - scaleopts = {'variable' : variable, 'showvalue' : 0, 'from' : 100, - 'to' : 0, 'res' : 0.1, 'width' : 20, 'length' : 200} + scaleopts = {'variable' : variable, 'showvalue' : 0, 'from' : 1.0, + 'to' : 0, 'res' : 0.001, 'width' : 20, 'length' : 200} scaleopts.update(kw) self.scale = Scale(self, scaleopts) - self.vlabel = Label(self, text="0.0", font=font) + self.vlabel = Label(self, text="0.0", width=6, font=font) self.label = Label(self, text=label, wraplength=40, font=font) self.oldtrough = self.scale['troughcolor'] @@ -48,9 +48,12 @@ target = float(self.tk.call(self.scale, 'get', evt.x, evt.y)) self.newfade(target, evt) + def isfading(self): + return self.fadetimes[0] or self.fadetimes[1] + def newfade(self, newlevel, evt=None, length=None): if length is None: - length = self.fadelength + length = self.fadedur mult = 1 if evt.state & 8 and evt.state & 4: mult = 0.25 # both @@ -58,8 +61,23 @@ elif evt.state & 4: mult = 2 # control now = time() - self.fadetimes = (now, now + (mult * length)) - self.curfade = (self.variable.get(), newlevel) + if not self.isfading(): + self.fadetimes = (now, now + (mult * length)) + self.curfade = (self.variable.get(), newlevel) + else: + # already fading + t1,t2=self.fadetimes + v1,v2=self.curfade + rate = abs((v2-v1)/(t2-t1)) + + vnow=self.variable.get() + newdist=abs(newlevel-vnow) + newdur=newdist/rate + + self.fadetimes = (now,now+newdur) + self.curfade=(vnow,newlevel) + + self.scale['troughcolor'] = 'red' @@ -78,7 +96,7 @@ newvalue = (percent * (lend - lstart)) + lstart self.variable.set(newvalue) colorfade(self.scale, percent) - self.after(10, self.gofade) + self.after(30, self.gofade) def updatelabel(self, *args): self.vlabel['text'] = "%.3f" % self.variable.get()