From 0669bb455b72bb5333534941787a889d828ea443 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 64d83ab162..b11e05e0d4 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 0c025b0ca2..18e3e8045a 100644 --- a/libs/ardour/ardour/panner.h +++ b/libs/ardour/ardour/panner.h @@ -87,6 +87,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 0b01c2d9d3..a56a5a720d 100644 --- a/libs/panners/vbap/vbap.cc +++ b/libs/panners/vbap/vbap.cc @@ -185,6 +185,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