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

Method _key_callback

platform/web/display_server_web.cpp:181–219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

179}
180
181void DisplayServerWeb::_key_callback(const String &p_key_event_code, const String &p_key_event_key, int p_pressed, int p_repeat, int p_modifiers) {
182 // Resume audio context after input in case autoplay was denied.
183 OS_Web::get_singleton()->resume_audio();
184
185 DisplayServerWeb *ds = get_singleton();
186 if (ds->ime_started) {
187 return;
188 }
189
190 char32_t c = 0x00;
191 String unicode = p_key_event_key;
192 if (unicode.length() == 1) {
193 c = unicode[0];
194 }
195
196 Key keycode = dom_code2godot_scancode(p_key_event_code.utf8().get_data(), p_key_event_key.utf8().get_data(), false);
197 Key scancode = dom_code2godot_scancode(p_key_event_code.utf8().get_data(), p_key_event_key.utf8().get_data(), true);
198 KeyLocation location = dom_code2godot_key_location(p_key_event_code.utf8().get_data());
199
200 DisplayServerWeb::KeyEvent ke;
201
202 ke.pressed = p_pressed;
203 ke.echo = p_repeat;
204 ke.raw = true;
205 ke.keycode = fix_keycode(c, keycode);
206 ke.physical_keycode = scancode;
207 ke.key_label = fix_key_label(c, keycode);
208 ke.unicode = fix_unicode(c);
209 ke.location = location;
210 ke.mod = p_modifiers;
211
212 if (ds->key_event_pos >= ds->key_event_buffer.size()) {
213 ds->key_event_buffer.resize(1 + ds->key_event_pos);
214 }
215 ds->key_event_buffer.write[ds->key_event_pos++] = ke;
216
217 // Make sure to flush all events so we can call restricted APIs inside the event.
218 Input::get_singleton()->flush_buffered_events();
219}
220
221// Mouse
222

Callers

nothing calls this directly

Calls 10

fix_keycodeFunction · 0.85
fix_key_labelFunction · 0.85
fix_unicodeFunction · 0.85
resume_audioMethod · 0.80
flush_buffered_eventsMethod · 0.80
sizeMethod · 0.65
lengthMethod · 0.45
get_dataMethod · 0.45
utf8Method · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected