cont'd AutomationRangeDrag update
Properly adding guard-points for all lanes, not just the first found for each range.
This commit is contained in:
parent
d8571e2572
commit
f40456a649
|
@ -6253,7 +6253,6 @@ AutomationRangeDrag::AutomationRangeDrag (Editor* editor, list<RegionView*> cons
|
||||||
void
|
void
|
||||||
AutomationRangeDrag::setup (list<boost::shared_ptr<AutomationLine> > const & lines)
|
AutomationRangeDrag::setup (list<boost::shared_ptr<AutomationLine> > const & lines)
|
||||||
{
|
{
|
||||||
printf ("AutomationRangeDrag::setup %d lines\n", lines.size());
|
|
||||||
/* find the lines that overlap the ranges being dragged */
|
/* find the lines that overlap the ranges being dragged */
|
||||||
list<boost::shared_ptr<AutomationLine> >::const_iterator i = lines.begin ();
|
list<boost::shared_ptr<AutomationLine> >::const_iterator i = lines.begin ();
|
||||||
while (i != lines.end ()) {
|
while (i != lines.end ()) {
|
||||||
|
@ -6344,26 +6343,25 @@ AutomationRangeDrag::motion (GdkEvent*, bool first_move)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (first_move) {
|
if (first_move) {
|
||||||
_editor->begin_reversible_command (_("automation range move")); // XXX
|
_editor->begin_reversible_command (_("automation range move"));
|
||||||
|
|
||||||
if (!_ranges.empty()) {
|
if (!_ranges.empty()) {
|
||||||
|
|
||||||
|
/* add guard points */
|
||||||
for (list<AudioRange>::const_iterator i = _ranges.begin(); i != _ranges.end(); ++i) {
|
for (list<AudioRange>::const_iterator i = _ranges.begin(); i != _ranges.end(); ++i) {
|
||||||
|
|
||||||
samplecnt_t const half = (i->start + i->end) / 2;
|
samplecnt_t const half = (i->start + i->end) / 2;
|
||||||
|
|
||||||
/* find the line that this audio range starts in */
|
for (list<Line>::iterator j = _lines.begin(); j != _lines.end(); ++j) {
|
||||||
list<Line>::iterator j = _lines.begin();
|
if (j->range.first > i->start || j->range.second < i->start) {
|
||||||
while (j != _lines.end() && (j->range.first > i->start || j->range.second < i->start)) {
|
continue;
|
||||||
++j;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (j != _lines.end()) {
|
|
||||||
boost::shared_ptr<AutomationList> the_list = j->line->the_list ();
|
boost::shared_ptr<AutomationList> the_list = j->line->the_list ();
|
||||||
|
|
||||||
/* j is the line that this audio range starts in; fade into it;
|
/* j is the line that this audio range starts in; fade into it;
|
||||||
64 samples length plucked out of thin air.
|
* 64 samples length plucked out of thin air.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
samplepos_t a = i->start + 64;
|
samplepos_t a = i->start + 64;
|
||||||
if (a > half) {
|
if (a > half) {
|
||||||
|
@ -6384,18 +6382,17 @@ AutomationRangeDrag::motion (GdkEvent*, bool first_move)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* same thing for the end */
|
/* same thing for the end */
|
||||||
|
for (list<Line>::iterator j = _lines.begin(); j != _lines.end(); ++j) {
|
||||||
|
|
||||||
j = _lines.begin();
|
if (j->range.first > i->end || j->range.second < i->end) {
|
||||||
while (j != _lines.end() && (j->range.first > i->end || j->range.second < i->end)) {
|
continue;
|
||||||
++j;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (j != _lines.end()) {
|
|
||||||
boost::shared_ptr<AutomationList> the_list = j->line->the_list ();
|
boost::shared_ptr<AutomationList> the_list = j->line->the_list ();
|
||||||
|
|
||||||
/* j is the line that this audio range starts in; fade out of it;
|
/* j is the line that this audio range starts in; fade out of it;
|
||||||
64 samples length plucked out of thin air.
|
* 64 samples length plucked out of thin air.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
samplepos_t b = i->end - 64;
|
samplepos_t b = i->end - 64;
|
||||||
if (b < half) {
|
if (b < half) {
|
||||||
|
@ -6419,9 +6416,8 @@ AutomationRangeDrag::motion (GdkEvent*, bool first_move)
|
||||||
_nothing_to_drag = true;
|
_nothing_to_drag = true;
|
||||||
|
|
||||||
/* Find all the points that should be dragged and put them in the relevant
|
/* Find all the points that should be dragged and put them in the relevant
|
||||||
points lists in the Line structs.
|
* points lists in the Line structs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (list<Line>::iterator i = _lines.begin(); i != _lines.end(); ++i) {
|
for (list<Line>::iterator i = _lines.begin(); i != _lines.end(); ++i) {
|
||||||
|
|
||||||
uint32_t const N = i->line->npoints ();
|
uint32_t const N = i->line->npoints ();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user