13
0

Fix setting of loop region start/end at the same time. Fixes #3314.

git-svn-id: svn://localhost/ardour2/branches/3.0@7418 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Carl Hetherington 2010-07-15 00:24:50 +00:00
parent dd336bfb8c
commit ebe95f1265
2 changed files with 28 additions and 10 deletions

View File

@ -80,8 +80,8 @@ class Location : public PBD::StatefulDestructible
nframes64_t end() const { return _end; }
nframes64_t length() const { return _end - _start; }
int set_start (nframes64_t s);
int set_end (nframes64_t e);
int set_start (nframes64_t s, bool force = false);
int set_end (nframes64_t e, bool force = false);
int set (nframes64_t start, nframes64_t end);
int move_to (nframes64_t pos);

View File

@ -82,15 +82,21 @@ Location::operator= (const Location& other)
return this;
}
/** Set start position.
* @param s New start.
* @param force true to force setting, even if the given new start is after the current end.
*/
int
Location::set_start (nframes64_t s)
Location::set_start (nframes64_t s, bool force)
{
if (_locked) {
return -1;
}
if (((is_auto_punch() || is_auto_loop()) && s >= _end) || (!is_mark() && s > _end)) {
return -1;
if (!force) {
if (((is_auto_punch() || is_auto_loop()) && s >= _end) || (!is_mark() && s > _end)) {
return -1;
}
}
if (is_mark()) {
@ -115,15 +121,21 @@ Location::set_start (nframes64_t s)
return 0;
}
/** Set end position.
* @param s New end.
* @param force true to force setting, even if the given new start is after the current end.
*/
int
Location::set_end (nframes64_t e)
Location::set_end (nframes64_t e, bool force)
{
if (_locked) {
return -1;
}
if (((is_auto_punch() || is_auto_loop()) && e <= _start) || e < _start) {
return -1;
if (!force) {
if (((is_auto_punch() || is_auto_loop()) && e <= _start) || e < _start) {
return -1;
}
}
if (is_mark()) {
@ -151,8 +163,14 @@ Location::set_end (nframes64_t e)
int
Location::set (nframes64_t start, nframes64_t end)
{
int const s = set_start (start);
int const e = set_end (end);
/* check validity */
if (((is_auto_punch() || is_auto_loop()) && start >= end) || (!is_mark() && start > end)) {
return -1;
}
/* now we know these values are ok, so force-set them */
int const s = set_start (start, true);
int const e = set_end (end, true);
return (s == 0 && e == 0) ? 0 : -1;
}