BufferPane: rename functions to calculate rows in lines

This commit is contained in:
Josh Holtrop 2017-01-01 20:58:08 -05:00
parent b3f972d7f4
commit 7a5b58e8a8
2 changed files with 27 additions and 9 deletions

View File

@ -74,7 +74,7 @@ void BufferPane::walk_line(const Buffer::Iterator & start_of_line, std::function
}
}
int BufferPane::rows_in_line(const Buffer::Iterator & start_of_line)
int BufferPane::calculate_rows_in_line(const Buffer::Iterator & start_of_line)
{
int saved_row_offset = 0;
walk_line(start_of_line, [&saved_row_offset](int row_offset, int screen_column, int virtual_column, int character_width, const Buffer::Iterator & i) {
@ -87,7 +87,7 @@ int BufferPane::rows_in_line(const Buffer::Iterator & start_of_line)
return saved_row_offset + 1;
}
int BufferPane::rows_in_line_with_iterator_offset(const Buffer::Iterator & start_of_line, const Buffer::Iterator & reference, int * iterator_row_offset)
int BufferPane::calculate_rows_in_cursor_line(const Buffer::Iterator & start_of_line, const Buffer::Iterator & reference, int * iterator_row_offset)
{
int saved_row_offset = 0;
walk_line(start_of_line, [this, &saved_row_offset, &reference, &iterator_row_offset](int row_offset, int screen_column, int virtual_column, int character_width, const Buffer::Iterator & i) {
@ -105,13 +105,30 @@ int BufferPane::rows_in_line_with_iterator_offset(const Buffer::Iterator & start
return saved_row_offset + 1;
}
int BufferPane::calculate_rows_in_line_with_iterator_offset(const Buffer::Iterator & start_of_line, const Buffer::Iterator & reference, int * iterator_row_offset)
{
int saved_row_offset = 0;
walk_line(start_of_line, [this, &saved_row_offset, &reference, &iterator_row_offset](int row_offset, int screen_column, int virtual_column, int character_width, const Buffer::Iterator & i) {
uint32_t code_point = *i;
if (i == reference)
{
*iterator_row_offset = row_offset;
}
if ((code_point != '\n') && (code_point != Buffer::Iterator::INVALID_CODE_POINT))
{
saved_row_offset = row_offset;
}
});
return saved_row_offset + 1;
}
int BufferPane::screen_rows_below_line(const Buffer::Iterator & line)
{
Buffer::Iterator i = line;
int rows = 0;
while ((rows < m_rows) && i.go_next_line())
{
rows += rows_in_line(i);
rows += calculate_rows_in_line(i);
}
return rows;
}
@ -122,7 +139,7 @@ int BufferPane::screen_rows_above_line(const Buffer::Iterator & line, std::list<
int rows = 0;
while ((rows < m_rows) && i.go_previous_line())
{
int rows_in_this_line = rows_in_line(i);
int rows_in_this_line = calculate_rows_in_line(i);
rows += rows_in_this_line;
backward_lines.push_back(std::pair<int, Buffer::Iterator>(rows_in_this_line, i));
}
@ -134,7 +151,7 @@ int BufferPane::update_cursor_row(std::list<std::pair<int, Buffer::Iterator>> &
Buffer::Iterator start_of_line = *m_iterator;
start_of_line.go_start_of_line();
int cursor_row_offset;
int rows_in_cursor_line = rows_in_line_with_iterator_offset(start_of_line, *m_iterator, &cursor_row_offset);
int rows_in_cursor_line = calculate_rows_in_cursor_line(start_of_line, *m_iterator, &cursor_row_offset);
int so = effective_scroll_offset();
int rows_above = screen_rows_above_line(*m_iterator, backward_lines) + cursor_row_offset;
int rows_below = screen_rows_below_line(*m_iterator) + std::max(0, rows_in_cursor_line - cursor_row_offset - 1);
@ -164,7 +181,7 @@ int BufferPane::determine_new_cursor_screen_row()
if (screen_line.second.line() == m_iterator->line())
{
int row_offset;
rows_in_line_with_iterator_offset(screen_line.second, *m_iterator, &row_offset);
calculate_rows_in_cursor_line(screen_line.second, *m_iterator, &row_offset);
return screen_line.first + row_offset;
}
}
@ -452,7 +469,7 @@ void BufferPane::cursor_move(Window::CursorMovement which)
int cursor_row_offset;
Buffer::Iterator start_of_line = *m_iterator;
start_of_line.go_start_of_line();
rows_in_line_with_iterator_offset(start_of_line, *m_iterator, &cursor_row_offset);
calculate_rows_in_cursor_line(start_of_line, *m_iterator, &cursor_row_offset);
m_target_column = m_cursor_virtual_column;
}
break;

View File

@ -32,8 +32,9 @@ protected:
int character_width(uint32_t character);
void draw_buffer_character(int screen_column, int screen_row, uint32_t character);
void draw_cursor(int x, int y);
int rows_in_line(const Buffer::Iterator & start_of_line);
int rows_in_line_with_iterator_offset(const Buffer::Iterator & start_of_line, const Buffer::Iterator & reference, int * iterator_row_offset);
int calculate_rows_in_line(const Buffer::Iterator & start_of_line);
int calculate_rows_in_cursor_line(const Buffer::Iterator & start_of_line, const Buffer::Iterator & reference, int * iterator_row_offset);
int calculate_rows_in_line_with_iterator_offset(const Buffer::Iterator & start_of_line, const Buffer::Iterator & reference, int * iterator_row_offset);
int screen_rows_below_line(const Buffer::Iterator & line);
int screen_rows_above_line(const Buffer::Iterator & line, std::list<std::pair<int, Buffer::Iterator>> & backward_lines);
int update_cursor_row(std::list<std::pair<int, Buffer::Iterator>> & backward_lines);