# HG changeset patch # User drewp # Date 2002-07-07 07:22:12 # 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 --git a/Widgets/FlyingFader.py b/Widgets/FlyingFader.py --- a/Widgets/FlyingFader.py +++ b/Widgets/FlyingFader.py @@ -2,22 +2,22 @@ from Tkinter import * 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 @@ class FlyingFader(Frame): 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 @@ class FlyingFader(Frame): 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 @@ class FlyingFader(Frame): 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()