| 179 | } |
| 180 | |
| 181 | void 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 |
nothing calls this directly
no test coverage detected