From 70bf71e51fb8433cbbd3170d698ad3dc28ce8d16 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Wed, 5 Jun 2013 18:47:39 +0200 Subject: remove Buffer:char_{distance,advance} use line access instead --- src/window.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'src/window.cc') diff --git a/src/window.cc b/src/window.cc index 24cffed6..41cfe0dc 100644 --- a/src/window.cc +++ b/src/window.cc @@ -69,9 +69,9 @@ void Window::update_display_buffer() LineCount buffer_line = m_position.line + line; if (buffer_line >= buffer().line_count()) break; - BufferCoord limit{buffer_line+1, 0}; - auto begin = std::min(buffer().char_advance(buffer_line, m_position.column), limit); - auto end = std::min(buffer().char_advance(begin, m_dimensions.column), limit); + const String& content = buffer()[buffer_line]; + BufferCoord begin{buffer_line, content.byte_count_to(m_position.column)}; + BufferCoord end{buffer_line, content.byte_count_to(m_position.column + m_dimensions.column)}; lines.push_back(DisplayLine(buffer_line)); lines.back().push_back(DisplayAtom(AtomContent(buffer(), begin, end))); @@ -112,6 +112,7 @@ void Window::scroll_to_keep_cursor_visible_ifn() { const auto& first = main_selection().first(); const auto& last = main_selection().last(); + const String& content = buffer()[last.line]; const LineCount offset = std::min(options()["scrolloff"].get(), (m_dimensions.line - 1) / 2); @@ -145,14 +146,14 @@ void Window::scroll_to_keep_cursor_visible_ifn() { column += atom.content.length(); - CharCount first_col = first.line == last.line ? - buffer().char_distance(last.line, first) : 0_char; + auto first_col = (first.line == last.line) ? content.char_count_to(first.column) : 0_char; + auto last_col = content.char_count_to(last.column); + if (first_col < m_position.column) m_position.column = first_col; else if (column >= m_position.column + m_dimensions.column) m_position.column = column - (m_dimensions.column - 1); - CharCount last_col = buffer().char_distance(last.line, last); if (last_col < m_position.column) m_position.column = last_col; else if (column >= m_position.column + m_dimensions.column) -- cgit v1.2.3