diff --git a/rpcs3/Emu/RSX/Overlays/overlay_edit_text.cpp b/rpcs3/Emu/RSX/Overlays/overlay_edit_text.cpp index 9e92e0cfa7..6107d7f997 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_edit_text.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_edit_text.cpp @@ -173,6 +173,27 @@ namespace rsx refresh(); } + void edit_text::del() + { + if (caret_position >= text.length()) + { + return; + } + + if (caret_position == 0) + { + value = value.length() > 1 ? value.substr(1) : U""; + } + else + { + value = value.substr(0, caret_position) + value.substr(caret_position + 1); + } + + m_reset_caret_pulse = true; + set_unicode_text(value); + refresh(); + } + compiled_resource& edit_text::get_compiled() { if (!is_compiled) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_edit_text.hpp b/rpcs3/Emu/RSX/Overlays/overlay_edit_text.hpp index b7bbbaa413..d6537f88b8 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_edit_text.hpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_edit_text.hpp @@ -33,6 +33,7 @@ namespace rsx void move_caret(direction dir); void insert_text(const std::u32string& str); void erase(); + void del(); compiled_resource& get_compiled() override; }; diff --git a/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp b/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp index 5eecd901c2..2b12f2902b 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp @@ -700,6 +700,9 @@ namespace rsx case CELL_KEYC_BS: on_backspace(key); break; + case CELL_KEYC_DELETE: + on_delete(key); + break; case CELL_KEYC_ESCAPE: Close(CELL_OSKDIALOG_CLOSE_CANCEL); break; @@ -812,6 +815,12 @@ namespace rsx on_text_changed(); } + void osk_dialog::on_delete(const std::u32string&) + { + m_preview.del(); + on_text_changed(); + } + void osk_dialog::on_enter(const std::u32string&) { if (!(flags & CELL_OSKDIALOG_NO_RETURN)) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_osk.h b/rpcs3/Emu/RSX/Overlays/overlay_osk.h index e83e3540cc..65840ccbe5 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_osk.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_osk.h @@ -104,6 +104,7 @@ namespace rsx void on_layer(const std::u32string&); void on_space(const std::u32string&); void on_backspace(const std::u32string&); + void on_delete(const std::u32string&); void on_enter(const std::u32string&); std::u32string get_placeholder() const;