diff --git a/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp b/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp index 4f162abf67..caec8d8b25 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_fonts.cpp @@ -60,8 +60,8 @@ namespace rsx { return language_class::default_; } - case 0x11: // Hangul jamo - // case 0x31: // Compatibility jamo 3130-318F + case 0x11: // Hangul jamo + case 0x31: // Compatibility jamo 3130-318F // case 0xA9: // Hangul jamo extended block A A960-A97F { return language_class::hangul; diff --git a/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp b/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp index 73191c2022..c23a130f46 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_osk.cpp @@ -822,25 +822,57 @@ namespace rsx else add_panel(osk_panel_japanese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); break; - case CELL_SYSUTIL_LANG_RUSSIAN: - case CELL_SYSUTIL_LANG_KOREAN: - case CELL_SYSUTIL_LANG_CHINESE_T: - case CELL_SYSUTIL_LANG_CHINESE_S: - case CELL_SYSUTIL_LANG_POLISH: - case CELL_SYSUTIL_LANG_TURKISH: - // TODO: Use proper panels case CELL_SYSUTIL_LANG_FRENCH: + add_panel(osk_panel_french(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; case CELL_SYSUTIL_LANG_SPANISH: + add_panel(osk_panel_spanish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; case CELL_SYSUTIL_LANG_GERMAN: + add_panel(osk_panel_german(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; case CELL_SYSUTIL_LANG_ITALIAN: - case CELL_SYSUTIL_LANG_DUTCH: - case CELL_SYSUTIL_LANG_PORTUGUESE_PT: - case CELL_SYSUTIL_LANG_FINNISH: - case CELL_SYSUTIL_LANG_SWEDISH: + add_panel(osk_panel_italian(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; case CELL_SYSUTIL_LANG_DANISH: + add_panel(osk_panel_danish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; case CELL_SYSUTIL_LANG_NORWEGIAN: + add_panel(osk_panel_norwegian(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_DUTCH: + add_panel(osk_panel_dutch(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_FINNISH: + add_panel(osk_panel_finnish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_SWEDISH: + add_panel(osk_panel_swedish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_PORTUGUESE_PT: + add_panel(osk_panel_portuguese_pt(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; case CELL_SYSUTIL_LANG_PORTUGUESE_BR: - // TODO: They use the same characters as the english panel, but they might have a different layout. + add_panel(osk_panel_portuguese_br(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_TURKISH: + add_panel(osk_panel_turkey(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_POLISH: + add_panel(osk_panel_polish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_RUSSIAN: + add_panel(osk_panel_russian(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_KOREAN: + add_panel(osk_panel_korean(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_CHINESE_T: + add_panel(osk_panel_traditional_chinese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; + case CELL_SYSUTIL_LANG_CHINESE_S: + add_panel(osk_panel_simplified_chinese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + break; case CELL_SYSUTIL_LANG_ENGLISH_US: case CELL_SYSUTIL_LANG_ENGLISH_GB: default: @@ -854,10 +886,82 @@ namespace rsx // TODO: find out the exact order + if (panel_flag & CELL_OSKDIALOG_PANELMODE_LATIN) + { + add_panel(osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } if (panel_flag & CELL_OSKDIALOG_PANELMODE_ENGLISH) { add_panel(osk_panel_english(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_FRENCH) + { + add_panel(osk_panel_french(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_SPANISH) + { + add_panel(osk_panel_spanish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_ITALIAN) + { + add_panel(osk_panel_italian(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_GERMAN) + { + add_panel(osk_panel_german(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_TURKEY) + { + add_panel(osk_panel_turkey(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_POLISH) + { + add_panel(osk_panel_polish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_RUSSIAN) + { + add_panel(osk_panel_russian(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_DANISH) + { + add_panel(osk_panel_danish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_NORWEGIAN) + { + add_panel(osk_panel_norwegian(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_DUTCH) + { + add_panel(osk_panel_dutch(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_SWEDISH) + { + add_panel(osk_panel_swedish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_FINNISH) + { + add_panel(osk_panel_finnish(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_PORTUGUESE) + { + add_panel(osk_panel_portuguese_pt(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_PORTUGUESE_BRAZIL) + { + add_panel(osk_panel_portuguese_br(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_KOREAN) + { + add_panel(osk_panel_korean(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_TRADITIONAL_CHINESE) + { + add_panel(osk_panel_traditional_chinese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } + if (panel_flag & CELL_OSKDIALOG_PANELMODE_SIMPLIFIED_CHINESE) + { + add_panel(osk_panel_simplified_chinese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); + } if (panel_flag & CELL_OSKDIALOG_PANELMODE_JAPANESE) { add_panel(osk_panel_japanese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); @@ -891,29 +995,6 @@ namespace rsx add_panel(osk_panel_url(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); } - // TODO: Use proper panels for the following panel modes - if (panel_flag & CELL_OSKDIALOG_PANELMODE_LATIN || - panel_flag & CELL_OSKDIALOG_PANELMODE_GERMAN || - panel_flag & CELL_OSKDIALOG_PANELMODE_SPANISH || - panel_flag & CELL_OSKDIALOG_PANELMODE_FRENCH || - panel_flag & CELL_OSKDIALOG_PANELMODE_ITALIAN || - panel_flag & CELL_OSKDIALOG_PANELMODE_DUTCH || - panel_flag & CELL_OSKDIALOG_PANELMODE_PORTUGUESE || - panel_flag & CELL_OSKDIALOG_PANELMODE_RUSSIAN || - panel_flag & CELL_OSKDIALOG_PANELMODE_POLISH || - panel_flag & CELL_OSKDIALOG_PANELMODE_KOREAN || - panel_flag & CELL_OSKDIALOG_PANELMODE_TURKEY || - panel_flag & CELL_OSKDIALOG_PANELMODE_TRADITIONAL_CHINESE || - panel_flag & CELL_OSKDIALOG_PANELMODE_SIMPLIFIED_CHINESE || - panel_flag & CELL_OSKDIALOG_PANELMODE_PORTUGUESE_BRAZIL || - panel_flag & CELL_OSKDIALOG_PANELMODE_DANISH || - panel_flag & CELL_OSKDIALOG_PANELMODE_SWEDISH || - panel_flag & CELL_OSKDIALOG_PANELMODE_NORWEGIAN || - panel_flag & CELL_OSKDIALOG_PANELMODE_FINNISH) - { - add_panel(osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb)); - } - // Get initial panel based on first_view_panel for (size_t i = 0; i < m_panels.size(); ++i) { diff --git a/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.cpp b/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.cpp index aea2091ecd..48b7d0d2b8 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.cpp @@ -8,17 +8,56 @@ namespace rsx osk_panel::osk_panel(u32 panel_mode) { osk_panel_mode = panel_mode; + + // TODO: Use proper translations for Space/Backspace/Enter etc. and make sure they fit in the grid. + switch (panel_mode) + { + case CELL_OSKDIALOG_PANELMODE_DEFAULT: + case CELL_OSKDIALOG_PANELMODE_GERMAN: + case CELL_OSKDIALOG_PANELMODE_ENGLISH: + case CELL_OSKDIALOG_PANELMODE_SPANISH: + case CELL_OSKDIALOG_PANELMODE_FRENCH: + case CELL_OSKDIALOG_PANELMODE_ITALIAN: + case CELL_OSKDIALOG_PANELMODE_DUTCH: + case CELL_OSKDIALOG_PANELMODE_PORTUGUESE: + case CELL_OSKDIALOG_PANELMODE_RUSSIAN: + case CELL_OSKDIALOG_PANELMODE_JAPANESE: + case CELL_OSKDIALOG_PANELMODE_DEFAULT_NO_JAPANESE: + case CELL_OSKDIALOG_PANELMODE_POLISH: + case CELL_OSKDIALOG_PANELMODE_KOREAN: + case CELL_OSKDIALOG_PANELMODE_TURKEY: + case CELL_OSKDIALOG_PANELMODE_TRADITIONAL_CHINESE: + case CELL_OSKDIALOG_PANELMODE_SIMPLIFIED_CHINESE: + case CELL_OSKDIALOG_PANELMODE_PORTUGUESE_BRAZIL: + case CELL_OSKDIALOG_PANELMODE_DANISH: + case CELL_OSKDIALOG_PANELMODE_SWEDISH: + case CELL_OSKDIALOG_PANELMODE_NORWEGIAN: + case CELL_OSKDIALOG_PANELMODE_FINNISH: + case CELL_OSKDIALOG_PANELMODE_JAPANESE_HIRAGANA: + case CELL_OSKDIALOG_PANELMODE_JAPANESE_KATAKANA: + case CELL_OSKDIALOG_PANELMODE_ALPHABET_FULL_WIDTH: + case CELL_OSKDIALOG_PANELMODE_ALPHABET: + case CELL_OSKDIALOG_PANELMODE_LATIN: + case CELL_OSKDIALOG_PANELMODE_NUMERAL_FULL_WIDTH: + case CELL_OSKDIALOG_PANELMODE_NUMERAL: + case CELL_OSKDIALOG_PANELMODE_URL: + case CELL_OSKDIALOG_PANELMODE_PASSWORD: + default: + { + space = U"Space"; + backspace = U"Backspace"; + enter = U"Enter"; + } + } } // Language specific implementations + // TODO: Check and adjust special characters for each panel + osk_panel_latin::osk_panel_latin(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb, u32 osk_panel_mode) : osk_panel(osk_panel_mode) { - const color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - const color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - const color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 5; num_columns = 10; cell_size_x = 50; @@ -74,28 +113,573 @@ namespace rsx {{{U".", U"_"}, {U".", U"_"}, {U"=", U""}}, default_bg, 1}, {{{U"?", U"/"}, {U"¿", U"/"}, {U">", U""}}, default_bg, 1}, - // Special + // Control {{{U"A/a"}, {U"À/à"}, {U"!/¡"}}, special2_bg, 2, button_flags::_shift, shift_cb }, {{{U"ÖÑß"}, {U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, - {{{U"Space"}, {U"Space"}, {U"Space"}}, special_bg, 2, button_flags::_space, space_cb }, - {{{U"Backspace"}, {U"Backspace"}, {U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}, {U"Enter"}, {U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_english::osk_panel_english(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_ENGLISH) { - // English and latin should be mostly the same + // English and latin should be mostly the same. + } + + osk_panel_spanish::osk_panel_spanish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_SPANISH) + { + // Spanish and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_italian::osk_panel_italian(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_ITALIAN) + { + // Italian and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_danish::osk_panel_danish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_DANISH) + { + // Danish and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_norwegian::osk_panel_norwegian(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_NORWEGIAN) + { + // Norwegian and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_dutch::osk_panel_dutch(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_DUTCH) + { + // Dutch and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_swedish::osk_panel_swedish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_SWEDISH) + { + // Swedish and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_finnish::osk_panel_finnish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_FINNISH) + { + // Finnish and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_portuguese_pt::osk_panel_portuguese_pt(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_PORTUGUESE) + { + // Portuguese (Portugal) and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_portuguese_br::osk_panel_portuguese_br(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_latin(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_PORTUGUESE_BRAZIL) + { + // Portuguese (Brazil) and latin should be mostly the same. Only the translation for the controls should be different. + } + + osk_panel_french::osk_panel_french(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel(CELL_OSKDIALOG_PANELMODE_FRENCH) + { + num_rows = 5; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + layout = + { + // Row 1 + {{{U"1", U"!"}, {U"à", U"À"}, {U"!", U"¡"}}, default_bg, 1}, + {{{U"2", U"@"}, {U"á", U"Á"}, {U"?", U"¿"}}, default_bg, 1}, + {{{U"3", U"#"}, {U"â", U"Â"}, {U"#", U"~"}}, default_bg, 1}, + {{{U"4", U"$"}, {U"ã", U"Ã"}, {U"$", U"„"}}, default_bg, 1}, + {{{U"5", U"%"}, {U"ä", U"Ä"}, {U"%", U"´"}}, default_bg, 1}, + {{{U"6", U"^"}, {U"å", U"Å"}, {U"&", U"‘"}}, default_bg, 1}, + {{{U"7", U"&"}, {U"æ", U"Æ"}, {U"'", U"’"}}, default_bg, 1}, + {{{U"8", U"*"}, {U"ç", U"Ç"}, {U"(", U"‚"}}, default_bg, 1}, + {{{U"9", U"("}, {U"[", U"<"}, {U")", U"“"}}, default_bg, 1}, + {{{U"0", U")"}, {U"]", U">"}, {U"*", U"”"}}, default_bg, 1}, + + // Row 2 + {{{U"a", U"A"}, {U"è", U"È"}, {U"/", U"¤"}}, default_bg, 1}, + {{{U"z", U"Z"}, {U"é", U"É"}, {U"\\", U"¢"}}, default_bg, 1}, + {{{U"e", U"E"}, {U"ê", U"Ê"}, {U"[", U"€"}}, default_bg, 1}, + {{{U"r", U"R"}, {U"ë", U"Ë"}, {U"]", U"£"}}, default_bg, 1}, + {{{U"t", U"T"}, {U"ì", U"Ì"}, {U"^", U"¥"}}, default_bg, 1}, + {{{U"y", U"Y"}, {U"í", U"Í"}, {U"_", U"§"}}, default_bg, 1}, + {{{U"u", U"U"}, {U"î", U"Î"}, {U"`", U"¦"}}, default_bg, 1}, + {{{U"i", U"I"}, {U"ï", U"Ï"}, {U"{", U"µ"}}, default_bg, 1}, + {{{U"o", U"O"}, {U";", U"="}, {U"}", U""}}, default_bg, 1}, + {{{U"p", U"P"}, {U":", U"+"}, {U"|", U""}}, default_bg, 1}, + + // Row 3 + {{{U"q", U"Q"}, {U"ñ", U"Ñ"}, {U"@", U""}}, default_bg, 1}, + {{{U"s", U"S"}, {U"ò", U"Ò"}, {U"°", U""}}, default_bg, 1}, + {{{U"d", U"D"}, {U"ó", U"Ó"}, {U"‹", U""}}, default_bg, 1}, + {{{U"f", U"F"}, {U"ô", U"Ô"}, {U"›", U""}}, default_bg, 1}, + {{{U"g", U"G"}, {U"õ", U"Õ"}, {U"«", U""}}, default_bg, 1}, + {{{U"h", U"H"}, {U"ö", U"Ö"}, {U"»", U""}}, default_bg, 1}, + {{{U"j", U"J"}, {U"ø", U"Ø"}, {U"ª", U""}}, default_bg, 1}, + {{{U"k", U"K"}, {U"œ", U"Œ"}, {U"º", U""}}, default_bg, 1}, + {{{U"l", U"L"}, {U"`", U"~"}, {U"×", U""}}, default_bg, 1}, + {{{U"'", U"\""}, {U"¡", U"\""}, {U"÷", U""}}, default_bg, 1}, + + // Row 4 + {{{U"w", U"W"}, {U"ß", U"ß"}, {U"+", U""}}, default_bg, 1}, + {{{U"x", U"X"}, {U"ù", U"Ù"}, {U",", U""}}, default_bg, 1}, + {{{U"c", U"C"}, {U"ú", U"Ú"}, {U"-", U""}}, default_bg, 1}, + {{{U"v", U"V"}, {U"û", U"Û"}, {U".", U""}}, default_bg, 1}, + {{{U"b", U"B"}, {U"ü", U"Ü"}, {U"\"", U""}}, default_bg, 1}, + {{{U"n", U"N"}, {U"ý", U"Ý"}, {U":", U""}}, default_bg, 1}, + {{{U"m", U"M"}, {U"ÿ", U"Ÿ"}, {U";", U""}}, default_bg, 1}, + {{{U",", U"-"}, {U",", U"-"}, {U"<", U""}}, default_bg, 1}, + {{{U".", U"_"}, {U".", U"_"}, {U"=", U""}}, default_bg, 1}, + {{{U"?", U"/"}, {U"¿", U"/"}, {U">", U""}}, default_bg, 1}, + + // Control + {{{U"A/a"}, {U"À/à"}, {U"!/¡"}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"ÖÑß"}, {U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, + {{{space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; + } + + osk_panel_german::osk_panel_german(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel(CELL_OSKDIALOG_PANELMODE_GERMAN) + { + num_rows = 5; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + layout = + { + // Row 1 + {{{U"1", U"!"}, {U"à", U"À"}, {U"!", U"¡"}}, default_bg, 1}, + {{{U"2", U"@"}, {U"á", U"Á"}, {U"?", U"¿"}}, default_bg, 1}, + {{{U"3", U"#"}, {U"â", U"Â"}, {U"#", U"~"}}, default_bg, 1}, + {{{U"4", U"$"}, {U"ã", U"Ã"}, {U"$", U"„"}}, default_bg, 1}, + {{{U"5", U"%"}, {U"ä", U"Ä"}, {U"%", U"´"}}, default_bg, 1}, + {{{U"6", U"^"}, {U"å", U"Å"}, {U"&", U"‘"}}, default_bg, 1}, + {{{U"7", U"&"}, {U"æ", U"Æ"}, {U"'", U"’"}}, default_bg, 1}, + {{{U"8", U"*"}, {U"ç", U"Ç"}, {U"(", U"‚"}}, default_bg, 1}, + {{{U"9", U"("}, {U"[", U"<"}, {U")", U"“"}}, default_bg, 1}, + {{{U"0", U")"}, {U"]", U">"}, {U"*", U"”"}}, default_bg, 1}, + + // Row 2 + {{{U"q", U"Q"}, {U"è", U"È"}, {U"/", U"¤"}}, default_bg, 1}, + {{{U"w", U"W"}, {U"é", U"É"}, {U"\\", U"¢"}}, default_bg, 1}, + {{{U"e", U"E"}, {U"ê", U"Ê"}, {U"[", U"€"}}, default_bg, 1}, + {{{U"r", U"R"}, {U"ë", U"Ë"}, {U"]", U"£"}}, default_bg, 1}, + {{{U"t", U"T"}, {U"ì", U"Ì"}, {U"^", U"¥"}}, default_bg, 1}, + {{{U"z", U"Z"}, {U"í", U"Í"}, {U"_", U"§"}}, default_bg, 1}, + {{{U"u", U"U"}, {U"î", U"Î"}, {U"`", U"¦"}}, default_bg, 1}, + {{{U"i", U"I"}, {U"ï", U"Ï"}, {U"{", U"µ"}}, default_bg, 1}, + {{{U"o", U"O"}, {U";", U"="}, {U"}", U""}}, default_bg, 1}, + {{{U"p", U"P"}, {U":", U"+"}, {U"|", U""}}, default_bg, 1}, + + // Row 3 + {{{U"a", U"A"}, {U"ñ", U"Ñ"}, {U"@", U""}}, default_bg, 1}, + {{{U"s", U"S"}, {U"ò", U"Ò"}, {U"°", U""}}, default_bg, 1}, + {{{U"d", U"D"}, {U"ó", U"Ó"}, {U"‹", U""}}, default_bg, 1}, + {{{U"f", U"F"}, {U"ô", U"Ô"}, {U"›", U""}}, default_bg, 1}, + {{{U"g", U"G"}, {U"õ", U"Õ"}, {U"«", U""}}, default_bg, 1}, + {{{U"h", U"H"}, {U"ö", U"Ö"}, {U"»", U""}}, default_bg, 1}, + {{{U"j", U"J"}, {U"ø", U"Ø"}, {U"ª", U""}}, default_bg, 1}, + {{{U"k", U"K"}, {U"œ", U"Œ"}, {U"º", U""}}, default_bg, 1}, + {{{U"l", U"L"}, {U"`", U"~"}, {U"×", U""}}, default_bg, 1}, + {{{U"'", U"\""}, {U"¡", U"\""}, {U"÷", U""}}, default_bg, 1}, + + // Row 4 + {{{U"y", U"Y"}, {U"ß", U"ß"}, {U"+", U""}}, default_bg, 1}, + {{{U"x", U"X"}, {U"ù", U"Ù"}, {U",", U""}}, default_bg, 1}, + {{{U"c", U"C"}, {U"ú", U"Ú"}, {U"-", U""}}, default_bg, 1}, + {{{U"v", U"V"}, {U"û", U"Û"}, {U".", U""}}, default_bg, 1}, + {{{U"b", U"B"}, {U"ü", U"Ü"}, {U"\"", U""}}, default_bg, 1}, + {{{U"n", U"N"}, {U"ý", U"Ý"}, {U":", U""}}, default_bg, 1}, + {{{U"m", U"M"}, {U"ÿ", U"Ÿ"}, {U";", U""}}, default_bg, 1}, + {{{U",", U"-"}, {U",", U"-"}, {U"<", U""}}, default_bg, 1}, + {{{U".", U"_"}, {U".", U"_"}, {U"=", U""}}, default_bg, 1}, + {{{U"?", U"/"}, {U"¿", U"/"}, {U">", U""}}, default_bg, 1}, + + // Control + {{{U"A/a"}, {U"À/à"}, {U"!/¡"}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"ÖÑß"}, {U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, + {{{space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; + } + + osk_panel_turkey::osk_panel_turkey(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel(CELL_OSKDIALOG_PANELMODE_TURKEY) + { + num_rows = 5; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + layout = + { + // Row 1 + {{{U"1", U"!"}, {U"1", U"!"}, {U"!", U"¡"}}, default_bg, 1}, + {{{U"2", U"@"}, {U"2", U"@"}, {U"?", U"¿"}}, default_bg, 1}, + {{{U"3", U"#"}, {U"3", U"#"}, {U"#", U"~"}}, default_bg, 1}, + {{{U"4", U"$"}, {U"4", U"$"}, {U"$", U"„"}}, default_bg, 1}, + {{{U"5", U"%"}, {U"5", U"%"}, {U"%", U"´"}}, default_bg, 1}, + {{{U"6", U"^"}, {U"6", U"^"}, {U"&", U"‘"}}, default_bg, 1}, + {{{U"7", U"&"}, {U"7", U"&"}, {U"'", U"’"}}, default_bg, 1}, + {{{U"8", U"*"}, {U"8", U"*"}, {U"(", U"‚"}}, default_bg, 1}, + {{{U"9", U"("}, {U"9", U"("}, {U")", U"“"}}, default_bg, 1}, + {{{U"0", U")"}, {U"0", U")"}, {U"*", U"”"}}, default_bg, 1}, + + // Row 2 + {{{U"q", U"Q"}, {U"q", U"Q"}, {U"/", U"¤"}}, default_bg, 1}, + {{{U"w", U"W"}, {U"w", U"W"}, {U"\\", U"¢"}}, default_bg, 1}, + {{{U"e", U"€"}, {U"e", U"€"}, {U"[", U"€"}}, default_bg, 1}, + {{{U"r", U"R"}, {U"r", U"R"}, {U"]", U"£"}}, default_bg, 1}, + {{{U"t", U"T"}, {U"t", U"T"}, {U"^", U"¥"}}, default_bg, 1}, + {{{U"y", U"Y"}, {U"y", U"Y"}, {U"_", U"§"}}, default_bg, 1}, + {{{U"u", U"U"}, {U"ü", U"Ü"}, {U"`", U"¦"}}, default_bg, 1}, + {{{U"i", U"I"}, {U"ı", U"İ"}, {U"{", U"µ"}}, default_bg, 1}, // I couldn't find ı and İ in the PS3 OSK, but I'll put them here anyway + {{{U"o", U"O"}, {U"ö", U"Ö"}, {U"}", U""}}, default_bg, 1}, + {{{U"p", U"P"}, {U"p", U"P"}, {U"|", U""}}, default_bg, 1}, + + // Row 3 + {{{U"a", U"A"}, {U"a", U"A"}, {U"@", U""}}, default_bg, 1}, + {{{U"s", U"S"}, {U"ş", U"Ş"}, {U"°", U""}}, default_bg, 1}, + {{{U"d", U"D"}, {U"d", U"D"}, {U"‹", U""}}, default_bg, 1}, + {{{U"f", U"F"}, {U"f", U"F"}, {U"›", U""}}, default_bg, 1}, + {{{U"g", U"G"}, {U"ğ", U"Ğ"}, {U"«", U""}}, default_bg, 1}, + {{{U"h", U"H"}, {U"h", U"H"}, {U"»", U""}}, default_bg, 1}, + {{{U"j", U"J"}, {U"j", U"J"}, {U"ª", U""}}, default_bg, 1}, + {{{U"k", U"K"}, {U"k", U"K"}, {U"º", U""}}, default_bg, 1}, + {{{U"l", U"L"}, {U"l", U"L"}, {U"×", U""}}, default_bg, 1}, + {{{U"'", U"\""}, {U"'", U"\""}, {U"÷", U""}}, default_bg, 1}, + + // Row 4 + {{{U"z", U"Z"}, {U"z", U"Z"}, {U"+", U""}}, default_bg, 1}, + {{{U"x", U"X"}, {U"x", U"X"}, {U",", U""}}, default_bg, 1}, + {{{U"c", U"C"}, {U"ç", U"Ç"}, {U"-", U""}}, default_bg, 1}, + {{{U"v", U"V"}, {U"v", U"V"}, {U".", U""}}, default_bg, 1}, + {{{U"b", U"B"}, {U"b", U"B"}, {U"\"", U""}}, default_bg, 1}, + {{{U"n", U"N"}, {U"n", U"N"}, {U":", U""}}, default_bg, 1}, + {{{U"m", U"M"}, {U"m", U"M"}, {U";", U""}}, default_bg, 1}, + {{{U",", U"-"}, {U",", U"-"}, {U"<", U""}}, default_bg, 1}, + {{{U".", U"_"}, {U".", U"_"}, {U"=", U""}}, default_bg, 1}, + {{{U"?", U"/"}, {U"?", U"/"}, {U">", U""}}, default_bg, 1}, + + // Control + {{{U"A/a"}, {U"A/a"}, {U"!/¡"}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"AltGr"}, {U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, + {{{space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; + } + + osk_panel_polish::osk_panel_polish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel(CELL_OSKDIALOG_PANELMODE_POLISH) + { + num_rows = 5; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + layout = + { + // Row 1 + {{{U"1", U"!"}, {U"1", U"!"}, {U"!", U"¡"}}, default_bg, 1}, + {{{U"2", U"@"}, {U"2", U"@"}, {U"?", U"¿"}}, default_bg, 1}, + {{{U"3", U"#"}, {U"3", U"#"}, {U"#", U"~"}}, default_bg, 1}, + {{{U"4", U"$"}, {U"4", U"$"}, {U"$", U"„"}}, default_bg, 1}, + {{{U"5", U"%"}, {U"5", U"%"}, {U"%", U"´"}}, default_bg, 1}, + {{{U"6", U"^"}, {U"6", U"^"}, {U"&", U"‘"}}, default_bg, 1}, + {{{U"7", U"&"}, {U"7", U"&"}, {U"'", U"’"}}, default_bg, 1}, + {{{U"8", U"*"}, {U"8", U"*"}, {U"(", U"‚"}}, default_bg, 1}, + {{{U"9", U"("}, {U"9", U"("}, {U")", U"“"}}, default_bg, 1}, + {{{U"0", U")"}, {U"0", U")"}, {U"*", U"”"}}, default_bg, 1}, + + // Row 2 + {{{U"q", U"Q"}, {U"q", U"Q"}, {U"/", U"¤"}}, default_bg, 1}, + {{{U"w", U"W"}, {U"w", U"W"}, {U"\\", U"¢"}}, default_bg, 1}, + {{{U"e", U"E"}, {U"ę", U"Ę"}, {U"[", U"€"}}, default_bg, 1}, + {{{U"r", U"R"}, {U"r", U"R"}, {U"]", U"£"}}, default_bg, 1}, + {{{U"t", U"T"}, {U"t", U"T"}, {U"^", U"¥"}}, default_bg, 1}, + {{{U"y", U"Y"}, {U"y", U"Y"}, {U"_", U"§"}}, default_bg, 1}, + {{{U"u", U"U"}, {U"€", U"€"}, {U"`", U"¦"}}, default_bg, 1}, + {{{U"i", U"I"}, {U"i", U"I"}, {U"{", U"µ"}}, default_bg, 1}, + {{{U"o", U"O"}, {U"ó", U"Ó"}, {U"}", U""}}, default_bg, 1}, + {{{U"p", U"P"}, {U"p", U"P"}, {U"|", U""}}, default_bg, 1}, + + // Row 3 + {{{U"a", U"A"}, {U"ą", U"Ą"}, {U"@", U""}}, default_bg, 1}, + {{{U"s", U"S"}, {U"ś", U"Ś"}, {U"°", U""}}, default_bg, 1}, + {{{U"d", U"D"}, {U"d", U"D"}, {U"‹", U""}}, default_bg, 1}, + {{{U"f", U"F"}, {U"f", U"F"}, {U"›", U""}}, default_bg, 1}, + {{{U"g", U"G"}, {U"g", U"G"}, {U"«", U""}}, default_bg, 1}, + {{{U"h", U"H"}, {U"h", U"H"}, {U"»", U""}}, default_bg, 1}, + {{{U"j", U"J"}, {U"j", U"J"}, {U"ª", U""}}, default_bg, 1}, + {{{U"k", U"K"}, {U"k", U"K"}, {U"º", U""}}, default_bg, 1}, + {{{U"l", U"L"}, {U"ł", U"Ł"}, {U"×", U""}}, default_bg, 1}, + {{{U"'", U"\""}, {U"'", U"\""}, {U"÷", U""}}, default_bg, 1}, + + // Row 4 + {{{U"z", U"Z"}, {U"ż", U"Ż"}, {U"+", U""}}, default_bg, 1}, + {{{U"x", U"X"}, {U"ź", U"Ź"}, {U",", U""}}, default_bg, 1}, + {{{U"c", U"C"}, {U"ć", U"Ć"}, {U"-", U""}}, default_bg, 1}, + {{{U"v", U"V"}, {U"v", U"V"}, {U".", U""}}, default_bg, 1}, + {{{U"b", U"B"}, {U"b", U"B"}, {U"\"", U""}}, default_bg, 1}, + {{{U"n", U"N"}, {U"ń", U"Ń"}, {U":", U""}}, default_bg, 1}, + {{{U"m", U"M"}, {U"m", U"M"}, {U";", U""}}, default_bg, 1}, + {{{U",", U"-"}, {U",", U"-"}, {U"<", U""}}, default_bg, 1}, + {{{U".", U"_"}, {U".", U"_"}, {U"=", U""}}, default_bg, 1}, + {{{U"?", U"/"}, {U"?", U"/"}, {U">", U""}}, default_bg, 1}, + + // Control + {{{U"A/a"}, {U"Ą/ą"}, {U"!/¡"}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"AltGr"}, {U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, + {{{space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; + } + + osk_panel_russian::osk_panel_russian(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel(CELL_OSKDIALOG_PANELMODE_RUSSIAN) + { + num_rows = 6; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + layout = + { + // Row 1 + {{{U"1", U"!"}, {U"1", U"!"}, {U"à", U"À"}, {U"!", U"¡"}}, default_bg, 1}, + {{{U"2", U"\""}, {U"2", U"@"}, {U"á", U"Á"}, {U"?", U"¿"}}, default_bg, 1}, + {{{U"3", U"#"}, {U"3", U"#"}, {U"â", U"Â"}, {U"#", U"~"}}, default_bg, 1}, + {{{U"4", U";"}, {U"4", U"$"}, {U"ã", U"Ã"}, {U"$", U"„"}}, default_bg, 1}, + {{{U"5", U"%"}, {U"5", U"%"}, {U"ä", U"Ä"}, {U"%", U"´"}}, default_bg, 1}, + {{{U"6", U":"}, {U"6", U"^"}, {U"å", U"Å"}, {U"&", U"‘"}}, default_bg, 1}, + {{{U"7", U"?"}, {U"7", U"&"}, {U"æ", U"Æ"}, {U"'", U"’"}}, default_bg, 1}, + {{{U"8", U"*"}, {U"8", U"*"}, {U"ç", U"Ç"}, {U"(", U"‚"}}, default_bg, 1}, + {{{U"9", U"("}, {U"9", U"("}, {U"[", U"<"}, {U")", U"“"}}, default_bg, 1}, + {{{U"0", U")"}, {U"0", U")"}, {U"]", U">"}, {U"*", U"”"}}, default_bg, 1}, + + // Row 2 + {{{U"ё", U"Ё"}, {U"q", U"Q"}, {U"è", U"È"}, {U"/", U"¤"}}, default_bg, 1}, + {{{U"'", U"@"}, {U"w", U"W"}, {U"é", U"É"}, {U"\\", U"¢"}}, default_bg, 1}, + {{{U",", U"$"}, {U"e", U"E"}, {U"ê", U"Ê"}, {U"[", U"€"}}, default_bg, 1}, + {{{U".", U"^"}, {U"r", U"R"}, {U"ë", U"Ë"}, {U"]", U"£"}}, default_bg, 1}, + {{{U"?", U"&"}, {U"t", U"T"}, {U"ì", U"Ì"}, {U"^", U"¥"}}, default_bg, 1}, + {{{U"!", U"/"}, {U"y", U"Y"}, {U"í", U"Í"}, {U"_", U"§"}}, default_bg, 1}, + {{{U"-", U"_"}, {U"u", U"U"}, {U"î", U"Î"}, {U"`", U"¦"}}, default_bg, 1}, + {{{U"=", U"+"}, {U"i", U"I"}, {U"ï", U"Ï"}, {U"{", U"µ"}}, default_bg, 1}, + {{{U"х", U"Х"}, {U"o", U"O"}, {U";", U"="}, {U"}", U""}}, default_bg, 1}, + {{{U"ъ", U"Ъ"}, {U"p", U"P"}, {U":", U"+"}, {U"|", U""}}, default_bg, 1}, + + // Row 3 + {{{U"й", U"Й"}, {U"a", U"A"}, {U"ñ", U"Ñ"}, {U"@", U""}}, default_bg, 1}, + {{{U"ц", U"Ц"}, {U"s", U"S"}, {U"ò", U"Ò"}, {U"°", U""}}, default_bg, 1}, + {{{U"у", U"У"}, {U"d", U"D"}, {U"ó", U"Ó"}, {U"‹", U""}}, default_bg, 1}, + {{{U"к", U"К"}, {U"f", U"F"}, {U"ô", U"Ô"}, {U"›", U""}}, default_bg, 1}, + {{{U"е", U"Е"}, {U"g", U"G"}, {U"õ", U"Õ"}, {U"«", U""}}, default_bg, 1}, + {{{U"н", U"Н"}, {U"h", U"H"}, {U"ö", U"Ö"}, {U"»", U""}}, default_bg, 1}, + {{{U"г", U"Г"}, {U"j", U"J"}, {U"ø", U"Ø"}, {U"ª", U""}}, default_bg, 1}, + {{{U"ш", U"Ш"}, {U"k", U"K"}, {U"œ", U"Œ"}, {U"º", U""}}, default_bg, 1}, + {{{U"щ", U"Щ"}, {U"l", U"L"}, {U"`", U"~"}, {U"×", U""}}, default_bg, 1}, + {{{U"з", U"З"}, {U"'", U"\""}, {U"¡", U"\""}, {U"÷", U""}}, default_bg, 1}, + + // Row 4 + {{{U"ф", U"Ф"}, {U"z", U"Z"}, {U"ß", U"ß"}, {U"+", U""}}, default_bg, 1}, + {{{U"ы", U"Ы"}, {U"x", U"X"}, {U"ù", U"Ù"}, {U",", U""}}, default_bg, 1}, + {{{U"в", U"В"}, {U"c", U"C"}, {U"ú", U"Ú"}, {U"-", U""}}, default_bg, 1}, + {{{U"а", U"А"}, {U"v", U"V"}, {U"û", U"Û"}, {U".", U""}}, default_bg, 1}, + {{{U"п", U"П"}, {U"b", U"B"}, {U"ü", U"Ü"}, {U"\"", U""}}, default_bg, 1}, + {{{U"р", U"Р"}, {U"n", U"N"}, {U"ý", U"Ý"}, {U":", U""}}, default_bg, 1}, + {{{U"о", U"О"}, {U"m", U"M"}, {U"ÿ", U"Ÿ"}, {U";", U""}}, default_bg, 1}, + {{{U"л", U"Л"}, {U",", U"-"}, {U",", U"-"}, {U"<", U""}}, default_bg, 1}, + {{{U"д", U"Д"}, {U".", U"_"}, {U".", U"_"}, {U"=", U""}}, default_bg, 1}, + {{{U"Ж", U"ж"}, {U"?", U"/"}, {U"¿", U"/"}, {U">", U""}}, default_bg, 1}, + + // Row 5 + {{{U"я", U"Я"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"ч", U"Ч"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"с", U"С"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"м", U"М"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"и", U"И"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"т", U"Т"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"ь", U"Ь"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"б", U"Б"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"ю", U"Ю"}, {U""}, {U""}, {U""}}, default_bg, 1}, + {{{U"э", U"Э"}, {U""}, {U""}, {U""}}, default_bg, 1}, + + // Control + {{{U"У/у"}, {U"A/a"}, {U"À/à"}, {U"!/¡"}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"ABC"}, {U"ÖÑß"}, {U"@#:"}, {U"РУ"}}, special2_bg, 2, button_flags::_layer, layer_cb }, + {{{space}, {space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; + } + + osk_panel_korean::osk_panel_korean(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel(CELL_OSKDIALOG_PANELMODE_KOREAN) + { + num_rows = 5; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + layout = + { + // Row 1 + {{{U"ㅃ"}, {U"1", U"!"}, {U"!"}}, default_bg, 1}, + {{{U"ㅉ"}, {U"2", U"@"}, {U"\""}}, default_bg, 1}, + {{{U"ㄸ"}, {U"3", U"#"}, {U"#"}}, default_bg, 1}, + {{{U"ㄲ"}, {U"4", U"$"}, {U"$"}}, default_bg, 1}, + {{{U"ㅆ"}, {U"5", U"%"}, {U"%"}}, default_bg, 1}, + {{{U"^"}, {U"6", U"^"}, {U"&"}}, default_bg, 1}, + {{{U"*"}, {U"7", U"&"}, {U"'"}}, default_bg, 1}, + {{{U"-"}, {U"8", U"*"}, {U"("}}, default_bg, 1}, + {{{U"ㅒ"}, {U"9", U"("}, {U")"}}, default_bg, 1}, + {{{U"ㅖ"}, {U"0", U")"}, {U"*"}}, default_bg, 1}, + + // Row 2 + {{{U"ㅂ"}, {U"q", U"Q"}, {U"+"}}, default_bg, 1}, + {{{U"ㅈ"}, {U"w", U"W"}, {U","}}, default_bg, 1}, + {{{U"ㄷ"}, {U"e", U"E"}, {U"-"}}, default_bg, 1}, + {{{U"ㄱ"}, {U"r", U"R"}, {U"."}}, default_bg, 1}, + {{{U"ㅅ"}, {U"t", U"T"}, {U"/"}}, default_bg, 1}, + {{{U"ㅛ"}, {U"y", U"Y"}, {U":"}}, default_bg, 1}, + {{{U"ㅕ"}, {U"u", U"U"}, {U";"}}, default_bg, 1}, + {{{U"ㅑ"}, {U"i", U"I"}, {U"<"}}, default_bg, 1}, + {{{U"ㅐ"}, {U"o", U"O"}, {U"="}}, default_bg, 1}, + {{{U"ㅔ"}, {U"p", U"P"}, {U">"}}, default_bg, 1}, + + // Row 3 + {{{U"ㅁ"}, {U"a", U"A"}, {U"?"}}, default_bg, 1}, + {{{U"ㄴ"}, {U"s", U"S"}, {U"@"}}, default_bg, 1}, + {{{U"ㅇ"}, {U"d", U"D"}, {U"["}}, default_bg, 1}, + {{{U"ㄹ"}, {U"f", U"F"}, {U"\\"}}, default_bg, 1}, + {{{U"ㅎ"}, {U"g", U"G"}, {U"]"}}, default_bg, 1}, + {{{U"ㅗ"}, {U"h", U"H"}, {U"^"}}, default_bg, 1}, + {{{U"ㅓ"}, {U"j", U"J"}, {U"_"}}, default_bg, 1}, + {{{U"ㅏ"}, {U"k", U"K"}, {U"`"}}, default_bg, 1}, + {{{U"ㅣ"}, {U"l", U"L"}, {U"{"}}, default_bg, 1}, + {{{U";"}, {U"'", U"\""}, {U"}"}}, default_bg, 1}, + + // Row 4 + {{{U"ㅋ"}, {U"z", U"Z"}, {U"|"}}, default_bg, 1}, + {{{U"ㅌ"}, {U"x", U"X"}, {U"~"}}, default_bg, 1}, + {{{U"ㅊ"}, {U"c", U"C"}, {U"₩"}}, default_bg, 1}, + {{{U"ㅍ"}, {U"v", U"V"}, {U""}}, default_bg, 1}, + {{{U"ㅠ"}, {U"b", U"B"}, {U""}}, default_bg, 1}, + {{{U"ㅜ"}, {U"n", U"N"}, {U""}}, default_bg, 1}, + {{{U"ㅡ"}, {U"m", U"M"}, {U""}}, default_bg, 1}, + {{{U","}, {U",", U"-"}, {U""}}, default_bg, 1}, + {{{U"."}, {U".", U"_"}, {U""}}, default_bg, 1}, + {{{U"?"}, {U"?", U"/"}, {U""}}, default_bg, 1}, + + // Control + {{{U""}, {U"A/a"}, {U""}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"ABC"}, {U"@#:"}, {U"가"}}, special2_bg, 2, button_flags::_layer, layer_cb }, + {{{space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; + } + + osk_panel_chinese::osk_panel_chinese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb, u32 osk_panel_mode) + : osk_panel(osk_panel_mode) + { + num_rows = 5; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + // TODO: add mode for chinese dictionaries + + layout = + { + // Row 1 + {{{U"1", U"!"}, {U"1", U"!"}, {U","}}, default_bg, 1}, + {{{U"2", U"@"}, {U"2", U"@"}, {U"."}}, default_bg, 1}, + {{{U"3", U"#"}, {U"3", U"#"}, {U":"}}, default_bg, 1}, + {{{U"4", U"$"}, {U"4", U"$"}, {U";"}}, default_bg, 1}, + {{{U"5", U"%"}, {U"5", U"%"}, {U"!"}}, default_bg, 1}, + {{{U"6", U"^"}, {U"6", U"^"}, {U"?"}}, default_bg, 1}, + {{{U"7", U"&"}, {U"7", U"&"}, {U"""}}, default_bg, 1}, + {{{U"8", U"*"}, {U"8", U"*"}, {U"'"}}, default_bg, 1}, + {{{U"9", U"("}, {U"9", U"("}, {U"`"}}, default_bg, 1}, + {{{U"0", U")"}, {U"0", U")"}, {U"^"}}, default_bg, 1}, + + // Row 2 + {{{U"q", U"Q"}, {U"q", U"Q"}, {U"~"}}, default_bg, 1}, + {{{U"w", U"W"}, {U"w", U"W"}, {U"_"}}, default_bg, 1}, + {{{U"e", U"E"}, {U"e", U"E"}, {U"&"}}, default_bg, 1}, + {{{U"r", U"R"}, {U"r", U"R"}, {U"@"}}, default_bg, 1}, + {{{U"t", U"T"}, {U"t", U"T"}, {U"#"}}, default_bg, 1}, + {{{U"y", U"Y"}, {U"y", U"Y"}, {U"%"}}, default_bg, 1}, + {{{U"u", U"U"}, {U"u", U"U"}, {U"+"}}, default_bg, 1}, + {{{U"i", U"I"}, {U"i", U"I"}, {U"-"}}, default_bg, 1}, + {{{U"o", U"O"}, {U"o", U"O"}, {U"*"}}, default_bg, 1}, + {{{U"p", U"P"}, {U"p", U"P"}, {U"・"}}, default_bg, 1}, + + // Row 3 + {{{U"a", U"A"}, {U"a", U"A"}, {U"<"}}, default_bg, 1}, + {{{U"s", U"S"}, {U"s", U"S"}, {U">"}}, default_bg, 1}, + {{{U"d", U"D"}, {U"d", U"D"}, {U"("}}, default_bg, 1}, + {{{U"f", U"F"}, {U"f", U"F"}, {U")"}}, default_bg, 1}, + {{{U"g", U"G"}, {U"g", U"G"}, {U"["}}, default_bg, 1}, + {{{U"h", U"H"}, {U"h", U"H"}, {U"]"}}, default_bg, 1}, + {{{U"j", U"J"}, {U"j", U"J"}, {U"{"}}, default_bg, 1}, + {{{U"k", U"K"}, {U"k", U"K"}, {U"}"}}, default_bg, 1}, + {{{U"l", U"L"}, {U"l", U"L"}, {U"「"}}, default_bg, 1}, + {{{U"'", U"\""}, {U"'", U"""}, {U"」"}}, default_bg, 1}, + + // Row 4 + {{{U"z", U"Z"}, {U"z", U"Z"}, {U"="}}, default_bg, 1}, + {{{U"x", U"X"}, {U"x", U"X"}, {U"|"}}, default_bg, 1}, + {{{U"c", U"C"}, {U"c", U"C"}, {U"。"}}, default_bg, 1}, + {{{U"v", U"V"}, {U"v", U"V"}, {U"/"}}, default_bg, 1}, + {{{U"b", U"B"}, {U"b", U"B"}, {U"\"}}, default_bg, 1}, + {{{U"n", U"N"}, {U"n", U"N"}, {U"¬"}}, default_bg, 1}, + {{{U"m", U"M"}, {U"m", U"M"}, {U"$"}}, default_bg, 1}, + {{{U",", U"-"}, {U",", U"-"}, {U"¥"}}, default_bg, 1}, + {{{U".", U"_"}, {U".", U"_"}, {U"、"}}, default_bg, 1}, + {{{U"?", U"/"}, {U"?", U"/"}, {U""}}, default_bg, 1}, + + // Control + {{{U"A/a"}, {U"A/a"}, {U""}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"全半"}, {U"@%"}, {U"abc"}}, special2_bg, 2, button_flags::_layer, layer_cb}, + {{{space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb}, + {{{backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; + } + + osk_panel_simplified_chinese::osk_panel_simplified_chinese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_chinese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_SIMPLIFIED_CHINESE) + { + // Simplified chinese uses osk_panel_chinese. Only the translation for the controls and the dictionary should be different than for traditional chinese. + } + + osk_panel_traditional_chinese::osk_panel_traditional_chinese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) + : osk_panel_chinese(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_TRADITIONAL_CHINESE) + { + // Traditional chinese uses osk_panel_chinese. Only the translation for the controls and the dictionary should be different than for simplified chinese. } osk_panel_japanese::osk_panel_japanese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) : osk_panel(CELL_OSKDIALOG_PANELMODE_JAPANESE) { - color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 6; num_columns = 10; cell_size_x = 50; @@ -163,22 +747,18 @@ namespace rsx {{{U"ろ", U"ロ"}, {U"", U""}, {U"", U""}, {U""}}, default_bg, 1}, {{{U"", U""}, {U"", U""}, {U"", U""}, {U""}}, default_bg, 1}, - // Special + // Control {{{U"あ/ア"}, {U"A/a"}, {U"A/a"}, {U""}}, special2_bg, 2, button_flags::_shift, shift_cb }, {{{U"abc"}, {U"全半"}, {U"@%"}, {U"あア"}}, special2_bg, 2, button_flags::_layer, layer_cb}, - {{{U"Space"}, {U"Space"}, {U"Space"}, {U"Space"}}, special_bg, 2, button_flags::_space, space_cb}, - {{{U"Backspace"}, {U"Backspace"}, {U"Backspace"}, {U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}, {U"Enter"}, {U"Enter"}, {U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}, {space}, {space}, {space}}, special_bg, 2, button_flags::_space, space_cb}, + {{{backspace}, {backspace}, {backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}, {enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_japanese_hiragana::osk_panel_japanese_hiragana(callback_t /*shift_cb*/, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) : osk_panel(CELL_OSKDIALOG_PANELMODE_JAPANESE_HIRAGANA) { - color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 6; num_columns = 10; cell_size_x = 50; @@ -246,22 +826,18 @@ namespace rsx {{{U"ろ"}, {U""}}, default_bg, 1}, {{{U""}, {U""}}, default_bg, 1}, - // Special + // Control {{{U""}, {U""}}, special2_bg, 2, button_flags::_shift, nullptr }, {{{U"@%"}, {U"あ"}}, special2_bg, 2, button_flags::_layer, layer_cb}, - {{{U"Space"}, {U"Space"}}, special_bg, 2, button_flags::_space, space_cb}, - {{{U"Backspace"}, {U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}, {U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}, {space}}, special_bg, 2, button_flags::_space, space_cb}, + {{{backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_japanese_katakana::osk_panel_japanese_katakana(callback_t /*shift_cb*/, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) : osk_panel(CELL_OSKDIALOG_PANELMODE_JAPANESE_KATAKANA) { - color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 6; num_columns = 10; cell_size_x = 50; @@ -329,22 +905,18 @@ namespace rsx {{{U"ロ"}, {U""}}, default_bg, 1}, {{{U""}, {U""}}, default_bg, 1}, - // Special + // Control {{{U""}, {U""}}, special2_bg, 2, button_flags::_shift, nullptr }, {{{U"@%"}, {U"ア"}}, special2_bg, 2, button_flags::_layer, layer_cb}, - {{{U"Space"}, {U"Space"}}, special_bg, 2, button_flags::_space, space_cb}, - {{{U"Backspace"}, {U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}, {U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}, {space}}, special_bg, 2, button_flags::_space, space_cb}, + {{{backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_alphabet_half_width::osk_panel_alphabet_half_width(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb, u32 osk_panel_mode) : osk_panel(osk_panel_mode) { - const color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - const color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - const color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 5; num_columns = 10; cell_size_x = 50; @@ -400,22 +972,18 @@ namespace rsx {{{U".", U"_"}, {U"="}}, default_bg, 1}, {{{U"?", U"/"}, {U">"}}, default_bg, 1}, - // Special + // Control {{{U"A/a"}, {U""}}, special2_bg, 2, button_flags::_shift, shift_cb }, {{{U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, - {{{U"Space"}, {U"Space"}}, special_bg, 2, button_flags::_space, space_cb }, - {{{U"Backspace"}, {U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}, {U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_alphabet_full_width::osk_panel_alphabet_full_width(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) : osk_panel(CELL_OSKDIALOG_PANELMODE_ALPHABET_FULL_WIDTH) { - const color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - const color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - const color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 5; num_columns = 10; cell_size_x = 50; @@ -471,22 +1039,18 @@ namespace rsx {{{U".", U"_"}, {U"、"}}, default_bg, 1}, {{{U"?", U"/"}, {U""}}, default_bg, 1}, - // Special + // Control {{{U"A/a"}, {U""}}, special2_bg, 2, button_flags::_shift, shift_cb }, {{{U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, - {{{U"Space"}, {U"Space"}}, special_bg, 2, button_flags::_space, space_cb }, - {{{U"Backspace"}, {U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}, {U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_numeral_half_width::osk_panel_numeral_half_width(callback_t /*shift_cb*/, callback_t /*layer_cb*/, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) : osk_panel(CELL_OSKDIALOG_PANELMODE_NUMERAL) { - const color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - const color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - const color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 2; num_columns = 10; cell_size_x = 50; @@ -506,22 +1070,18 @@ namespace rsx {{{U"9"}}, default_bg, 1}, {{{U"0"}}, default_bg, 1}, - // Special + // Control {{{U""}}, special2_bg, 2, button_flags::_shift, nullptr }, {{{U""}}, special2_bg, 2, button_flags::_layer, nullptr }, - {{{U"Space"}}, special_bg, 2, button_flags::_space, space_cb }, - {{{U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_numeral_full_width::osk_panel_numeral_full_width(callback_t /*shift_cb*/, callback_t /*layer_cb*/, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) : osk_panel(CELL_OSKDIALOG_PANELMODE_NUMERAL_FULL_WIDTH) { - const color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; - const color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; - const color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; - num_rows = 2; num_columns = 10; cell_size_x = 50; @@ -541,19 +1101,80 @@ namespace rsx {{{U"9"}}, default_bg, 1}, {{{U"0"}}, default_bg, 1}, - // Special + // Control {{{U""}}, special2_bg, 2, button_flags::_shift, nullptr }, {{{U""}}, special2_bg, 2, button_flags::_layer, nullptr }, - {{{U"Space"}}, special_bg, 2, button_flags::_space, space_cb }, - {{{U"Backspace"}}, special_bg, 2, button_flags::_default, delete_cb }, - {{{U"Enter"}}, special2_bg, 2, button_flags::_return, enter_cb }, + {{{space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}}, special2_bg, 2, button_flags::_return, enter_cb }, }; } osk_panel_url::osk_panel_url(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) - : osk_panel_alphabet_half_width(shift_cb, layer_cb, space_cb, delete_cb, enter_cb, CELL_OSKDIALOG_PANELMODE_URL) + : osk_panel(CELL_OSKDIALOG_PANELMODE_URL) { - // Roughly the same as the half-width alphanumeric character panel. + num_rows = 5; + num_columns = 10; + cell_size_x = 50; + cell_size_y = 40; + + layout = + { + // Row 1 + {{{U"1", U"!"}, {U"!"}}, default_bg, 1}, + {{{U"2", U"@"}, {U"?"}}, default_bg, 1}, + {{{U"3", U"#"}, {U"#"}}, default_bg, 1}, + {{{U"4", U"$"}, {U"$"}}, default_bg, 1}, + {{{U"5", U"%"}, {U"%"}}, default_bg, 1}, + {{{U"6", U"~"}, {U"&"}}, default_bg, 1}, + {{{U"7", U"&"}, {U"'"}}, default_bg, 1}, + {{{U"8", U"*"}, {U"("}}, default_bg, 1}, + {{{U"9", U";"}, {U")"}}, default_bg, 1}, + {{{U"0", U"+"}, {U"*"}}, default_bg, 1}, + + // Row 2 + {{{U"q", U"Q"}, {U"/"}}, default_bg, 1}, + {{{U"w", U"W"}, {U"\\"}}, default_bg, 1}, + {{{U"e", U"E"}, {U"["}}, default_bg, 1}, + {{{U"r", U"R"}, {U"]"}}, default_bg, 1}, + {{{U"t", U"T"}, {U"^"}}, default_bg, 1}, + {{{U"y", U"Y"}, {U"_"}}, default_bg, 1}, + {{{U"u", U"U"}, {U"`"}}, default_bg, 1}, + {{{U"i", U"I"}, {U"{"}}, default_bg, 1}, + {{{U"o", U"O"}, {U"}"}}, default_bg, 1}, + {{{U"p", U"P"}, {U"|"}}, default_bg, 1}, + + // Row 3 + {{{U"a", U"A"}, {U"@"}}, default_bg, 1}, + {{{U"s", U"S"}, {U"°"}}, default_bg, 1}, + {{{U"d", U"D"}, {U"‹"}}, default_bg, 1}, + {{{U"f", U"F"}, {U"›"}}, default_bg, 1}, + {{{U"g", U"G"}, {U"«"}}, default_bg, 1}, + {{{U"h", U"H"}, {U"»"}}, default_bg, 1}, + {{{U"j", U"J"}, {U"ª"}}, default_bg, 1}, + {{{U"k", U"K"}, {U"º"}}, default_bg, 1}, + {{{U"l", U"L"}, {U"×"}}, default_bg, 1}, + {{{U"-", U"="}, {U"÷"}}, default_bg, 1}, + + // Row 4 + {{{U"z", U"Z"}, {U"+"}}, default_bg, 1}, + {{{U"x", U"X"}, {U","}}, default_bg, 1}, + {{{U"c", U"C"}, {U"-"}}, default_bg, 1}, + {{{U"v", U"V"}, {U"."}}, default_bg, 1}, + {{{U"b", U"B"}, {U"\""}}, default_bg, 1}, + {{{U"n", U"N"}, {U":"}}, default_bg, 1}, + {{{U"m", U"M"}, {U";"}}, default_bg, 1}, + {{{U"/", U":"}, {U"<"}}, default_bg, 1}, + {{{U".", U","}, {U"="}}, default_bg, 1}, + {{{U"_", U"?"}, {U">"}}, default_bg, 1}, + + // Control + {{{U"A/a"}, {U""}}, special2_bg, 2, button_flags::_shift, shift_cb }, + {{{U"@#:"}, {U"ABC"}}, special2_bg, 2, button_flags::_layer, layer_cb }, + {{{space}, {space}}, special_bg, 2, button_flags::_space, space_cb }, + {{{backspace}, {backspace}}, special_bg, 2, button_flags::_default, delete_cb }, + {{{enter}, {enter}}, special2_bg, 2, button_flags::_return, enter_cb }, + }; } osk_panel_password::osk_panel_password(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.h b/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.h index f3bb7b1d7f..4c1b904bbe 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_osk_panel.h @@ -30,6 +30,10 @@ namespace rsx struct osk_panel { + const color4f default_bg = { 0.7f, 0.7f, 0.7f, 1.f }; + const color4f special_bg = { 0.2f, 0.7f, 0.7f, 1.f }; + const color4f special2_bg = { 0.83f, 0.81f, 0.57f, 1.f }; + u32 osk_panel_mode = 0; u32 num_rows = 0; u32 num_columns = 0; @@ -39,6 +43,11 @@ namespace rsx std::vector layout; osk_panel(u32 panel_mode = 0); + + protected: + std::u32string space; + std::u32string backspace; + std::u32string enter; }; struct osk_panel_latin : public osk_panel @@ -51,6 +60,96 @@ namespace rsx osk_panel_english(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); }; + struct osk_panel_spanish : public osk_panel_latin + { + osk_panel_spanish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_italian : public osk_panel_latin + { + osk_panel_italian(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_danish : public osk_panel_latin + { + osk_panel_danish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_norwegian : public osk_panel_latin + { + osk_panel_norwegian(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_dutch : public osk_panel_latin + { + osk_panel_dutch(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_swedish : public osk_panel_latin + { + osk_panel_swedish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_finnish : public osk_panel_latin + { + osk_panel_finnish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_portuguese_pt : public osk_panel_latin + { + osk_panel_portuguese_pt(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_portuguese_br : public osk_panel_latin + { + osk_panel_portuguese_br(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_french : public osk_panel + { + osk_panel_french(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_german : public osk_panel + { + osk_panel_german(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_turkey : public osk_panel + { + osk_panel_turkey(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_polish : public osk_panel + { + osk_panel_polish(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_russian : public osk_panel + { + osk_panel_russian(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_korean : public osk_panel + { + osk_panel_korean(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_chinese : public osk_panel + { + osk_panel_chinese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb, u32 osk_panel_mode); + }; + + struct osk_panel_simplified_chinese : public osk_panel_chinese + { + osk_panel_simplified_chinese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + + struct osk_panel_traditional_chinese : public osk_panel_chinese + { + osk_panel_traditional_chinese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); + }; + struct osk_panel_japanese : public osk_panel { osk_panel_japanese(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); @@ -86,7 +185,7 @@ namespace rsx osk_panel_numeral_full_width(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); }; - struct osk_panel_url : public osk_panel_alphabet_half_width + struct osk_panel_url : public osk_panel { osk_panel_url(callback_t shift_cb, callback_t layer_cb, callback_t space_cb, callback_t delete_cb, callback_t enter_cb); };