1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-28 21:22:08 +00:00

LibGUI: Update TextEditor to delete emoji based on gbp cluster

Updated TextDocument and TextEditor to use calls to
`find_grapheme_segmentation_boundary` in order to make "correct-feeling"
deletions on backspace and delete keys being pressed
This commit is contained in:
Fausto Tommasi 2023-02-15 07:49:01 -06:00 committed by Tim Flynn
parent 782b1d20f5
commit f7458b3e17
3 changed files with 37 additions and 0 deletions

View file

@ -961,6 +961,9 @@ void TextEditor::keydown_event(KeyEvent& event)
if (event.modifiers() == Mod_Ctrl) {
auto word_break_pos = document().first_word_break_after(m_cursor);
erase_count = word_break_pos.column() - m_cursor.column();
} else {
auto grapheme_break_position = document().get_next_grapheme_cluster_boundary(m_cursor);
erase_count = grapheme_break_position - m_cursor.column();
}
TextRange erased_range(m_cursor, { m_cursor.line(), m_cursor.column() + erase_count });
execute<RemoveTextCommand>(document().text_in_range(erased_range), erased_range);
@ -1001,6 +1004,9 @@ void TextEditor::keydown_event(KeyEvent& event)
else
new_column = (m_cursor.column() / m_soft_tab_width) * m_soft_tab_width;
erase_count = m_cursor.column() - new_column;
} else {
auto grapheme_break_position = document().get_previous_grapheme_cluster_boundary(m_cursor);
erase_count = m_cursor.column() - grapheme_break_position;
}
// Backspace within line