String InputEventKey::as_text() const { String kc = keycode_get_string(scancode); if (kc == String()) return kc; if (get_metakey()) { kc = find_keycode_name(KEY_META) + ("+" + kc); } if (get_alt()) { kc = find_keycode_name(KEY_ALT) + ("+" + kc); } if (get_shift()) { kc = find_keycode_name(KEY_SHIFT) + ("+" + kc); } if (get_control()) { kc = find_keycode_name(KEY_CONTROL) + ("+" + kc); } return kc; }
String keycode_get_string(uint32_t p_code) { String codestr; if (p_code & KEY_MASK_SHIFT) { codestr += find_keycode_name(KEY_SHIFT); codestr += "+"; } if (p_code & KEY_MASK_ALT) { codestr += find_keycode_name(KEY_ALT); codestr += "+"; } if (p_code & KEY_MASK_CTRL) { codestr += find_keycode_name(KEY_CONTROL); codestr += "+"; } if (p_code & KEY_MASK_META) { codestr += find_keycode_name(KEY_META); codestr += "+"; } p_code &= KEY_CODE_MASK; const _KeyCodeText *kct = &_keycodes[0]; while (kct->text) { if (kct->code == (int)p_code) { codestr += kct->text; return codestr; } kct++; } codestr += String::chr(p_code); return codestr; }
void EditorSettingsDialog::_wait_for_key(const Ref<InputEvent> &p_event) { Ref<InputEventKey> k = p_event; if (k.is_valid() && k->is_pressed() && k->get_scancode() != 0) { last_wait_for_key = k; String str = keycode_get_string(k->get_scancode()).capitalize(); if (k->get_metakey()) str = vformat("%s+", find_keycode_name(KEY_META)) + str; if (k->get_shift()) str = TTR("Shift+") + str; if (k->get_alt()) str = TTR("Alt+") + str; if (k->get_control()) str = TTR("Control+") + str; press_a_key_label->set_text(str); press_a_key->accept_event(); } }