Changeset - 058f2f508504
[Not reviewed]
default
0 1 0
David McClosky - 18 years ago 2007-06-15 18:58:05
dmcc@bigasterisk.com
curve: hw slider buttons make new keys for their curve
1 file changed with 23 insertions and 6 deletions:
0 comments (0 inline, 0 general)
light9/curve.py
Show inline comments
 
@@ -159,13 +159,13 @@ class Curveview(tk.Canvas):
 
        dispatcher.connect(self.update_curve,"zoom changed")
 
        dispatcher.connect(self.update_curve,"points changed",
 
                           sender=self.curve)
 
        dispatcher.connect(self.select_between,"select between")
 
        if self.knobEnabled:
 
            dispatcher.connect(self.knob_in, "knob in")
 
            dispatcher.connect(self.slider_in, "slider in")
 
            dispatcher.connect(self.slider_in, "set key")
 
        self.bind("<Configure>",self.update_curve)
 
        for x in range(1, 6):
 
            def add_kb_marker_point(evt, x=x):
 
                self.add_point((self.current_time(), (x - 1) / 4.0))
 

	
 
            self.bind("<Key-%s>" % x, add_kb_marker_point)
 
@@ -221,17 +221,21 @@ class Curveview(tk.Canvas):
 
        idx = self.curve.index_before(self.current_time())
 
        if idx is not None:
 
            pos = self.curve.points[idx]
 
            self.curve.points[idx] = (pos[0], value)
 
            self.update_curve()
 

	
 
    def slider_in(self, curve, value):
 
        """user pushed on a slider. make a new key"""
 
    def slider_in(self, curve, value=None):
 
        """user pushed on a slider. make a new key.  if value is None,
 
        the value will be the same as the last."""
 
        if curve != self.curve:
 
            return
 

	
 
        if value is None:
 
            value = self.curve.eval(self.current_time())
 

	
 
        self.curve.insert_pt((self.current_time(), value))
 
        self.update_curve()
 

	
 
    def print_state(self, msg=""):
 
        if 0:
 
            print "%s: dragging_dots=%s selecting=%s" % (
 
@@ -543,33 +547,37 @@ class Curveview(tk.Canvas):
 
        if not self.dragging_dots:
 
            return
 
        self.last_mouse_world = None
 
        self.dragging_dots = False
 

	
 
class Sliders(BCF2000):
 
    def __init__(self, cb, knobCallback):
 
    def __init__(self, cb, knobCallback, knobButtonCallback):
 
        BCF2000.__init__(self)
 
        self.cb = cb
 
        self.knobCallback = knobCallback
 
        self.knobButtonCallback = knobButtonCallback
 
    def valueIn(self, name, value):
 
        if name.startswith("slider"):
 
            self.cb(int(name[6:]), value / 127)
 
        if name.startswith("knob"):
 
            self.knobCallback(int(name[4:]), value / 127)
 
        if name.startswith("button-knob"):
 
            self.knobButtonCallback(int(name[11:]))
 

	
 
        
 
class Curveset:
 
    curves = None # curvename : curve
 
    def __init__(self, sliders=False):
 
        """sliders=True means support the hardware sliders"""
 
        self.curves = {} # name : Curve
 
        self.curveName = {} # reverse
 
        self.sliderCurve = {} # slider number (1 based) : curve name
 
        self.sliderNum = {} # reverse
 
        if sliders:
 
            self.sliders = Sliders(self.hw_slider_in, self.hw_knob_in)
 
            self.sliders = Sliders(self.hw_slider_in, self.hw_knob_in, 
 
                                   self.hw_knob_button)
 
            dispatcher.connect(self.curvesToSliders, "curves to sliders")
 
            dispatcher.connect(self.knobOut, "knob out")
 
            self.lastSliderTime = {} # num : time
 
            self.sliderSuppressOutputUntil = {} # num : time
 
            self.sliderIgnoreInputUntil = {}
 
        else:
 
@@ -639,21 +647,30 @@ class Curveset:
 
        
 
        # don't push back on the slider for a little while, since the
 
        # user might be trying to slowly move it. This should be
 
        # bigger than the ignore time above.
 
        self.sliderSuppressOutputUntil[num] = now + .2
 
        
 
        dispatcher.send("slider in", curve=curve, value=value)
 
        dispatcher.send("set key", curve=curve, value=value)
 

	
 
    def hw_knob_in(self, num, value):
 
        try:
 
            curve = self.curves[self.sliderCurve[num]]
 
        except KeyError:
 
            return
 
        dispatcher.send("knob in", curve=curve, value=value)
 

	
 
    def hw_knob_button(self, num):
 
        try:
 
            curve = self.curves[self.sliderCurve[num]]
 
        except KeyError:
 
            return
 

	
 
        dispatcher.send("set key", curve=curve)
 
        
 

	
 
    def curvesToSliders(self, t):
 
        now = time.time()
 
        for num, name in self.sliderCurve.items():
 
            if now < self.sliderSuppressOutputUntil.get(num):
 
                continue
 
#            self.lastSliderTime[num] = now
0 comments (0 inline, 0 general)