Merge upstream main into fix/convertkeycode-sdk-layouts

Resolves the debt-entry conflict with #10437 and applies the same layout rules to sceConvertKeycodeGetCharacterFromKeyboardData.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
BunnyFlandClaude Opus 5.5 committed 2026-10-29 11:41:11 +01:00
commit 00bde56c33
31 files changed
+657 -38

No files matched your search

+24
View File
@@ -227,5 +227,29 @@ int main() {
Require(sceConvertKeycodeGetCharacter(key, 0xFFFFFFFFu, layout, &character) == 0 && character == 0);
}
}
KeyboardData keyData{};
keyData.length = 1;
keyData.key_code[0] = 4;
char16_t kbdChar = u'?';
Require(sceConvertKeycodeGetCharacterFromKeyboardData(nullptr, 0, 0, 4, &kbdChar) == static_cast<int>(0x80BC0031u));
Require(sceConvertKeycodeGetCharacterFromKeyboardData(&keyData, 0, 0, 4, nullptr) == static_cast<int>(0x80BC0031u));
for (std::int32_t badIndex : {-1, 1, 16}) {
kbdChar = u'?';
bool rejected = false;
try {
sceConvertKeycodeGetCharacterFromKeyboardData(&keyData, badIndex, 0, 4, &kbdChar);
} catch (const std::runtime_error&) {
rejected = true;
}
Require(rejected && kbdChar == u'?');
}
for (std::uint32_t layout : {31u, 39u}) {
kbdChar = u'?';
Require(sceConvertKeycodeGetCharacterFromKeyboardData(&keyData, 0, 0, layout, &kbdChar) == 0 && kbdChar == u'a');
}
Require(sceConvertKeycodeGetCharacterFromKeyboardData(&keyData, 0, 0, 0, &kbdChar) == static_cast<int>(0x80BC001Du));
Require(sceConvertKeycodeGetCharacterFromKeyboardData(&keyData, 0, 0, 40, &kbdChar) == static_cast<int>(0x80BC001Du));
Require(sceConvertKeycodeGetCharacterFromKeyboardData(&keyData, 0, 0, 4, &kbdChar) == 0 && kbdChar == u'a');
Require(sceConvertKeycodeGetCharacterFromKeyboardData(&keyData, 0, 0x200, 4, &kbdChar) == 0 && kbdChar == u'A');
return 0;
}