From 40bb3b857e004e7d60967623f682e8c8717dd5a9 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Sat, 20 Oct 2012 08:26:38 -0700 Subject: [PATCH] Allow scrolling the subtitles grid a page past the last row. Closes #888. --- aegisub/src/base_grid.cpp | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/aegisub/src/base_grid.cpp b/aegisub/src/base_grid.cpp index cebbd5392..b73990347 100644 --- a/aegisub/src/base_grid.cpp +++ b/aegisub/src/base_grid.cpp @@ -787,31 +787,37 @@ void BaseGrid::OnContextMenu(wxContextMenuEvent &evt) { void BaseGrid::ScrollTo(int y) { int h = GetClientSize().GetHeight(); - int nextY = mid(0, y, GetRows() + 2 - h / lineHeight); + int nextY = mid(0, y, GetRows() - 1); if (yPos != nextY) { yPos = nextY; - if (scrollBar->IsEnabled()) scrollBar->SetThumbPosition(yPos); + scrollBar->SetThumbPosition(yPos); Refresh(false); } } void BaseGrid::AdjustScrollbar() { - int w,h,sw,sh; - GetClientSize(&w,&h); - int drawPerScreen = h/lineHeight; - int rows = GetRows(); - bool barToEnable = drawPerScreen < rows+2; - - yPos = mid(0,yPos,rows - drawPerScreen); + wxSize clientSize = GetClientSize(); + wxSize scrollbarSize = scrollBar->GetSize(); scrollBar->Freeze(); - scrollBar->GetSize(&sw,&sh); - scrollBar->SetSize(w-sw,0,sw,h); + scrollBar->SetSize(clientSize.GetWidth() - scrollbarSize.GetWidth(), 0, scrollbarSize.GetWidth(), clientSize.GetHeight()); - if (barToEnable != scrollBar->IsEnabled()) scrollBar->Enable(barToEnable); - if (barToEnable) { - scrollBar->SetScrollbar(yPos,drawPerScreen,rows+2,drawPerScreen-2,true); + if (GetRows() <= 1) { + scrollBar->Enable(false); + scrollBar->Thaw(); + return; } + + if (!scrollBar->IsEnabled()) { + scrollBar->Enable(true); + } + + int drawPerScreen = clientSize.GetHeight() / lineHeight; + int rows = GetRows(); + + yPos = mid(0, yPos, rows - 1); + + scrollBar->SetScrollbar(yPos, drawPerScreen, rows + drawPerScreen - 1, drawPerScreen - 2, true); scrollBar->Thaw(); }