OSK memory fix and hiragana support
This commit is contained in:
parent
b176aa2396
commit
01985c7460
|
@ -168,17 +168,19 @@ static bool input_keyboard_line_event(
|
||||||
|
|
||||||
bool input_keyboard_line_append(char* word)
|
bool input_keyboard_line_append(char* word)
|
||||||
{
|
{
|
||||||
|
unsigned len = strlen(word);
|
||||||
|
|
||||||
char *newbuf = (char*)
|
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)
|
if (!newbuf)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
memmove(newbuf + g_keyboard_line->ptr + 1,
|
memmove(newbuf + g_keyboard_line->ptr + len,
|
||||||
newbuf + g_keyboard_line->ptr,
|
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;
|
unsigned i = 0;
|
||||||
for (i = 0; i < strlen(word); i++)
|
for (i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
newbuf[g_keyboard_line->ptr] = word[i];
|
newbuf[g_keyboard_line->ptr] = word[i];
|
||||||
g_keyboard_line->ptr++;
|
g_keyboard_line->ptr++;
|
||||||
|
|
|
@ -161,15 +161,44 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input)
|
||||||
|
|
||||||
if (menu_input_dialog_get_display_kb())
|
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"," ","<",">","?"};
|
case 0:
|
||||||
memcpy(osk_grid, grid, sizeof(grid));
|
{
|
||||||
}
|
char* grid[] = {"!","@","#","$","%","^","&","*","(",")",
|
||||||
else
|
"Q","W","E","R","T","Y","U","I","O","P",
|
||||||
{
|
"A","S","D","F","G","H","J","K","L",":",
|
||||||
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"," ",",",".","/"};
|
"Z","X","C","V","B","N","M"," ","<",">"};
|
||||||
memcpy(osk_grid, grid, sizeof(grid));
|
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))
|
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;
|
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))
|
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A))
|
||||||
|
|
|
@ -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 char menu_event_keyboard_is_set(enum retro_key key);
|
||||||
|
|
||||||
unsigned osk_ptr;
|
unsigned osk_ptr;
|
||||||
|
unsigned osk_idx;
|
||||||
char* osk_grid[41];
|
char* osk_grid[41];
|
||||||
bool osk_upper;
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue