#include "pbd/error.h"
#include "pbd/cartesian.h"
#include "ardour/panner.h"
+#include "ardour/speakers.h"
#include "panner2d.h"
#include "keyboard.h"
(*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 ();
}
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"))
hpacker.pack_start (left_side, false, false);
hpacker.show ();
- add (hpacker);
+ get_vbox()->pack_start (hpacker);
reset (inputs);
widget.show ();
}
#include "pbd/cartesian.h"
+#include "ardour_dialog.h"
+
namespace ARDOUR {
class Panner;
}
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);
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;
return AngularVector();
}
+
+boost::shared_ptr<Speakers>
+VBAPanner::get_speakers () const
+{
+ return _speakers->parent();
+}
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 {
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 ();
}
{
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) {
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;