draw speaker positions in 2d panner
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 17 Feb 2011 19:47:53 +0000 (19:47 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 17 Feb 2011 19:47:53 +0000 (19:47 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@8891 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/panner2d.cc
gtk2_ardour/panner2d.h
libs/ardour/ardour/panner.h
libs/panners/vbap/vbap.cc
libs/panners/vbap/vbap.h
libs/panners/vbap/vbap_speakers.cc
libs/panners/vbap/vbap_speakers.h

index 40618a221006c93893af8ecc19860307ade54d11..5054a9ee3756ef3888077d91c2adcf4530b6c6e6 100644 (file)
@@ -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<Speaker>& 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<Panner> 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<Panner> 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 ();
 }
index 6580b9966834417efcd444a2b4d201b107192622..4c7bd1530cd717de2ca0535d7bba9f672554bf46 100644 (file)
@@ -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<ARDOUR::Panner>, int32_t height, uint32_t inputs);
index 7ebfe5ee032fdeb4dda82d24a3279b820eb22c2b..66842e697f1320b1efece55895c33ad715e59317 100644 (file)
@@ -48,6 +48,8 @@ class Panner : public PBD::Stateful, public PBD::ScopedConnectionList
        Panner (boost::shared_ptr<Pannable>);
        ~Panner ();
 
+        virtual boost::shared_ptr<Speakers> get_speakers() const { return boost::shared_ptr<Speakers>(); }
+
         virtual ChanCount in() const = 0;
         virtual ChanCount out() const = 0;
 
index c76a514eaaeebf6906ec2708c8111d9576422e5d..fc75ae7183f0a0551a954d1b6ac122f2f0aaa6e2 100644 (file)
@@ -341,3 +341,9 @@ VBAPanner::signal_position (uint32_t n) const
 
         return AngularVector();
 }
+
+boost::shared_ptr<Speakers>
+VBAPanner::get_speakers () const 
+{
+        return _speakers->parent();
+}
index 183554132c2a69b07052b5bf534a067b66d61e9d..af3c1c0df2263e4fe4919c1599befeb496fbac4b 100644 (file)
@@ -60,6 +60,7 @@ public:
        int set_state (const XMLNode&, int version);
 
         PBD::AngularVector signal_position (uint32_t n) const;
+        boost::shared_ptr<Speakers> get_speakers() const;
 
 private:
         struct Signal {
index bf87791b60fb4436ac5dd691a5ebe948241a59fb..a0602b3e100310062ede99802ea8d12b3e7630f3 100644 (file)
@@ -45,9 +45,9 @@ using namespace std;
 
 VBAPSpeakers::VBAPSpeakers (boost::shared_ptr<Speakers> 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<Speaker>::const_iterator i = _speakers.begin(); i != _speakers.end(); ++i) {
                if ((*i).angles().ele != 0.0) {
index 85cd75d0855ab0759d29e63c2c504740503fc8f4..4c28fc6489d0709a84ca34367e41a2d3746e1260 100644 (file)
@@ -35,23 +35,24 @@ class Speakers;
 
 class VBAPSpeakers : public boost::noncopyable {
 public:
-       typedef std::vector<double> dvector;
+       VBAPSpeakers (boost::shared_ptr<Speakers>);
 
+       typedef std::vector<double> 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<Speakers>);
         uint32_t n_speakers() const { return _speakers.size(); }
+        boost::shared_ptr<Speakers> parent() const { return _parent; }
 
        ~VBAPSpeakers ();
 
 private:
        static const double MIN_VOL_P_SIDE_LGTH = 0.01;
        int   _dimension;  
-        boost::shared_ptr<Speakers> parent;
+        boost::shared_ptr<Speakers> _parent;
        std::vector<Speaker> _speakers;
        PBD::ScopedConnection speaker_connection;