BufferView: fix more scrolling problems
This commit is contained in:
parent
33377f7668
commit
1d12a7fe7d
@ -195,6 +195,7 @@ bool BufferView::cursor_move(CursorMovement which, bool allow_eol)
|
||||
|
||||
void BufferView::scroll_view_up(int n_lines, bool allow_eol)
|
||||
{
|
||||
int orig_cursor_screen_row = m_cursor_screen_row;
|
||||
int so = effective_scroll_offset();
|
||||
int rows_to_move_cursor = (so + n_lines) - (m_height - m_cursor_screen_row - 1);
|
||||
rows_to_move_cursor = std::min(calculate_rows_above_screen(rows_to_move_cursor), rows_to_move_cursor);
|
||||
@ -204,17 +205,19 @@ void BufferView::scroll_view_up(int n_lines, bool allow_eol)
|
||||
if (move_cursor_screen_row_up(allow_eol))
|
||||
{
|
||||
actual_lines_moved++;
|
||||
update();
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_cursor_screen_row += (n_lines - actual_lines_moved);
|
||||
m_cursor_screen_row = orig_cursor_screen_row + (n_lines - actual_lines_moved);
|
||||
}
|
||||
|
||||
void BufferView::scroll_view_down(int n_lines, bool allow_eol)
|
||||
{
|
||||
int orig_cursor_screen_row = m_cursor_screen_row;
|
||||
int so = effective_scroll_offset();
|
||||
int rows_to_move_cursor = (so + n_lines) - m_cursor_screen_row;
|
||||
rows_to_move_cursor = std::min(calculate_rows_below_screen(rows_to_move_cursor), rows_to_move_cursor);
|
||||
@ -224,13 +227,14 @@ void BufferView::scroll_view_down(int n_lines, bool allow_eol)
|
||||
if (move_cursor_screen_row_down(allow_eol))
|
||||
{
|
||||
actual_lines_moved++;
|
||||
update();
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
m_cursor_screen_row -= (n_lines - actual_lines_moved);
|
||||
m_cursor_screen_row = orig_cursor_screen_row - (n_lines - actual_lines_moved);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -592,6 +592,49 @@ TEST(BufferViewTest, scrolls_the_view_up_and_down)
|
||||
EXPECT_EQ(5, bv.cursor_screen_row());
|
||||
}
|
||||
|
||||
TEST(BufferViewTest, scrolls_the_view_up_and_down_with_wrapped_lines)
|
||||
{
|
||||
auto b = buffer1();
|
||||
auto iterator = b->add_iterator();
|
||||
BufferView bv(b, iterator, Cwd);
|
||||
bv.resize(4, 2);
|
||||
bv.update();
|
||||
EXPECT_EQ(0, LineNumber(iterator));
|
||||
EXPECT_EQ(0, bv.cursor_screen_row());
|
||||
bv.scroll_view_down(6, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(6, LineNumber(iterator));
|
||||
EXPECT_EQ(C('6'), **iterator);
|
||||
EXPECT_EQ(0, bv.cursor_screen_row());
|
||||
bv.scroll_view_down(1, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(6, LineNumber(iterator));
|
||||
EXPECT_EQ(C('d'), **iterator);
|
||||
bv.scroll_view_down(1, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(7, LineNumber(iterator));
|
||||
EXPECT_EQ(C('7'), **iterator);
|
||||
bv.scroll_view_down(4, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(9, LineNumber(iterator));
|
||||
EXPECT_EQ(C('h'), **iterator);
|
||||
bv.scroll_view_down(2, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(10, LineNumber(iterator));
|
||||
EXPECT_EQ(C('1'), **iterator);
|
||||
|
||||
bv.cursor_move(BufferView::CursorMovement::RIGHT, false);
|
||||
bv.update();
|
||||
bv.scroll_view_up(3, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(9, LineNumber(iterator));
|
||||
EXPECT_EQ(C('i'), **iterator);
|
||||
bv.scroll_view_up(5, false);
|
||||
bv.update();
|
||||
EXPECT_EQ(6, LineNumber(iterator));
|
||||
EXPECT_EQ(C('e'), **iterator);
|
||||
}
|
||||
|
||||
TEST(BufferViewTest, scrolls_the_view_up_and_down_with_nonzero_scroll_offset)
|
||||
{
|
||||
auto b = buffer1();
|
||||
|
Loading…
x
Reference in New Issue
Block a user