VBAP GUI depends on signal-position (not parameter changes)
authorRobin Gareus <robin@gareus.org>
Sat, 11 Jan 2014 22:29:36 +0000 (23:29 +0100)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 13 Jan 2014 14:37:35 +0000 (09:37 -0500)
gtk2_ardour/panner2d.cc
gtk2_ardour/panner2d.h
libs/ardour/ardour/panner.h
libs/panners/vbap/vbap.cc

index 395cd2f5ddb361aa7157f420814871ac6c4ad2d6..b822b5c381628693839bdd5515048822c627e39a 100644 (file)
@@ -77,8 +77,7 @@ Panner2d::Panner2d (boost::shared_ptr<PannerShell> p, int32_t h)
 {
        panner_shell->Changed.connect (connections, invalidator (*this), boost::bind (&Panner2d::handle_state_change, this), gui_context());
 
-        panner_shell->pannable()->pan_azimuth_control->Changed.connect (connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
-        panner_shell->pannable()->pan_width_control->Changed.connect (connections, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
+       panner_shell->panner()->SignalPositionChanged.connect (panconnect, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
 
        drag_target = 0;
        set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
@@ -199,6 +198,8 @@ Panner2d::add_speaker (const AngularVector& a)
 void
 Panner2d::handle_state_change ()
 {
+       panconnect.drop_connections();
+       panner_shell->panner()->SignalPositionChanged.connect (panconnect, invalidator(*this), boost::bind (&Panner2d::handle_position_change, this), gui_context());
        queue_draw ();
 }
 
index 881638856f9f8ee5279b88bc0d28a310905e0fd4..474d7e1b106efb0c3a830d8409dcfd7d6c4ee330 100644 (file)
@@ -136,6 +136,7 @@ class Panner2d : public Gtk::DrawingArea
         void label_signals ();
 
        PBD::ScopedConnectionList connections;
+       PBD::ScopedConnectionList panconnect;
 
        /* cartesian coordinates in GTK units ; adjust to same but on a circle of radius 1.0
           and centered in the middle of our area
index 48f583c18558466b9e603c4f23f47f0f2092e88d..211ad0ca8eb12bf8401ddad4469407ea005a5f8c 100644 (file)
@@ -100,6 +100,9 @@ public:
 
        virtual void reset () = 0;
 
+       /* azimut, width or elevation updated -> recalc signal_position ->  emit Changed */
+       PBD::Signal0<void> SignalPositionChanged;
+
        void      set_automation_state (AutoState);
        AutoState automation_state() const;
        void      set_automation_style (AutoStyle);
index 8cdc91c4355a4355ed982e2611897dfe8b40afa2..875027b03d9ac2dac8b7acfd38975a6f64537133 100644 (file)
@@ -189,6 +189,8 @@ VBAPanner::update ()
                 s->direction = AngularVector (center, elevation);
                 compute_gains (s->desired_gains, s->desired_outputs, s->direction.azi, s->direction.ele);
         }
+
+        SignalPositionChanged(); /* emit */
 }
 
 void