mirror of
https://github.com/libretro/RetroArch
synced 2025-02-11 15:40:28 +00:00
OSK cleanup, add katakana support
This commit is contained in:
parent
281335f86f
commit
1a73b1d144
@ -166,7 +166,7 @@ static bool input_keyboard_line_event(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool input_keyboard_line_append(char* word)
|
bool input_keyboard_line_append(const char *word)
|
||||||
{
|
{
|
||||||
unsigned len = strlen(word);
|
unsigned len = strlen(word);
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ typedef struct input_keyboard_ctx_wait
|
|||||||
void input_keyboard_event(bool down, unsigned code, uint32_t character,
|
void input_keyboard_event(bool down, unsigned code, uint32_t character,
|
||||||
uint16_t mod, unsigned device);
|
uint16_t mod, unsigned device);
|
||||||
|
|
||||||
bool input_keyboard_line_append(char* word);
|
bool input_keyboard_line_append(const char *word);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* input_keyboard_start_line:
|
* input_keyboard_start_line:
|
||||||
|
@ -271,7 +271,7 @@ static void mui_draw_text(font_data_t *font, float x, float y, unsigned width, u
|
|||||||
menu_display_draw_text(font, msg, width, height, ¶ms);
|
menu_display_draw_text(font, msg, width, height, ¶ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mui_render_keyboard(mui_handle_t *mui, char* grid[], unsigned id)
|
static void mui_render_keyboard(mui_handle_t *mui, const char *grid[], unsigned id)
|
||||||
{
|
{
|
||||||
unsigned i, width, height;
|
unsigned i, width, height;
|
||||||
float dark[16]= {
|
float dark[16]= {
|
||||||
@ -456,7 +456,7 @@ static void mui_render_messagebox(mui_handle_t *mui,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (menu_input_dialog_get_display_kb())
|
if (menu_input_dialog_get_display_kb())
|
||||||
mui_render_keyboard(mui, osk_grid, osk_ptr);
|
mui_render_keyboard(mui, menu_event_get_osk_grid(), menu_event_get_osk_ptr());
|
||||||
|
|
||||||
end:
|
end:
|
||||||
string_list_free(list);
|
string_list_free(list);
|
||||||
|
@ -686,7 +686,7 @@ static void xmb_messagebox(void *data, const char *message)
|
|||||||
strlcpy(xmb->box_message, message, sizeof(xmb->box_message));
|
strlcpy(xmb->box_message, message, sizeof(xmb->box_message));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void xmb_render_keyboard(xmb_handle_t *xmb, char* grid[], unsigned id)
|
static void xmb_render_keyboard(xmb_handle_t *xmb, const char *grid[], unsigned id)
|
||||||
{
|
{
|
||||||
unsigned i, width, height;
|
unsigned i, width, height;
|
||||||
float dark[16]= {
|
float dark[16]= {
|
||||||
@ -787,7 +787,7 @@ static void xmb_render_messagebox_internal(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (menu_input_dialog_get_display_kb())
|
if (menu_input_dialog_get_display_kb())
|
||||||
xmb_render_keyboard(xmb, osk_grid, osk_ptr);
|
xmb_render_keyboard(xmb, menu_event_get_osk_grid(), menu_event_get_osk_ptr());
|
||||||
|
|
||||||
end:
|
end:
|
||||||
string_list_free(list);
|
string_list_free(list);
|
||||||
|
@ -44,6 +44,68 @@
|
|||||||
|
|
||||||
static unsigned char menu_keyboard_key_state[RETROK_LAST];
|
static unsigned char menu_keyboard_key_state[RETROK_LAST];
|
||||||
|
|
||||||
|
enum osk_type
|
||||||
|
{
|
||||||
|
OSK_TYPE_UNKNOWN = 0U,
|
||||||
|
OSK_UPPERCASE_LATIN,
|
||||||
|
OSK_LOWERCASE_LATIN,
|
||||||
|
OSK_HIRAGANA_PAGE1,
|
||||||
|
OSK_HIRAGANA_PAGE2,
|
||||||
|
OSK_KATAKANA_PAGE1,
|
||||||
|
OSK_KATAKANA_PAGE2,
|
||||||
|
OSK_TYPE_LAST
|
||||||
|
};
|
||||||
|
|
||||||
|
static enum osk_type osk_idx = OSK_UPPERCASE_LATIN;
|
||||||
|
static unsigned osk_ptr;
|
||||||
|
static const char *osk_grid[41];
|
||||||
|
|
||||||
|
static const char *uppercase_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"," ","<",">"};
|
||||||
|
|
||||||
|
static const char *lowercase_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"," ",",","."};
|
||||||
|
|
||||||
|
static const char *hiragana_page1_grid[] = {
|
||||||
|
"あ","い","う","え","お","ら","り","る","れ","ろ",
|
||||||
|
"か","き","く","け","こ","が","ぎ","ぐ","げ","ご",
|
||||||
|
"さ","し","す","せ","そ","ざ","じ","ず","ぜ","ぞ",
|
||||||
|
"た","ち","つ","て","と","だ","ぢ","づ","で","ど"};
|
||||||
|
|
||||||
|
static const char *hiragana_page2_grid[] = {
|
||||||
|
"な","に","ぬ","ね","の","ば","び","ぶ","べ","ぼ",
|
||||||
|
"は","ひ","ふ","へ","ほ","ぱ","ぴ","ぷ","ぺ","ぽ",
|
||||||
|
"ま","み","む","め","も","ん","っ","ゃ","ゅ","ょ",
|
||||||
|
"や","ゆ","よ","わ","を","ぁ","ぃ","ぅ","ぇ","ぉ"};
|
||||||
|
|
||||||
|
static const char *katakana_page1_grid[] = {
|
||||||
|
"ア","イ","ウ","エ","オ","ラ","リ","ル","レ","ロ",
|
||||||
|
"カ","キ","ク","ケ","コ","ガ","ギ","グ","ゲ","ゴ",
|
||||||
|
"サ","シ","ス","セ","ソ","ザ","ジ","ズ","ゼ","ゾ",
|
||||||
|
"タ","チ","ツ","テ","ト","ダ","ヂ","ヅ","デ","ド"};
|
||||||
|
|
||||||
|
static const char *katakana_page2_grid[] = {
|
||||||
|
"ナ","ニ","ヌ","ネ","ノ","バ","ビ","ブ","ベ","ボ",
|
||||||
|
"ハ","ヒ","フ","ヘ","ホ","パ","ピ","プ","ペ","ポ",
|
||||||
|
"マ","ミ","ム","メ","モ","ン","ッ","ャ","ュ","ョ",
|
||||||
|
"ヤ","ユ","ヨ","ワ","ヲ","ァ","ィ","ゥ","ェ","ォ"};
|
||||||
|
|
||||||
|
unsigned menu_event_get_osk_ptr()
|
||||||
|
{
|
||||||
|
return osk_ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
const char** menu_event_get_osk_grid()
|
||||||
|
{
|
||||||
|
return osk_grid;
|
||||||
|
}
|
||||||
|
|
||||||
static int menu_event_pointer(unsigned *action)
|
static int menu_event_pointer(unsigned *action)
|
||||||
{
|
{
|
||||||
const struct retro_keybind *binds[MAX_USERS] = {NULL};
|
const struct retro_keybind *binds[MAX_USERS] = {NULL};
|
||||||
@ -163,40 +225,35 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input)
|
|||||||
{
|
{
|
||||||
switch (osk_idx)
|
switch (osk_idx)
|
||||||
{
|
{
|
||||||
case 0:
|
case OSK_HIRAGANA_PAGE1:
|
||||||
{
|
{
|
||||||
char* grid[] = {"!","@","#","$","%","^","&","*","(",")",
|
memcpy(osk_grid, hiragana_page1_grid, sizeof(hiragana_page1_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;
|
break;
|
||||||
}
|
}
|
||||||
case 1:
|
case OSK_HIRAGANA_PAGE2:
|
||||||
{
|
{
|
||||||
char* grid[] = {"1","2","3","4","5","6","7","8","9","0",
|
memcpy(osk_grid, hiragana_page2_grid, sizeof(hiragana_page2_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;
|
break;
|
||||||
}
|
}
|
||||||
case 2:
|
case OSK_KATAKANA_PAGE1:
|
||||||
{
|
{
|
||||||
char* grid[] = {"あ","い","う","え","お","ら","り","る","れ","ろ",
|
memcpy(osk_grid, katakana_page1_grid, sizeof(katakana_page1_grid));
|
||||||
"か","き","く","け","こ","が","ぎ","ぐ","げ","ご",
|
|
||||||
"さ","し","す","せ","そ","ざ","じ","ず","ぜ","ぞ",
|
|
||||||
"た","ち","つ","て","と","だ","ぢ","づ","で","ど"};
|
|
||||||
memcpy(osk_grid, grid, sizeof(grid));
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 3:
|
case OSK_KATAKANA_PAGE2:
|
||||||
{
|
{
|
||||||
char* grid[] = {"な","に","ぬ","ね","の","ば","び","ぶ","べ","ぼ",
|
memcpy(osk_grid, katakana_page2_grid, sizeof(katakana_page2_grid));
|
||||||
"は","ひ","ふ","へ","ほ","ぱ","ぴ","ぷ","ぺ","ぽ",
|
break;
|
||||||
"ま","み","む","め","も","ん","っ","ゃ","ゅ","ょ",
|
}
|
||||||
"や","ゆ","よ","わ","を","ぁ","ぃ","ぅ","ぇ","ぉ"};
|
case OSK_LOWERCASE_LATIN:
|
||||||
memcpy(osk_grid, grid, sizeof(grid));
|
{
|
||||||
|
memcpy(osk_grid, lowercase_grid, sizeof(lowercase_grid));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case OSK_UPPERCASE_LATIN:
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
memcpy(osk_grid, uppercase_grid, sizeof(uppercase_grid));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -227,18 +284,18 @@ unsigned menu_event(uint64_t input, uint64_t trigger_input)
|
|||||||
|
|
||||||
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L))
|
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L))
|
||||||
{
|
{
|
||||||
if (osk_idx > 0)
|
if (osk_idx > OSK_TYPE_UNKNOWN + 1)
|
||||||
osk_idx--;
|
osk_idx--;
|
||||||
else
|
else
|
||||||
osk_idx = 3;
|
osk_idx = OSK_TYPE_LAST - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R))
|
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R))
|
||||||
{
|
{
|
||||||
if (osk_idx < 3)
|
if (osk_idx < OSK_TYPE_LAST - 1)
|
||||||
osk_idx++;
|
osk_idx++;
|
||||||
else
|
else
|
||||||
osk_idx = 0;
|
osk_idx = OSK_TYPE_UNKNOWN + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A))
|
if (trigger_input & (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A))
|
||||||
|
@ -39,9 +39,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 menu_event_get_osk_ptr();
|
||||||
unsigned osk_idx;
|
const char** menu_event_get_osk_grid();
|
||||||
char* osk_grid[41];
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
RETRO_END_DECLS
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user