1 /* 2 * This file is part of mpv. 3 * 4 * mpv is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * mpv is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with mpv. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #ifndef MPLAYER_KEYCODES_H 19 #define MPLAYER_KEYCODES_H 20 21 // Keys in the range [0, MP_KEY_BASE) follow unicode. 22 // Special keys come after this. 23 #define MP_KEY_BASE (1<<21) 24 25 // printable, and valid unicode range (we don't care too much about whether 26 // certain sub-ranges are reserved and disallowed, like surrogate pairs) 27 #define MP_KEY_IS_UNICODE(key) ((key) >= 32 && (key) <= 0x10FFFF) 28 29 #define MP_KEY_ENTER 13 30 #define MP_KEY_TAB 9 31 32 /* Control keys */ 33 #define MP_KEY_BACKSPACE (MP_KEY_BASE+0) 34 #define MP_KEY_DELETE (MP_KEY_BASE+1) 35 #define MP_KEY_INSERT (MP_KEY_BASE+2) 36 #define MP_KEY_HOME (MP_KEY_BASE+3) 37 #define MP_KEY_END (MP_KEY_BASE+4) 38 #define MP_KEY_PAGE_UP (MP_KEY_BASE+5) 39 #define MP_KEY_PAGE_DOWN (MP_KEY_BASE+6) 40 #define MP_KEY_ESC (MP_KEY_BASE+7) 41 #define MP_KEY_PRINT (MP_KEY_BASE+8) 42 43 /* Control keys short name */ 44 #define MP_KEY_BS MP_KEY_BACKSPACE 45 #define MP_KEY_DEL MP_KEY_DELETE 46 #define MP_KEY_INS MP_KEY_INSERT 47 #define MP_KEY_PGUP MP_KEY_PAGE_UP 48 #define MP_KEY_PGDOWN MP_KEY_PAGE_DOWN 49 #define MP_KEY_PGDWN MP_KEY_PAGE_DOWN 50 51 /* Cursor movement */ 52 #define MP_KEY_CRSR (MP_KEY_BASE+0x10) 53 #define MP_KEY_RIGHT (MP_KEY_CRSR+0) 54 #define MP_KEY_LEFT (MP_KEY_CRSR+1) 55 #define MP_KEY_DOWN (MP_KEY_CRSR+2) 56 #define MP_KEY_UP (MP_KEY_CRSR+3) 57 58 /* Multimedia/internet keyboard/remote keys */ 59 #define MP_KEY_MM_BASE (MP_KEY_BASE+0x20) 60 #define MP_KEY_POWER (MP_KEY_MM_BASE+0) 61 #define MP_KEY_MENU (MP_KEY_MM_BASE+1) 62 #define MP_KEY_PLAY (MP_KEY_MM_BASE+2) 63 #define MP_KEY_PAUSE (MP_KEY_MM_BASE+3) 64 #define MP_KEY_PLAYPAUSE (MP_KEY_MM_BASE+4) 65 #define MP_KEY_STOP (MP_KEY_MM_BASE+5) 66 #define MP_KEY_FORWARD (MP_KEY_MM_BASE+6) 67 #define MP_KEY_REWIND (MP_KEY_MM_BASE+7) 68 #define MP_KEY_NEXT (MP_KEY_MM_BASE+8) 69 #define MP_KEY_PREV (MP_KEY_MM_BASE+9) 70 #define MP_KEY_VOLUME_UP (MP_KEY_MM_BASE+10) 71 #define MP_KEY_VOLUME_DOWN (MP_KEY_MM_BASE+11) 72 #define MP_KEY_MUTE (MP_KEY_MM_BASE+12) 73 #define MP_KEY_HOMEPAGE (MP_KEY_MM_BASE+13) 74 #define MP_KEY_WWW (MP_KEY_MM_BASE+14) 75 #define MP_KEY_MAIL (MP_KEY_MM_BASE+15) 76 #define MP_KEY_FAVORITES (MP_KEY_MM_BASE+16) 77 #define MP_KEY_SEARCH (MP_KEY_MM_BASE+17) 78 #define MP_KEY_SLEEP (MP_KEY_MM_BASE+18) 79 #define MP_KEY_CANCEL (MP_KEY_MM_BASE+19) 80 #define MP_KEY_RECORD (MP_KEY_MM_BASE+20) 81 #define MP_KEY_CHANNEL_UP (MP_KEY_MM_BASE+21) 82 #define MP_KEY_CHANNEL_DOWN (MP_KEY_MM_BASE+22) 83 #define MP_KEY_PLAYONLY (MP_KEY_MM_BASE+23) 84 #define MP_KEY_PAUSEONLY (MP_KEY_MM_BASE+24) 85 86 /* Function keys */ 87 #define MP_KEY_F (MP_KEY_BASE+0x40) 88 89 /* Keypad keys */ 90 #define MP_KEY_KEYPAD (MP_KEY_BASE+0x60) 91 #define MP_KEY_KP0 (MP_KEY_KEYPAD+0) 92 #define MP_KEY_KP1 (MP_KEY_KEYPAD+1) 93 #define MP_KEY_KP2 (MP_KEY_KEYPAD+2) 94 #define MP_KEY_KP3 (MP_KEY_KEYPAD+3) 95 #define MP_KEY_KP4 (MP_KEY_KEYPAD+4) 96 #define MP_KEY_KP5 (MP_KEY_KEYPAD+5) 97 #define MP_KEY_KP6 (MP_KEY_KEYPAD+6) 98 #define MP_KEY_KP7 (MP_KEY_KEYPAD+7) 99 #define MP_KEY_KP8 (MP_KEY_KEYPAD+8) 100 #define MP_KEY_KP9 (MP_KEY_KEYPAD+9) 101 #define MP_KEY_KPDEC (MP_KEY_KEYPAD+10) 102 #define MP_KEY_KPINS (MP_KEY_KEYPAD+11) 103 #define MP_KEY_KPDEL (MP_KEY_KEYPAD+12) 104 #define MP_KEY_KPENTER (MP_KEY_KEYPAD+13) 105 106 // Mouse events from VOs 107 #define MP_MBTN_BASE ((MP_KEY_BASE+0xA0)|MP_NO_REPEAT_KEY|MP_KEY_EMIT_ON_UP) 108 #define MP_MBTN_LEFT (MP_MBTN_BASE+0) 109 #define MP_MBTN_MID (MP_MBTN_BASE+1) 110 #define MP_MBTN_RIGHT (MP_MBTN_BASE+2) 111 #define MP_WHEEL_UP (MP_MBTN_BASE+3) 112 #define MP_WHEEL_DOWN (MP_MBTN_BASE+4) 113 #define MP_WHEEL_LEFT (MP_MBTN_BASE+5) 114 #define MP_WHEEL_RIGHT (MP_MBTN_BASE+6) 115 #define MP_MBTN_BACK (MP_MBTN_BASE+7) 116 #define MP_MBTN_FORWARD (MP_MBTN_BASE+8) 117 #define MP_MBTN9 (MP_MBTN_BASE+9) 118 #define MP_MBTN10 (MP_MBTN_BASE+10) 119 #define MP_MBTN11 (MP_MBTN_BASE+11) 120 #define MP_MBTN12 (MP_MBTN_BASE+12) 121 #define MP_MBTN13 (MP_MBTN_BASE+13) 122 #define MP_MBTN14 (MP_MBTN_BASE+14) 123 #define MP_MBTN15 (MP_MBTN_BASE+15) 124 #define MP_MBTN16 (MP_MBTN_BASE+16) 125 #define MP_MBTN17 (MP_MBTN_BASE+17) 126 #define MP_MBTN18 (MP_MBTN_BASE+18) 127 #define MP_MBTN19 (MP_MBTN_BASE+19) 128 #define MP_MBTN_END (MP_MBTN_BASE+20) 129 130 #define MP_KEY_IS_MOUSE_BTN_SINGLE(code) \ 131 ((code) >= MP_MBTN_BASE && (code) < MP_MBTN_END) 132 #define MP_KEY_IS_WHEEL(code) \ 133 ((code) >= MP_WHEEL_UP && (code) <= MP_WHEEL_RIGHT) 134 135 #define MP_MBTN_DBL_BASE ((MP_KEY_BASE+0xC0)|MP_NO_REPEAT_KEY) 136 #define MP_MBTN_LEFT_DBL (MP_MBTN_DBL_BASE+0) 137 #define MP_MBTN_MID_DBL (MP_MBTN_DBL_BASE+1) 138 #define MP_MBTN_RIGHT_DBL (MP_MBTN_DBL_BASE+2) 139 #define MP_MBTN_DBL_END (MP_MBTN_DBL_BASE+20) 140 141 #define MP_KEY_IS_MOUSE_BTN_DBL(code) \ 142 ((code) >= MP_MBTN_DBL_BASE && (code) < MP_MBTN_DBL_END) 143 144 #define MP_KEY_MOUSE_BTN_COUNT (MP_MBTN_END - MP_MBTN_BASE) 145 146 /* game controller keys */ 147 #define MP_KEY_GAMEPAD (MP_KEY_BASE+0xF0) 148 #define MP_KEY_GAMEPAD_ACTION_DOWN (MP_KEY_GAMEPAD+0) 149 #define MP_KEY_GAMEPAD_ACTION_RIGHT (MP_KEY_GAMEPAD+1) 150 #define MP_KEY_GAMEPAD_ACTION_LEFT (MP_KEY_GAMEPAD+2) 151 #define MP_KEY_GAMEPAD_ACTION_UP (MP_KEY_GAMEPAD+3) 152 #define MP_KEY_GAMEPAD_BACK (MP_KEY_GAMEPAD+4) 153 #define MP_KEY_GAMEPAD_MENU (MP_KEY_GAMEPAD+5) 154 #define MP_KEY_GAMEPAD_START (MP_KEY_GAMEPAD+6) 155 #define MP_KEY_GAMEPAD_LEFT_SHOULDER (MP_KEY_GAMEPAD+7) 156 #define MP_KEY_GAMEPAD_RIGHT_SHOULDER (MP_KEY_GAMEPAD+8) 157 #define MP_KEY_GAMEPAD_LEFT_TRIGGER (MP_KEY_GAMEPAD+9) 158 #define MP_KEY_GAMEPAD_RIGHT_TRIGGER (MP_KEY_GAMEPAD+10) 159 #define MP_KEY_GAMEPAD_LEFT_STICK (MP_KEY_GAMEPAD+11) 160 #define MP_KEY_GAMEPAD_RIGHT_STICK (MP_KEY_GAMEPAD+12) 161 #define MP_KEY_GAMEPAD_DPAD_UP (MP_KEY_GAMEPAD+13) 162 #define MP_KEY_GAMEPAD_DPAD_DOWN (MP_KEY_GAMEPAD+14) 163 #define MP_KEY_GAMEPAD_DPAD_LEFT (MP_KEY_GAMEPAD+15) 164 #define MP_KEY_GAMEPAD_DPAD_RIGHT (MP_KEY_GAMEPAD+16) 165 #define MP_KEY_GAMEPAD_LEFT_STICK_UP (MP_KEY_GAMEPAD+17) 166 #define MP_KEY_GAMEPAD_LEFT_STICK_DOWN (MP_KEY_GAMEPAD+18) 167 #define MP_KEY_GAMEPAD_LEFT_STICK_LEFT (MP_KEY_GAMEPAD+19) 168 #define MP_KEY_GAMEPAD_LEFT_STICK_RIGHT (MP_KEY_GAMEPAD+20) 169 #define MP_KEY_GAMEPAD_RIGHT_STICK_UP (MP_KEY_GAMEPAD+21) 170 #define MP_KEY_GAMEPAD_RIGHT_STICK_DOWN (MP_KEY_GAMEPAD+22) 171 #define MP_KEY_GAMEPAD_RIGHT_STICK_LEFT (MP_KEY_GAMEPAD+23) 172 #define MP_KEY_GAMEPAD_RIGHT_STICK_RIGHT (MP_KEY_GAMEPAD+24) 173 174 // Reserved area. Can be used for keys that have no explicit names assigned, 175 // but should be mappable by the user anyway. 176 #define MP_KEY_UNKNOWN_RESERVED_START (MP_KEY_BASE+0x10000) 177 #define MP_KEY_UNKNOWN_RESERVED_LAST (MP_KEY_BASE+0x20000-1) 178 179 /* Special keys */ 180 #define MP_KEY_INTERN (MP_KEY_BASE+0x20000) 181 #define MP_KEY_CLOSE_WIN (MP_KEY_INTERN+0) 182 // Generated by input.c (VOs use mp_input_set_mouse_pos()) 183 #define MP_KEY_MOUSE_MOVE ((MP_KEY_INTERN+1)|MP_NO_REPEAT_KEY) 184 #define MP_KEY_MOUSE_LEAVE ((MP_KEY_INTERN+2)|MP_NO_REPEAT_KEY) 185 #define MP_KEY_MOUSE_ENTER ((MP_KEY_INTERN+3)|MP_NO_REPEAT_KEY) 186 187 #define MP_KEY_IS_MOUSE_CLICK(code) \ 188 (MP_KEY_IS_MOUSE_BTN_SINGLE(code) || MP_KEY_IS_MOUSE_BTN_DBL(code)) 189 190 #define MP_KEY_IS_MOUSE_MOVE(code) \ 191 ((code) == MP_KEY_MOUSE_MOVE || (code) == MP_KEY_MOUSE_ENTER || \ 192 (code) == MP_KEY_MOUSE_LEAVE) 193 194 // Whether to dispatch the key binding by current mouse position. 195 #define MP_KEY_DEPENDS_ON_MOUSE_POS(code) \ 196 (MP_KEY_IS_MOUSE_CLICK(code) || (code) == MP_KEY_MOUSE_MOVE) 197 198 #define MP_KEY_IS_MOUSE(code) \ 199 (MP_KEY_IS_MOUSE_CLICK(code) || MP_KEY_IS_MOUSE_MOVE(code)) 200 201 // No input source should generate this. 202 #define MP_KEY_UNMAPPED (MP_KEY_INTERN+4) 203 #define MP_KEY_ANY_UNICODE (MP_KEY_INTERN+5) 204 // For mp_input_put_key(): release all keys that are down. 205 #define MP_INPUT_RELEASE_ALL (MP_KEY_INTERN+6) 206 207 // Emit a command even on key-up (normally key-up is ignored). This means by 208 // default they binding will be triggered on key-up instead of key-down. 209 // This is a fixed part of the keycode, not a modifier than can change. 210 #define MP_KEY_EMIT_ON_UP (1u<<22) 211 212 // Use this when the key shouldn't be auto-repeated (like mouse buttons) 213 // Also means both key-down key-up events produce emit bound commands. 214 // This is a fixed part of the keycode, not a modifier than can change. 215 #define MP_NO_REPEAT_KEY (1u<<23) 216 217 /* Modifiers added to individual keys */ 218 #define MP_KEY_MODIFIER_SHIFT (1u<<24) 219 #define MP_KEY_MODIFIER_CTRL (1u<<25) 220 #define MP_KEY_MODIFIER_ALT (1u<<26) 221 #define MP_KEY_MODIFIER_META (1u<<27) 222 223 // Flag for key events. Multiple down events are idempotent. Release keys by 224 // sending the key code with KEY_STATE_UP set, or by sending 225 // MP_INPUT_RELEASE_ALL as key code. 226 #define MP_KEY_STATE_DOWN (1u<<28) 227 228 // Flag for key events. Releases a key previously held down with 229 // MP_KEY_STATE_DOWN. Do not send redundant UP events and do not forget to 230 // release keys at all with UP. If input is unreliable, use MP_INPUT_RELEASE_ALL 231 // or don't use MP_KEY_STATE_DOWN in the first place. 232 #define MP_KEY_STATE_UP (1u<<29) 233 234 #define MP_KEY_MODIFIER_MASK (MP_KEY_MODIFIER_SHIFT | MP_KEY_MODIFIER_CTRL | \ 235 MP_KEY_MODIFIER_ALT | MP_KEY_MODIFIER_META | \ 236 MP_KEY_STATE_DOWN | MP_KEY_STATE_UP) 237 238 // Makes adjustments like turning "shift+z" into "Z" 239 int mp_normalize_keycode(int keycode); 240 241 // Get input key from its name. 242 int mp_input_get_key_from_name(const char *name); 243 244 // Return given key (plus modifiers) as talloc'ed name. 245 char *mp_input_get_key_name(int key); 246 247 // Combination of multiple keys to string. 248 char *mp_input_get_key_combo_name(const int *keys, int max); 249 250 // String containing combination of multiple string to keys. 251 int mp_input_get_keys_from_string(char *str, int max_num_keys, 252 int *out_num_keys, int *keys); 253 254 struct mp_log; 255 void mp_print_key_list(struct mp_log *out); 256 char **mp_get_key_list(void); 257 258 #endif /* MPLAYER_KEYCODES_H */ 259