diff options
Diffstat (limited to 'Libraries/LibGUI/TextDocument.cpp')
-rw-r--r-- | Libraries/LibGUI/TextDocument.cpp | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/Libraries/LibGUI/TextDocument.cpp b/Libraries/LibGUI/TextDocument.cpp index 32ba3a4235..b6d4ef3472 100644 --- a/Libraries/LibGUI/TextDocument.cpp +++ b/Libraries/LibGUI/TextDocument.cpp @@ -117,6 +117,12 @@ void TextDocumentLine::clear(TextDocument& document) document.update_views({}); } +void TextDocumentLine::set_text(TextDocument& document, const Vector<u32> text) +{ + m_text = move(text); + document.update_views({}); +} + void TextDocumentLine::set_text(TextDocument& document, const StringView& text) { if (text.is_empty()) { @@ -132,6 +138,8 @@ void TextDocumentLine::set_text(TextDocument& document, const StringView& text) void TextDocumentLine::append(TextDocument& document, const u32* codepoints, size_t length) { + if (length == 0) + return; m_text.append(codepoints, length); document.update_views({}); } @@ -588,9 +596,10 @@ void TextDocument::remove(const TextRange& unnormalized_range) ASSERT(range.start().line() == range.end().line() - 1); auto& first_line = line(range.start().line()); auto& second_line = line(range.end().line()); - first_line.clear(*this); - first_line.append(*this, first_line.codepoints(), range.start().column()); - first_line.append(*this, second_line.codepoints() + range.end().column(), second_line.length() - range.end().column()); + Vector<u32> codepoints; + codepoints.append(first_line.codepoints(), range.start().column()); + codepoints.append(second_line.codepoints() + range.end().column(), second_line.length() - range.end().column()); + first_line.set_text(*this, move(codepoints)); remove_line(range.end().line()); } |