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:
parent
dd336bfb8c
commit
ebe95f1265
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user