Mercurial > mplayer.hg
changeset 29528:2a3b942fce09
Use lookup_keymap_table function with data structure instead of huge switch-case
for mapping OSX keys onto MPlayer keys in vo_quartz.
author | reimar |
---|---|
date | Thu, 27 Aug 2009 23:13:37 +0000 |
parents | 9ea49bcf3abc |
children | ef3b2cf8b2db |
files | libvo/vo_quartz.c |
diffstat | 1 files changed, 33 insertions(+), 50 deletions(-) [+] |
line wrap: on
line diff
--- a/libvo/vo_quartz.c Thu Aug 27 19:13:19 2009 +0000 +++ b/libvo/vo_quartz.c Thu Aug 27 23:13:37 2009 +0000 @@ -156,58 +156,41 @@ void window_fullscreen(void); void window_panscan(void); +static const struct keymap keymap[] = { + // special keys + {QZ_IBOOK_ENTER, KEY_ENTER}, {QZ_RETURN, KEY_ENTER}, + {QZ_ESCAPE, KEY_ESC}, + {QZ_BACKSPACE, KEY_BACKSPACE}, {QZ_LALT, KEY_BACKSPACE}, {QZ_LCTRL, KEY_BACKSPACE}, {QZ_LSHIFT, KEY_BACKSPACE}, + {QZ_TAB, KEY_TAB}, + + // cursor keys + {QZ_UP, KEY_UP}, {QZ_DOWN, KEY_DOWN}, {QZ_LEFT, KEY_LEFT}, {QZ_RIGHT, KEY_RIGHT}, + + // navigation block + {QZ_INSERT, KEY_INSERT}, {QZ_DELETE, KEY_DELETE}, {QZ_HOME, KEY_HOME}, + {QZ_END, KEY_END}, {QZ_PAGEUP, KEY_PAGE_UP}, {QZ_PAGEDOWN, KEY_PAGE_DOWN}, + + // F-keys + {QZ_F1, KEY_F + 1}, {QZ_F2, KEY_F + 2}, {QZ_F3, KEY_F + 3}, {QZ_F4, KEY_F + 4}, + {QZ_F5, KEY_F + 5}, {QZ_F6, KEY_F + 6}, {QZ_F7, KEY_F + 7}, {QZ_F8, KEY_F + 8}, + {QZ_F9, KEY_F + 9}, {QZ_F10, KEY_F + 10}, {QZ_F11, KEY_F + 11}, {QZ_F12, KEY_F + 12}, + + // numpad + {QZ_KP_PLUS, '+'}, {QZ_KP_MINUS, '-'}, {QZ_KP_MULTIPLY, '*'}, + {QZ_KP_DIVIDE, '/'}, {QZ_KP_ENTER, KEY_KPENTER}, {QZ_KP_PERIOD, KEY_KPDEC}, + {QZ_KP0, KEY_KP0}, {QZ_KP1, KEY_KP1}, {QZ_KP2, KEY_KP2}, {QZ_KP3, KEY_KP3}, + {QZ_KP4, KEY_KP4}, {QZ_KP5, KEY_KP5}, {QZ_KP6, KEY_KP6}, {QZ_KP7, KEY_KP7}, + {QZ_KP8, KEY_KP8}, {QZ_KP9, KEY_KP9}, + + {0, 0} +}; + static inline int convert_key(UInt32 key, UInt32 charcode) { - switch (key) - { - case QZ_IBOOK_ENTER: - case QZ_RETURN: return KEY_ENTER; - case QZ_ESCAPE: return KEY_ESC; - case QZ_BACKSPACE: return KEY_BACKSPACE; - case QZ_LALT: return KEY_BACKSPACE; - case QZ_LCTRL: return KEY_BACKSPACE; - case QZ_LSHIFT: return KEY_BACKSPACE; - case QZ_F1: return KEY_F + 1; - case QZ_F2: return KEY_F + 2; - case QZ_F3: return KEY_F + 3; - case QZ_F4: return KEY_F + 4; - case QZ_F5: return KEY_F + 5; - case QZ_F6: return KEY_F + 6; - case QZ_F7: return KEY_F + 7; - case QZ_F8: return KEY_F + 8; - case QZ_F9: return KEY_F + 9; - case QZ_F10: return KEY_F + 10; - case QZ_F11: return KEY_F + 11; - case QZ_F12: return KEY_F + 12; - case QZ_INSERT: return KEY_INSERT; - case QZ_DELETE: return KEY_DELETE; - case QZ_HOME: return KEY_HOME; - case QZ_END: return KEY_END; - case QZ_KP_PLUS: return '+'; - case QZ_KP_MINUS: return '-'; - case QZ_TAB: return KEY_TAB; - case QZ_PAGEUP: return KEY_PAGE_UP; - case QZ_PAGEDOWN: return KEY_PAGE_DOWN; - case QZ_UP: return KEY_UP; - case QZ_DOWN: return KEY_DOWN; - case QZ_LEFT: return KEY_LEFT; - case QZ_RIGHT: return KEY_RIGHT; - case QZ_KP_MULTIPLY: return '*'; - case QZ_KP_DIVIDE: return '/'; - case QZ_KP_ENTER: return KEY_KPENTER; - case QZ_KP_PERIOD: return KEY_KPDEC; - case QZ_KP0: return KEY_KP0; - case QZ_KP1: return KEY_KP1; - case QZ_KP2: return KEY_KP2; - case QZ_KP3: return KEY_KP3; - case QZ_KP4: return KEY_KP4; - case QZ_KP5: return KEY_KP5; - case QZ_KP6: return KEY_KP6; - case QZ_KP7: return KEY_KP7; - case QZ_KP8: return KEY_KP8; - case QZ_KP9: return KEY_KP9; - default: return charcode; - } + int mpkey = lookup_keymap_table(keymap, key); + if (mpkey) + return mpkey; + return charcode; } static void draw_alpha(int x0, int y0, int w, int h, unsigned char *src, unsigned char *srca, int stride)