diff --git a/src/gui/Window.cc b/src/gui/Window.cc index 3f37fc7..ac65259 100644 --- a/src/gui/Window.cc +++ b/src/gui/Window.cc @@ -378,6 +378,30 @@ void Window::update_cursor_row() void Window::draw_buffer() { update_cursor_row(); + int screen_row = m_cursor_row - m_cursor->column() / m_columns; + GapBuffer::Cursor draw_cursor = *m_cursor; + draw_cursor.go_start_of_line(); + while ((screen_row > 0) && draw_cursor.go_up(0u)) + { + GapBuffer::Cursor cursor2 = draw_cursor; + cursor2.go_end_of_line(false); + screen_row -= (1 + cursor2.column() / m_columns); + } + while (screen_row < m_rows) + { + draw_buffer_line(screen_row, draw_cursor); + draw_cursor.go_end_of_line(false); + screen_row += (1 + draw_cursor.column() / m_columns); + if (!draw_cursor.go_down(0u)) + { + break; + } + } +} + +void Window::draw_buffer_line(int screen_row, const GapBuffer::Cursor & cursor) +{ + /* TODO */ } void Window::draw_buffer_character(int screen_column, int screen_row, uint32_t character) diff --git a/src/gui/Window.h b/src/gui/Window.h index 7e9341b..5bd2ba0 100644 --- a/src/gui/Window.h +++ b/src/gui/Window.h @@ -45,6 +45,7 @@ protected: void handle_keyval(uint32_t keyval); void cursor_move(int which); void draw_buffer(); + void draw_buffer_line(int screen_row, const GapBuffer::Cursor & cursor); void draw_buffer_character(int screen_column, int screen_row, uint32_t character); void draw_character(int x, int y, uint32_t character); void update_cursor_row();