|
|
|
@ -120,14 +120,27 @@ void SoftwareKeyboard::WriteText(std::optional<std::u16string> text) { |
|
|
|
std::vector<u8> output_sub(SWKBD_OUTPUT_BUFFER_SIZE); |
|
|
|
status = RESULT_SUCCESS; |
|
|
|
|
|
|
|
const u64 size = text->size() * 2 + 8; |
|
|
|
std::memcpy(output_sub.data(), &size, sizeof(u64)); |
|
|
|
std::memcpy(output_sub.data() + 8, text->data(), |
|
|
|
std::min(text->size() * 2, SWKBD_OUTPUT_BUFFER_SIZE - 8)); |
|
|
|
|
|
|
|
output_main[0] = config.text_check; |
|
|
|
std::memcpy(output_main.data() + 4, text->data(), |
|
|
|
std::min(text->size() * 2, SWKBD_OUTPUT_BUFFER_SIZE - 4)); |
|
|
|
if (config.utf_8) { |
|
|
|
const u64 size = text->size() + 8; |
|
|
|
const auto new_text = Common::UTF16ToUTF8(*text); |
|
|
|
|
|
|
|
std::memcpy(output_sub.data(), &size, sizeof(u64)); |
|
|
|
std::memcpy(output_sub.data() + 8, new_text.data(), |
|
|
|
std::min(new_text.size(), SWKBD_OUTPUT_BUFFER_SIZE - 8)); |
|
|
|
|
|
|
|
output_main[0] = config.text_check; |
|
|
|
std::memcpy(output_main.data() + 4, new_text.data(), |
|
|
|
std::min(new_text.size(), SWKBD_OUTPUT_BUFFER_SIZE - 4)); |
|
|
|
} else { |
|
|
|
const u64 size = text->size() * 2 + 8; |
|
|
|
std::memcpy(output_sub.data(), &size, sizeof(u64)); |
|
|
|
std::memcpy(output_sub.data() + 8, text->data(), |
|
|
|
std::min(text->size() * 2, SWKBD_OUTPUT_BUFFER_SIZE - 8)); |
|
|
|
|
|
|
|
output_main[0] = config.text_check; |
|
|
|
std::memcpy(output_main.data() + 4, text->data(), |
|
|
|
std::min(text->size() * 2, SWKBD_OUTPUT_BUFFER_SIZE - 4)); |
|
|
|
} |
|
|
|
|
|
|
|
complete = !config.text_check; |
|
|
|
final_data = output_main; |
|
|
|
|