diff --git a/Userland/Libraries/LibGUI/TextEditor.cpp b/Userland/Libraries/LibGUI/TextEditor.cpp index 21675f7f34..1852b68399 100644 --- a/Userland/Libraries/LibGUI/TextEditor.cpp +++ b/Userland/Libraries/LibGUI/TextEditor.cpp @@ -226,7 +226,7 @@ void TextEditor::doubleclick_event(MouseEvent& event) auto position = text_position_at(event.position()); - if (m_substitution_code_point) { + if (m_substitution_code_point.has_value()) { // NOTE: If we substitute the code points, we don't want double clicking to only select a single word, since // whitespace isn't visible anymore. m_selection = document().range_for_entire_line(position.line()); @@ -409,7 +409,7 @@ void TextEditor::paint_event(PaintEvent& event) // NOTE: This lambda and TextEditor::text_width_for_font() are used to substitute all glyphs with m_substitution_code_point if necessary. // Painter::draw_text() and Gfx::Font::width() should not be called directly, but using this lambda and TextEditor::text_width_for_font(). auto draw_text = [&](Gfx::IntRect const& rect, auto const& raw_text, Gfx::Font const& font, Gfx::TextAlignment alignment, Gfx::TextAttributes attributes, bool substitute = true) { - if (m_substitution_code_point && substitute) { + if (m_substitution_code_point.has_value() && substitute) { painter.draw_text(rect, substitution_code_point_view(raw_text.length()), font, alignment, attributes.color); } else { painter.draw_text(rect, raw_text, font, alignment, attributes.color); @@ -1090,7 +1090,7 @@ int TextEditor::content_x_for_position(TextPosition const& position) const int TextEditor::text_width_for_font(auto const& text, Gfx::Font const& font) const { - if (m_substitution_code_point) + if (m_substitution_code_point.has_value()) return font.width(substitution_code_point_view(text.length())); else return font.width(text); @@ -1098,13 +1098,13 @@ int TextEditor::text_width_for_font(auto const& text, Gfx::Font const& font) con Utf32View TextEditor::substitution_code_point_view(size_t length) const { - VERIFY(m_substitution_code_point); + VERIFY(m_substitution_code_point.has_value()); if (!m_substitution_string_data) m_substitution_string_data = make>(); if (!m_substitution_string_data->is_empty()) VERIFY(m_substitution_string_data->first() == m_substitution_code_point); while (m_substitution_string_data->size() < length) - m_substitution_string_data->append(m_substitution_code_point); + m_substitution_string_data->append(m_substitution_code_point.value()); return Utf32View { m_substitution_string_data->data(), length }; } @@ -2066,11 +2066,12 @@ void TextEditor::set_should_autocomplete_automatically(bool value) m_autocomplete_timer = nullptr; } -void TextEditor::set_substitution_code_point(u32 code_point) +void TextEditor::set_substitution_code_point(Optional code_point) { - VERIFY(is_unicode(code_point)); + if (code_point.has_value()) + VERIFY(is_unicode(code_point.value())); m_substitution_string_data.clear(); - m_substitution_code_point = code_point; + m_substitution_code_point = move(code_point); } int TextEditor::number_of_visible_lines() const diff --git a/Userland/Libraries/LibGUI/TextEditor.h b/Userland/Libraries/LibGUI/TextEditor.h index 1bd5b1401a..be582cabab 100644 --- a/Userland/Libraries/LibGUI/TextEditor.h +++ b/Userland/Libraries/LibGUI/TextEditor.h @@ -191,8 +191,8 @@ public: bool should_autocomplete_automatically() const { return m_autocomplete_timer; } void set_should_autocomplete_automatically(bool); - u32 substitution_code_point() const { return m_substitution_code_point; } - void set_substitution_code_point(u32 code_point); + Optional const& substitution_code_point() const { return m_substitution_code_point; } + void set_substitution_code_point(Optional code_point); bool is_in_drag_select() const { return m_in_drag_select; } @@ -371,8 +371,7 @@ private: int m_horizontal_content_padding { 3 }; TextRange m_selection; - // NOTE: If non-zero, all glyphs will be substituted with this one. - u32 m_substitution_code_point { 0 }; + Optional m_substitution_code_point; mutable OwnPtr> m_substitution_string_data; // Used to avoid repeated String construction. RefPtr m_context_menu;