[Summary] The same as previous reverted commit but with more correct and full description:

Fixed two bugs. Not specified in TT.

1.Ranges which coincided with region borders (achieved by the context menu commands like Move Range Start/End ... ) used to cut a small byte of region which border coincided.

2. If you cover region with a range which start coincides with region's start and ends coincides as well when you drag such range it does cut the whole region, but it does not remove it. Process similar to "copy" accures when "cut" operation is expected.
This commit is contained in:
GZharun 2015-01-09 10:49:42 +02:00
parent 886bebe342
commit 896961b411
2 changed files with 33 additions and 3 deletions

View file

@ -85,6 +85,19 @@ AudioPlaylist::AudioPlaylist (boost::shared_ptr<const AudioPlaylist> other, fram
framecnt_t fade_in = 64;
framecnt_t fade_out = 64;
/* coverage will return OverlapStart if the start/end coincides
with the end/start point. we do not add such a region to the new playlist,
so catch this special case.
*/
if (region->first_frame() >= end) {
continue;
}
if (region->last_frame() <= start) {
continue;
}
switch (region->coverage (start, end)) {
case Evoral::OverlapNone:
continue;

View file

@ -210,6 +210,19 @@ Playlist::Playlist (boost::shared_ptr<const Playlist> other, framepos_t start, f
region = *i;
/* coverage will return OverlapStart if the start/end coincides
with the end/start point. we do not add such a region to the new playlist,
so catch this special case.
*/
if (region->first_frame() >= end) {
continue;
}
if (region->last_frame() <= start) {
continue;
}
overlap = region->coverage (start, end);
switch (overlap) {
@ -914,7 +927,7 @@ Playlist::flush_notifications (bool from_undo)
current = *i;
if (current->first_frame() >= start && current->last_frame() < end) {
if (current->first_frame() >= start && current->last_frame() <= end) {
if (cutting) {
remove_region_internal (current);
@ -923,14 +936,18 @@ Playlist::flush_notifications (bool from_undo)
continue;
}
/* coverage will return OverlapStart if the start coincides
with the end point. we do not partition such a region,
/* coverage will return OverlapStart if the start/end coincides
with the end/start point. we do not partition such a region,
so catch this special case.
*/
if (current->first_frame() >= end) {
continue;
}
if (current->last_frame() <= start) {
continue;
}
if ((overlap = current->coverage (start, end)) == Evoral::OverlapNone) {
continue;