瀏覽代碼

LibGUI: Extract repeated code for populating TextEditor per-line data

Sam Atkins 2 年之前
父節點
當前提交
03571b1fa9
共有 2 個文件被更改,包括 13 次插入7 次删除
  1. 12 7
      Userland/Libraries/LibGUI/TextEditor.cpp
  2. 1 0
      Userland/Libraries/LibGUI/TextEditor.h

+ 12 - 7
Userland/Libraries/LibGUI/TextEditor.cpp

@@ -2203,11 +2203,19 @@ void TextEditor::document_did_update_undo_stack()
         on_modified_change(document().is_modified());
 }
 
-void TextEditor::document_did_set_text(AllowCallback allow_callback)
+void TextEditor::populate_line_data()
 {
     m_line_visual_data.clear();
-    for (size_t i = 0; i < m_document->line_count(); ++i)
-        m_line_visual_data.append(make<LineVisualData>());
+    m_line_visual_data.ensure_capacity(m_document->line_count());
+
+    for (size_t i = 0; i < m_document->line_count(); ++i) {
+        m_line_visual_data.unchecked_append(make<LineVisualData>());
+    }
+}
+
+void TextEditor::document_did_set_text(AllowCallback allow_callback)
+{
+    populate_line_data();
     document_did_change(allow_callback);
 }
 
@@ -2233,10 +2241,7 @@ void TextEditor::set_document(TextDocument& document)
     if (m_document)
         m_document->unregister_client(*this);
     m_document = document;
-    m_line_visual_data.clear();
-    for (size_t i = 0; i < m_document->line_count(); ++i) {
-        m_line_visual_data.append(make<LineVisualData>());
-    }
+    populate_line_data();
     set_cursor(0, 0);
     if (has_selection())
         m_selection.clear();

+ 1 - 0
Userland/Libraries/LibGUI/TextEditor.h

@@ -363,6 +363,7 @@ private:
 
     size_t visual_line_containing(size_t line_index, size_t column) const;
     void recompute_visual_lines(size_t line_index, Vector<TextDocumentFoldingRegion const&>::Iterator& folded_region_iterator);
+    void populate_line_data();
 
     template<class T, class... Args>
     inline void execute(Args&&... args)