Skip to content

Commit 76c16a1

Browse files
dkosmariDaniel K. O. (dkosmari)
andauthored
Wii U: Set a swkbd keyboard layout for the region and language. (#120)
* Set a keyboard layout for the region and language. * Renamed get_qwerty_layout() to get_default_layout(). --------- Co-authored-by: Daniel K. O. (dkosmari) <none@none>
1 parent 609dd2e commit 76c16a1

File tree

1 file changed

+53
-4
lines changed

1 file changed

+53
-4
lines changed

src/video/wiiu/SDL_wiiuswkbd.cpp

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141

4242
using nn::swkbd::LanguageType;
4343
using nn::swkbd::RegionType;
44+
using nn::swkbd::KeyboardLayout;
4445

4546
namespace
4647
{
@@ -416,6 +417,52 @@ namespace
416417
return *cached_system_region;
417418
}
418419

420+
KeyboardLayout
421+
get_default_layout(RegionType region,
422+
LanguageType language)
423+
{
424+
switch (region) {
425+
case RegionType::Japan:
426+
return KeyboardLayout::JPN_JP_QWERTY;
427+
case RegionType::USA:
428+
switch (language) {
429+
case LanguageType::English:
430+
return KeyboardLayout::USA_EN_QWERTY;
431+
case LanguageType::French:
432+
return KeyboardLayout::USA_FR_QWERTY;
433+
case LanguageType::Spanish:
434+
return KeyboardLayout::USA_ES_QWERTY;
435+
case LanguageType::Portuguese:
436+
return KeyboardLayout::USA_PT_QWERTY;
437+
default:
438+
return KeyboardLayout::LanguageDefault;
439+
}
440+
case RegionType::Europe:
441+
switch (language) {
442+
case LanguageType::English:
443+
return KeyboardLayout::EUR_EN_QWERTY;
444+
case LanguageType::French:
445+
return KeyboardLayout::EUR_FR_AZERTY;
446+
case LanguageType::German:
447+
return KeyboardLayout::EUR_DE_QWERTZ;
448+
case LanguageType::Italian:
449+
return KeyboardLayout::EUR_IT_QWERTY;
450+
case LanguageType::Spanish:
451+
return KeyboardLayout::EUR_ES_QWERTY;
452+
case LanguageType::Dutch:
453+
return KeyboardLayout::EUR_NL_QWERTY;
454+
case LanguageType::Portuguese:
455+
return KeyboardLayout::EUR_PT_QWERTY;
456+
case LanguageType::Russian:
457+
return KeyboardLayout::EUR_RU_JCUKEN;
458+
default:
459+
return KeyboardLayout::LanguageDefault;
460+
}
461+
default:
462+
return KeyboardLayout::LanguageDefault;
463+
}
464+
}
465+
419466
std::size_t
420467
strlen_16(const char16_t *s)
421468
{
@@ -567,8 +614,6 @@ void WIIU_SWKBD_Calc(void)
567614
detail::wmMsgFinish.subsystem = SDL_SYSWM_WIIU;
568615
detail::wmMsgFinish.msg.wiiu.event = SDL_WIIU_SYSWM_SWKBD_OK_FINISH_EVENT;
569616
SDL_SendSysWMEvent(&detail::wmMsgFinish);
570-
571-
// WIIU_SWKBD_HideScreenKeyboard(nullptr, nullptr);
572617
}
573618

574619
if (nn::swkbd::IsDecideCancelButton(nullptr)) {
@@ -577,8 +622,6 @@ void WIIU_SWKBD_Calc(void)
577622
detail::wmMsgFinish.subsystem = SDL_SYSWM_WIIU;
578623
detail::wmMsgFinish.msg.wiiu.event = SDL_WIIU_SYSWM_SWKBD_CANCEL_EVENT;
579624
SDL_SendSysWMEvent(&detail::wmMsgFinish);
580-
581-
// WIIU_SWKBD_HideScreenKeyboard(nullptr, nullptr);
582625
}
583626
}
584627

@@ -619,13 +662,19 @@ void WIIU_SWKBD_ShowScreenKeyboard(_THIS, SDL_Window *window)
619662

620663
nn::swkbd::AppearArg &arg = detail::appear::theArg;
621664
arg = nn::swkbd::AppearArg{}; // reset all values to default
665+
622666
// Set language
623667
auto [language, country] = detail::parse_locale(detail::swkbdLocale);
624668
if (auto lang = detail::to_language(language, country))
625669
arg.keyboardArg.configArg.languageType = *lang;
626670
else
627671
arg.keyboardArg.configArg.languageType = detail::get_language_from_system();
628672

673+
// Choose a default layout, this seems necessary to activate the correct dictionary.
674+
arg.keyboardArg.configArg.keyboardLayout =
675+
detail::get_default_layout(detail::create::region.value_or(RegionType::Europe),
676+
arg.keyboardArg.configArg.languageType);
677+
629678
// Set keyboard mode
630679
arg.keyboardArg.configArg.keyboardMode = detail::appear::keyboardMode;
631680

0 commit comments

Comments
 (0)