Changeset - b264971091dc
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 6 years ago 2019-06-10 02:29:43
drewp@bigasterisk.com
Fadable was being too strict about precision of slider vals
Ignore-this: 7236641aa403b0db96cf9668de8280bc
1 file changed with 4 insertions and 2 deletions:
0 comments (0 inline, 0 general)
light9/Fadable.py
Show inline comments
 
@@ -57,50 +57,52 @@ class Fadable:
 

	
 
            # mouse wheel
 
            self.bind('<4>', lambda evt: self.increase())
 
            self.bind('<5>', lambda evt: self.decrease())
 

	
 
            # modified mouse wheel
 
            self.bind('<Shift-4>', lambda evt: self.increase(multiplier=0.2))
 
            self.bind('<Shift-5>', lambda evt: self.decrease(multiplier=0.2))
 
            self.bind('<Control-4>', lambda evt: self.increase(length=1))
 
            self.bind('<Control-5>', lambda evt: self.decrease(length=1))
 

	
 
        self.last_level = None  # used for muting
 

	
 
    def set_var_rounded(self, value):
 
        """use this instead of just self.fade_var.set(value) so we can
 
        control the precision"""
 
        # this was just to make the display not look so weird, but it
 
        # could actually affect the speed of really slow fades. If
 
        # that's a problem, do a real trace_write hook for the
 
        # variable's display instead of using Label(textvariable=var)
 
        # and format it there.
 
        self.fade_var.set(round(value, 7))
 
        if self.fade_var.get() != value:
 
            self.fade_var.set(value)
 
        if self.fade_var.get() != value:
 
            raise ValueError("doublevar won't set")
 
        if abs(self.fade_var.get() - value) > .1:
 
            raise ValueError(
 
                "doublevar won't set- trying %r but it stays at %r" %
 
                (value, self.fade_var.get()))
 

	
 
    def fade(self, value, length=0.5, step_time=10):
 
        """Fade to value in length seconds with steps every step_time
 
        milliseconds"""
 
        if length == 0:  # 0 seconds fades happen right away and prevents
 
            # and prevents us from entering the fade loop,
 
            # which would cause a divide by zero
 
            self.set_var_rounded(value)
 
            self.fading = 0  # we stop all fades
 
        else:  # the general case
 
            self.fade_start_time = time.time()
 
            self.fade_length = length
 

	
 
            self.fade_start_level = self.fade_var.get()
 
            self.fade_end_level = value
 

	
 
            self.fade_step_time = step_time
 
            if not self.fading:
 
                self.fading = 1
 
                self.do_fade()
 

	
 
    def do_fade(self):
 
        """Actually performs the fade for Fadable.fade.  Shouldn't be called
 
        directly."""
0 comments (0 inline, 0 general)