Fix 8061 (partly): Don't scroll down if no further tracks to scroll to
The issue remains if a track is selected by a "fit-selection" action second last track covers the whole trackview. Then when scrolling one track up, the huge track disappears and a smaller track follows, that covers a lot less space. -> Proper redraw of the track view is still needed.
This commit is contained in:
parent
24d3bf25a9
commit
81cbf36c56
@ -1462,6 +1462,8 @@ Editor::select_topmost_track ()
|
|||||||
bool
|
bool
|
||||||
Editor::scroll_down_one_track (bool skip_child_views)
|
Editor::scroll_down_one_track (bool skip_child_views)
|
||||||
{
|
{
|
||||||
|
uint32_t needed_height = 0;
|
||||||
|
|
||||||
TrackViewList::reverse_iterator next = track_views.rend();
|
TrackViewList::reverse_iterator next = track_views.rend();
|
||||||
const double top_of_trackviews = vertical_adjustment.get_value();
|
const double top_of_trackviews = vertical_adjustment.get_value();
|
||||||
|
|
||||||
@ -1470,6 +1472,8 @@ Editor::scroll_down_one_track (bool skip_child_views)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
needed_height += (*t)->effective_height();
|
||||||
|
|
||||||
/* If this is the upper-most visible trackview, we want to display
|
/* If this is the upper-most visible trackview, we want to display
|
||||||
* the one above it (next)
|
* the one above it (next)
|
||||||
*
|
*
|
||||||
@ -1491,10 +1495,13 @@ Editor::scroll_down_one_track (bool skip_child_views)
|
|||||||
TimeAxisView::Children kids = (*t)->get_child_list();
|
TimeAxisView::Children kids = (*t)->get_child_list();
|
||||||
TimeAxisView::Children::reverse_iterator nkid = kids.rend();
|
TimeAxisView::Children::reverse_iterator nkid = kids.rend();
|
||||||
|
|
||||||
|
uint32_t needed_for_kids = 0;
|
||||||
|
|
||||||
for (TimeAxisView::Children::reverse_iterator ci = kids.rbegin(); ci != kids.rend(); ++ci) {
|
for (TimeAxisView::Children::reverse_iterator ci = kids.rbegin(); ci != kids.rend(); ++ci) {
|
||||||
if ((*ci)->hidden()) {
|
if ((*ci)->hidden()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
needed_for_kids += (*ci)->current_height();
|
||||||
|
|
||||||
std::pair<TimeAxisView*,double> dev;
|
std::pair<TimeAxisView*,double> dev;
|
||||||
dev = (*ci)->covers_y_position (top_of_trackviews);
|
dev = (*ci)->covers_y_position (top_of_trackviews);
|
||||||
@ -1506,12 +1513,15 @@ Editor::scroll_down_one_track (bool skip_child_views)
|
|||||||
*/
|
*/
|
||||||
nkid = kids.rend();
|
nkid = kids.rend();
|
||||||
}
|
}
|
||||||
|
needed_height -= (*t)->effective_height();
|
||||||
|
needed_height += needed_for_kids;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
nkid = ci;
|
nkid = ci;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nkid != kids.rend()) {
|
if (nkid != kids.rend() && needed_height > trackviews_height()) {
|
||||||
ensure_time_axis_view_is_visible (**nkid, true);
|
ensure_time_axis_view_is_visible (**nkid, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1522,7 +1532,7 @@ Editor::scroll_down_one_track (bool skip_child_views)
|
|||||||
|
|
||||||
/* move to the track below the first one that covers the */
|
/* move to the track below the first one that covers the */
|
||||||
|
|
||||||
if (next != track_views.rend()) {
|
if (next != track_views.rend() && needed_height > trackviews_height()) {
|
||||||
ensure_time_axis_view_is_visible (**next, true);
|
ensure_time_axis_view_is_visible (**next, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user