implement panner reset functionality (missing since 0.99?) ported from 2.X

git-svn-id: svn://localhost/ardour2/branches/3.0@5015 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2009-04-30 15:04:16 +00:00
parent 075f5170ef
commit 8a7e3f17f4
4 changed files with 88 additions and 7 deletions

View File

@@ -229,9 +229,8 @@ class Panner : public Processor
StreamPanner* add ();
void remove (uint32_t which);
void reset (uint32_t noutputs, uint32_t npans);
void reset_streampanner (uint32_t which_panner);
void reset_to_default ();
XMLNode& get_state (void);
XMLNode& state (bool full);

View File

@@ -748,6 +748,80 @@ Panner::set_bypassed (bool yn)
}
void
Panner::reset_to_default ()
{
vector<float> positions;
switch (outputs.size()) {
case 0:
case 1:
return;
}
if (outputs.size() == 2) {
switch (_streampanners.size()) {
case 1:
_streampanners.front()->set_position (0.5);
_streampanners.front()->pan_control()->list()->reset_default (0.5);
return;
break;
case 2:
_streampanners.front()->set_position (0.0);
_streampanners.front()->pan_control()->list()->reset_default (0.0);
_streampanners.back()->set_position (1.0);
_streampanners.back()->pan_control()->list()->reset_default (1.0);
return;
default:
break;
}
}
vector<Output>::iterator o;
vector<StreamPanner*>::iterator p;
for (o = outputs.begin(), p = _streampanners.begin(); o != outputs.end() && p != _streampanners.end(); ++o, ++p) {
(*p)->set_position ((*o).x, (*o).y);
}
}
void
Panner::reset_streampanner (uint32_t which)
{
if (which >= _streampanners.size() || which >= outputs.size()) {
return;
}
switch (outputs.size()) {
case 0:
case 1:
return;
case 2:
switch (_streampanners.size()) {
case 1:
/* stereo out, 1 stream, default = middle */
_streampanners.front()->set_position (0.5);
_streampanners.front()->pan_control()->list()->reset_default (0.5);
break;
case 2:
/* stereo out, 2 streams, default = hard left/right */
if (which == 0) {
_streampanners.front()->set_position (0.0);
_streampanners.front()->pan_control()->list()->reset_default (0.0);
} else {
_streampanners.back()->set_position (1.0);
_streampanners.back()->pan_control()->list()->reset_default (1.0);
}
break;
}
return;
default:
_streampanners[which]->set_position (outputs[which].x, outputs[which].y);
}
}
void
Panner::reset (uint32_t nouts, uint32_t npans)
{