From 1b8e8303b25b6b013367741f2b47be3585b22cb3 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 17 Feb 2011 19:47:53 +0000 Subject: draw speaker positions in 2d panner git-svn-id: svn://localhost/ardour2/branches/3.0@8891 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/panner2d.cc | 12 +++++++----- gtk2_ardour/panner2d.h | 4 +++- libs/ardour/ardour/panner.h | 2 ++ libs/panners/vbap/vbap.cc | 6 ++++++ libs/panners/vbap/vbap.h | 1 + libs/panners/vbap/vbap_speakers.cc | 6 +++--- libs/panners/vbap/vbap_speakers.h | 7 ++++--- 7 files changed, 26 insertions(+), 12 deletions(-) diff --git a/gtk2_ardour/panner2d.cc b/gtk2_ardour/panner2d.cc index 40618a2210..5054a9ee37 100644 --- a/gtk2_ardour/panner2d.cc +++ b/gtk2_ardour/panner2d.cc @@ -29,6 +29,7 @@ #include "pbd/error.h" #include "pbd/cartesian.h" #include "ardour/panner.h" +#include "ardour/speakers.h" #include "panner2d.h" #include "keyboard.h" @@ -139,15 +140,15 @@ Panner2d::reset (uint32_t n_inputs) (*x)->visible = false; } + vector& speakers (panner->get_speakers()->speakers()); + for (uint32_t n = 0; n < nouts; ++n) { char buf[16]; snprintf (buf, sizeof (buf), "%d", n+1); targets[n]->set_text (buf); -#ifdef PANNER_HACKS - targets[n]->position = panner->output(n).position; + targets[n]->position = speakers[n].angles(); targets[n]->visible = true; -#endif } queue_draw (); @@ -590,7 +591,8 @@ Panner2d::toggle_bypass () } Panner2dWindow::Panner2dWindow (boost::shared_ptr p, int32_t h, uint32_t inputs) - : widget (p, h) + : ArdourDialog (_("Panner (2D)")) + , widget (p, h) , reset_button (_("Reset")) , bypass_button (_("Bypass")) , mute_button (_("Mute")) @@ -624,7 +626,7 @@ Panner2dWindow::Panner2dWindow (boost::shared_ptr p, int32_t h, uint32_t hpacker.pack_start (left_side, false, false); hpacker.show (); - add (hpacker); + get_vbox()->pack_start (hpacker); reset (inputs); widget.show (); } diff --git a/gtk2_ardour/panner2d.h b/gtk2_ardour/panner2d.h index 6580b99668..4c7bd1530c 100644 --- a/gtk2_ardour/panner2d.h +++ b/gtk2_ardour/panner2d.h @@ -34,6 +34,8 @@ #include "pbd/cartesian.h" +#include "ardour_dialog.h" + namespace ARDOUR { class Panner; } @@ -137,7 +139,7 @@ class Panner2d : public Gtk::DrawingArea void clamp_to_circle (double& x, double& y); }; -class Panner2dWindow : public Gtk::Window +class Panner2dWindow : public ArdourDialog { public: Panner2dWindow (boost::shared_ptr, int32_t height, uint32_t inputs); diff --git a/libs/ardour/ardour/panner.h b/libs/ardour/ardour/panner.h index 7ebfe5ee03..66842e697f 100644 --- a/libs/ardour/ardour/panner.h +++ b/libs/ardour/ardour/panner.h @@ -48,6 +48,8 @@ class Panner : public PBD::Stateful, public PBD::ScopedConnectionList Panner (boost::shared_ptr); ~Panner (); + virtual boost::shared_ptr get_speakers() const { return boost::shared_ptr(); } + virtual ChanCount in() const = 0; virtual ChanCount out() const = 0; diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc index c76a514eaa..fc75ae7183 100644 --- a/libs/panners/vbap/vbap.cc +++ b/libs/panners/vbap/vbap.cc @@ -341,3 +341,9 @@ VBAPanner::signal_position (uint32_t n) const return AngularVector(); } + +boost::shared_ptr +VBAPanner::get_speakers () const +{ + return _speakers->parent(); +} diff --git a/libs/panners/vbap/vbap.h b/libs/panners/vbap/vbap.h index 183554132c..af3c1c0df2 100644 --- a/libs/panners/vbap/vbap.h +++ b/libs/panners/vbap/vbap.h @@ -60,6 +60,7 @@ public: int set_state (const XMLNode&, int version); PBD::AngularVector signal_position (uint32_t n) const; + boost::shared_ptr get_speakers() const; private: struct Signal { diff --git a/libs/panners/vbap/vbap_speakers.cc b/libs/panners/vbap/vbap_speakers.cc index bf87791b60..a0602b3e10 100644 --- a/libs/panners/vbap/vbap_speakers.cc +++ b/libs/panners/vbap/vbap_speakers.cc @@ -45,9 +45,9 @@ using namespace std; VBAPSpeakers::VBAPSpeakers (boost::shared_ptr s) : _dimension (2) - , parent (s) + , _parent (s) { - parent->Changed.connect_same_thread (speaker_connection, boost::bind (&VBAPSpeakers::update, this)); + _parent->Changed.connect_same_thread (speaker_connection, boost::bind (&VBAPSpeakers::update, this)); update (); } @@ -60,7 +60,7 @@ VBAPSpeakers::update () { int dim = 2; - _speakers = parent->speakers(); + _speakers = _parent->speakers(); for (vector::const_iterator i = _speakers.begin(); i != _speakers.end(); ++i) { if ((*i).angles().ele != 0.0) { diff --git a/libs/panners/vbap/vbap_speakers.h b/libs/panners/vbap/vbap_speakers.h index 85cd75d085..4c28fc6489 100644 --- a/libs/panners/vbap/vbap_speakers.h +++ b/libs/panners/vbap/vbap_speakers.h @@ -35,23 +35,24 @@ class Speakers; class VBAPSpeakers : public boost::noncopyable { public: - typedef std::vector dvector; + VBAPSpeakers (boost::shared_ptr); + typedef std::vector dvector; const dvector matrix (int tuple) const { return _matrices[tuple]; } int speaker_for_tuple (int tuple, int which) const { return _speaker_tuples[tuple][which]; } int n_tuples () const { return _matrices.size(); } int dimension() const { return _dimension; } - VBAPSpeakers (boost::shared_ptr); uint32_t n_speakers() const { return _speakers.size(); } + boost::shared_ptr parent() const { return _parent; } ~VBAPSpeakers (); private: static const double MIN_VOL_P_SIDE_LGTH = 0.01; int _dimension; - boost::shared_ptr parent; + boost::shared_ptr _parent; std::vector _speakers; PBD::ScopedConnection speaker_connection; -- cgit v1.2.3