mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 04:27:44 +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());
|
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
|
// 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.
|
// whitespace isn't visible anymore.
|
||||||
m_selection = document().range_for_entire_line(position.line());
|
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.
|
// 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().
|
// 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) {
|
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);
|
painter.draw_text(rect, substitution_code_point_view(raw_text.length()), font, alignment, attributes.color);
|
||||||
} else {
|
} else {
|
||||||
painter.draw_text(rect, raw_text, font, alignment, attributes.color);
|
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
|
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()));
|
return font.width(substitution_code_point_view(text.length()));
|
||||||
else
|
else
|
||||||
return font.width(text);
|
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
|
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)
|
if (!m_substitution_string_data)
|
||||||
m_substitution_string_data = make<Vector<u32>>();
|
m_substitution_string_data = make<Vector<u32>>();
|
||||||
if (!m_substitution_string_data->is_empty())
|
if (!m_substitution_string_data->is_empty())
|
||||||
VERIFY(m_substitution_string_data->first() == m_substitution_code_point);
|
VERIFY(m_substitution_string_data->first() == m_substitution_code_point);
|
||||||
while (m_substitution_string_data->size() < length)
|
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 };
|
return Utf32View { m_substitution_string_data->data(), length };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2066,11 +2066,12 @@ void TextEditor::set_should_autocomplete_automatically(bool value)
|
||||||
m_autocomplete_timer = nullptr;
|
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_string_data.clear();
|
||||||
m_substitution_code_point = code_point;
|
m_substitution_code_point = move(code_point);
|
||||||
}
|
}
|
||||||
|
|
||||||
int TextEditor::number_of_visible_lines() const
|
int TextEditor::number_of_visible_lines() const
|
||||||
|
|
|
@ -191,8 +191,8 @@ public:
|
||||||
bool should_autocomplete_automatically() const { return m_autocomplete_timer; }
|
bool should_autocomplete_automatically() const { return m_autocomplete_timer; }
|
||||||
void set_should_autocomplete_automatically(bool);
|
void set_should_autocomplete_automatically(bool);
|
||||||
|
|
||||||
u32 substitution_code_point() const { return m_substitution_code_point; }
|
Optional<u32> const& substitution_code_point() const { return m_substitution_code_point; }
|
||||||
void set_substitution_code_point(u32 code_point);
|
void set_substitution_code_point(Optional<u32> code_point);
|
||||||
|
|
||||||
bool is_in_drag_select() const { return m_in_drag_select; }
|
bool is_in_drag_select() const { return m_in_drag_select; }
|
||||||
|
|
||||||
|
@ -371,8 +371,7 @@ private:
|
||||||
int m_horizontal_content_padding { 3 };
|
int m_horizontal_content_padding { 3 };
|
||||||
TextRange m_selection;
|
TextRange m_selection;
|
||||||
|
|
||||||
// NOTE: If non-zero, all glyphs will be substituted with this one.
|
Optional<u32> m_substitution_code_point;
|
||||||
u32 m_substitution_code_point { 0 };
|
|
||||||
mutable OwnPtr<Vector<u32>> m_substitution_string_data; // Used to avoid repeated String construction.
|
mutable OwnPtr<Vector<u32>> m_substitution_string_data; // Used to avoid repeated String construction.
|
||||||
|
|
||||||
RefPtr<Menu> m_context_menu;
|
RefPtr<Menu> m_context_menu;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue