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:
parent
70e2b42b9d
commit
448d6b9acc
2 changed files with 12 additions and 12 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue