MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / _ime_callback

Method _ime_callback

platform/web/display_server_web.cpp:885–949  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

883}
884
885void DisplayServerWeb::_ime_callback(int p_type, const String &p_text) {
886 DisplayServerWeb *ds = get_singleton();
887 // Resume audio context after input in case autoplay was denied.
888 OS_Web::get_singleton()->resume_audio();
889
890 switch (p_type) {
891 case 0: {
892 // IME start.
893 ds->ime_text = String();
894 ds->ime_selection = Vector2i();
895 for (int i = ds->key_event_pos - 1; i >= 0; i--) {
896 // Delete last raw keydown event from query.
897 if (ds->key_event_buffer[i].pressed && ds->key_event_buffer[i].raw) {
898 ds->key_event_buffer.remove_at(i);
899 ds->key_event_pos--;
900 break;
901 }
902 }
903 OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_OS_IME_UPDATE);
904 ds->ime_started = true;
905 } break;
906 case 1: {
907 // IME update.
908 if (ds->ime_active && ds->ime_started) {
909 ds->ime_text = p_text;
910 ds->ime_selection = Vector2i(ds->ime_text.length(), ds->ime_text.length());
911 OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_OS_IME_UPDATE);
912 }
913 } break;
914 case 2: {
915 // IME commit.
916 if (ds->ime_active && ds->ime_started) {
917 ds->ime_started = false;
918
919 ds->ime_text = String();
920 ds->ime_selection = Vector2i();
921 OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_OS_IME_UPDATE);
922
923 String text = p_text;
924 for (int i = 0; i < text.length(); i++) {
925 DisplayServerWeb::KeyEvent ke;
926
927 ke.pressed = true;
928 ke.echo = false;
929 ke.raw = false;
930 ke.keycode = Key::NONE;
931 ke.physical_keycode = Key::NONE;
932 ke.key_label = Key::NONE;
933 ke.unicode = text[i];
934 ke.mod = 0;
935
936 if (ds->key_event_pos >= ds->key_event_buffer.size()) {
937 ds->key_event_buffer.resize(1 + ds->key_event_pos);
938 }
939 ds->key_event_buffer.write[ds->key_event_pos++] = ke;
940 }
941 }
942 } break;

Callers

nothing calls this directly

Calls 11

resume_audioMethod · 0.80
process_keysMethod · 0.80
flush_buffered_eventsMethod · 0.80
sizeMethod · 0.65
StringClass · 0.50
Vector2iClass · 0.50
remove_atMethod · 0.45
notificationMethod · 0.45
get_main_loopMethod · 0.45
lengthMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected