From 01985c7460bc63ea9f84aa3239578a1153fd5a30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Andr=C3=A9=20Santoni?= Date: Sat, 29 Oct 2016 23:54:06 +0200 Subject: [PATCH] OSK memory fix and hiragana support --- input/input_keyboard.c | 10 ++++--- menu/menu_event.c | 60 +++++++++++++++++++++++++++++++++++------- menu/menu_event.h | 2 +- 3 files changed, 57 insertions(+), 15 deletions(-) diff --git a/input/input_keyboard.c b/input/input_keyboard.c index c9dc5a233b..3322b3a739 100644 --- a/input/input_keyboard.c +++ b/input/input_keyboard.c @@ -168,17 +168,19 @@ static bool input_keyboard_line_event( bool input_keyboard_line_append(char* word) { + unsigned len = strlen(word); + char *newbuf = (char*) - realloc(g_keyboard_line->buffer, g_keyboard_line->size + 2); + realloc(g_keyboard_line->buffer, g_keyboard_line->size + len*2); if (!newbuf) return false; - memmove(newbuf + g_keyboard_line->ptr + 1, + memmove(newbuf + g_keyboard_line->ptr + len, newbuf + g_keyboard_line->ptr, - g_keyboard_line->size - g_keyboard_line->ptr + 1); + g_keyboard_line->size - g_keyboard_line->ptr + len); unsigned i = 0; - for (i = 0; i < strlen(word); i++) + for (i = 0; i < len; i++) { newbuf[g_keyboard_line->ptr] = word[i]; g_keyboard_line->ptr++; diff --git a/menu/menu_event.c b/menu/menu_event.c index e3e6d3ddcd..9c7f68a07c 100644 --- a/menu/menu_event.c +++ b/menu/menu_event.c @@ -161,15 +161,44 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) if (menu_input_dialog_get_display_kb()) { - if (osk_upper) + switch (osk_idx) { - char* grid[] = {"!","@","#","$","%","^","&","*","(",")","Q","W","E","R","T","Y","U","I","O","P","A","S","D","F","G","H","J","K","L",":","Z","X","C","V","B","N","M"," ","<",">","?"}; - memcpy(osk_grid, grid, sizeof(grid)); - } - else - { - char* grid[] = {"1","2","3","4","5","6","7","8","9","0","q","w","e","r","t","y","u","i","o","p","a","s","d","f","g","h","j","k","l",";","z","x","c","v","b","n","m"," ",",",".","/"}; - memcpy(osk_grid, grid, sizeof(grid)); + case 0: + { + char* grid[] = {"!","@","#","$","%","^","&","*","(",")", + "Q","W","E","R","T","Y","U","I","O","P", + "A","S","D","F","G","H","J","K","L",":", + "Z","X","C","V","B","N","M"," ","<",">"}; + memcpy(osk_grid, grid, sizeof(grid)); + break; + } + case 1: + { + char* grid[] = {"1","2","3","4","5","6","7","8","9","0", + "q","w","e","r","t","y","u","i","o","p", + "a","s","d","f","g","h","j","k","l",";", + "z","x","c","v","b","n","m"," ",",","."}; + memcpy(osk_grid, grid, sizeof(grid)); + break; + } + case 2: + { + char* grid[] = {"あ","い","う","え","お","ら","り","る","れ","ろ", + "か","き","く","け","こ","が","ぎ","ぐ","げ","ご", + "さ","し","す","せ","そ","ざ","じ","ず","ぜ","ぞ", + "た","ち","つ","て","と","だ","ぢ","づ","で","ど"}; + memcpy(osk_grid, grid, sizeof(grid)); + break; + } + case 3: + { + char* grid[] = {"な","に","ぬ","ね","の","ば","び","ぶ","べ","ぼ", + "は","ひ","ふ","へ","ほ","ぱ","ぴ","ぷ","ぺ","ぽ", + "ま","み","む","め","も","ん","っ","ゃ","ゅ","ょ", + "や","ゆ","よ","わ","を","ぁ","ぃ","ぅ","ぇ","ぉ"}; + memcpy(osk_grid, grid, sizeof(grid)); + break; + } } if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_DOWN)) @@ -196,9 +225,20 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input) osk_ptr = osk_ptr - 1; } - if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_Y)) + if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L)) { - osk_upper = ! osk_upper; + if (osk_idx > 0) + osk_idx--; + else + osk_idx = 3; + } + + if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R)) + { + if (osk_idx < 3) + osk_idx++; + else + osk_idx = 0; } if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A)) diff --git a/menu/menu_event.h b/menu/menu_event.h index ccacee6554..8e1eed2a05 100644 --- a/menu/menu_event.h +++ b/menu/menu_event.h @@ -40,8 +40,8 @@ void menu_event_keyboard_set(bool down, enum retro_key key); unsigned char menu_event_keyboard_is_set(enum retro_key key); unsigned osk_ptr; +unsigned osk_idx; char* osk_grid[41]; -bool osk_upper; RETRO_END_DECLS