summaryrefslogtreecommitdiff
path: root/src/window.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2013-06-05 18:47:39 +0200
committerMaxime Coste <frrrwww@gmail.com>2013-06-06 19:44:07 +0200
commit70bf71e51fb8433cbbd3170d698ad3dc28ce8d16 (patch)
treec3e1e209ac775793b93511a580fcb272e0465a3b /src/window.cc
parent580749a91da1e293c9dc8c5f3a72aa9c5a5e7666 (diff)
remove Buffer:char_{distance,advance} use line access instead
Diffstat (limited to 'src/window.cc')
-rw-r--r--src/window.cc13
1 files changed, 7 insertions, 6 deletions
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<LineCount>(options()["scrolloff"].get<int>(),
(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)