diff --git a/src/core/BufferView.cc b/src/core/BufferView.cc index 7d0168b..1d237c0 100644 --- a/src/core/BufferView.cc +++ b/src/core/BufferView.cc @@ -3,19 +3,17 @@ BufferView::BufferView(std::shared_ptr buffer, std::shared_ptr iterator, CharacterWidthDeterminer & character_width_determiner) - : m_buffer(buffer), - m_iterator(iterator), - m_character_width_determiner(character_width_determiner) + : m_iterator(iterator) { - m_width = 1; m_height = 1; m_scroll_offset = 0; m_cursor_screen_row = 0; + m_buffer_line_walker = std::make_shared(buffer, character_width_determiner); } void BufferView::resize(int width, int height) { - m_width = std::max(1, width); + m_buffer_line_walker->set_width(width); m_height = std::max(1, height); } diff --git a/src/core/BufferView.h b/src/core/BufferView.h index 5f95a4f..f7a9eab 100644 --- a/src/core/BufferView.h +++ b/src/core/BufferView.h @@ -4,6 +4,7 @@ #include "Buffer.h" #include "CharacterWidthDeterminer.h" #include +#include "BufferLineWalker.h" /** * Tracks a "view" of a buffer, which is a two-dimensional grid of characters @@ -18,15 +19,19 @@ public: void resize(int width, int height); void set_scroll_offset(int scroll_offset); void iter_lines(std::function callback); + void walk_line( + const Buffer::Iterator & start_of_line, + std::function callback) + { + m_buffer_line_walker->walk_line(start_of_line, callback); + } protected: - std::shared_ptr m_buffer; std::shared_ptr m_iterator; - CharacterWidthDeterminer & m_character_width_determiner; - int m_width; int m_height; int m_scroll_offset; int m_cursor_screen_row; + std::shared_ptr m_buffer_line_walker; int effective_scroll_offset() {