1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 06:27:45 +00:00

LibGUI: Make TextEditor substitution more explicit

This patch changes the member for the code point substitution to be an
Optional to remove the implicitness of the zero value.
This commit is contained in:
faxe1008 2022-05-07 16:03:33 +02:00 committed by Linus Groh
parent 70e2b42b9d
commit 448d6b9acc
2 changed files with 12 additions and 12 deletions

View file

@ -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<Vector<u32>>();
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<u32> 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