diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-04-30 15:04:16 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-04-30 15:04:16 +0000 |
commit | 8a7e3f17f4b78bb0383e47a7ee2e63fb964c04e7 (patch) | |
tree | ed6d6899597c183d948b08415859e52b2ecf6aa7 /libs/ardour/panner.cc | |
parent | 075f5170ef1995852d823d6d2e2d43fdee99654d (diff) |
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
Diffstat (limited to 'libs/ardour/panner.cc')
-rw-r--r-- | libs/ardour/panner.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/libs/ardour/panner.cc b/libs/ardour/panner.cc index a00edfdd3f..23c87f0a2e 100644 --- a/libs/ardour/panner.cc +++ b/libs/ardour/panner.cc @@ -749,6 +749,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) { uint32_t n; |