From 60fe9606f404cc723c0aa33110f0e15c5324a97d Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 11 Jan 2014 23:29:36 +0100 Subject: [PATCH] VBAP GUI depends on signal-position (not parameter changes) --- gtk2_ardour/panner2d.cc | 5 +++-- gtk2_ardour/panner2d.h | 1 + libs/ardour/ardour/panner.h | 3 +++ libs/panners/vbap/vbap.cc | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc index 395cd2f5dd..b822b5c381 100644 --- a/gtk2_ardour/panner2d.cc +++ b/gtk2_ardour/panner2d.cc @@ -77,8 +77,7 @@ Panner2d::Panner2d (boost::shared_ptr 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 (); } diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h index 881638856f..474d7e1b10 100644 --- a/gtk2_ardour/panner2d.h +++ b/gtk2_ardour/panner2d.h @@ -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 diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h index 48f583c185..211ad0ca8e 100644 --- a/libs/ardour/ardour/panner.h +++ b/libs/ardour/ardour/panner.h @@ -100,6 +100,9 @@ public: virtual void reset () = 0; + /* azimut, width or elevation updated -> recalc signal_position -> emit Changed */ + PBD::Signal0 SignalPositionChanged; + void set_automation_state (AutoState); AutoState automation_state() const; void set_automation_style (AutoStyle); diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc index 8cdc91c435..875027b03d 100644 --- a/libs/panners/vbap/vbap.cc +++ b/libs/panners/vbap/vbap.cc @@ -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