Browse Source

Use string_view for vita keyboard input

pull/4209/head
ephphatha 4 years ago committed by Anders Jenbo
parent
commit
19478b9aea
  1. 18
      Source/platform/vita/keyboard.cpp
  2. 4
      Source/platform/vita/keyboard.h

18
Source/platform/vita/keyboard.cpp

@ -30,13 +30,19 @@ static void utf16_to_utf8(const uint16_t *src, uint8_t *dst)
*dst = '\0';
}
static void utf8_to_utf16(const uint8_t *src, uint16_t *dst)
static void utf8_to_utf16(const uint8_t *src, size_t src_size, uint16_t *dst)
{
for (int i = 0; src[i];) {
for (size_t i = 0; i < src_size && src[i];) {
if ((src[i] & 0xE0) == 0xE0) {
if (i + 2 >= src_size) {
break;
}
*(dst++) = ((src[i] & 0x0F) << 12) | ((src[i + 1] & 0x3F) << 6) | (src[i + 2] & 0x3F);
i += 3;
} else if ((src[i] & 0xC0) == 0xC0) {
if (i + 1 >= src_size) {
break;
}
*(dst++) = ((src[i] & 0x1F) << 6) | (src[i + 1] & 0x3F);
i += 2;
} else {
@ -76,7 +82,7 @@ static int vita_input_thread(void *ime_buffer)
return 0;
}
static int vita_keyboard_get(const char *guide_text, const char *initial_text, int max_len, SceWChar16 *buf)
static int vita_keyboard_get(devilution::string_view guide_text, devilution::string_view initial_text, unsigned max_len, SceWChar16 *buf)
{
SceWChar16 title[SCE_IME_DIALOG_MAX_TITLE_LENGTH];
SceWChar16 text[SCE_IME_DIALOG_MAX_TEXT_LENGTH];
@ -84,8 +90,8 @@ static int vita_keyboard_get(const char *guide_text, const char *initial_text, i
SDL_memset(&title, 0, sizeof(title));
SDL_memset(&text, 0, sizeof(text));
utf8_to_utf16((const uint8_t *)guide_text, title);
utf8_to_utf16((const uint8_t *)initial_text, text);
utf8_to_utf16(reinterpret_cast<const uint8_t *>(guide_text.data()), guide_text.size(), title);
utf8_to_utf16(reinterpret_cast<const uint8_t *>(initial_text.data()), initial_text.size(), text);
SceImeDialogParam param;
sceImeDialogParamInit(&param);
@ -109,7 +115,7 @@ static int vita_keyboard_get(const char *guide_text, const char *initial_text, i
return 1;
}
void vita_start_text_input(const char *guide_text, const char *initial_text, int max_length)
void vita_start_text_input(devilution::string_view guide_text, devilution::string_view initial_text, unsigned max_length)
{
SceWChar16 ime_buffer[SCE_IME_DIALOG_MAX_TEXT_LENGTH];
if (vita_keyboard_get(guide_text, initial_text, max_length, ime_buffer)) {

4
Source/platform/vita/keyboard.h

@ -1,3 +1,5 @@
#pragma once
void vita_start_text_input(const char *guide_text, const char *initial_text, int max_length);
#include "utils/stdcompat/string_view.hpp"
void vita_start_text_input(devilution::string_view guide_text, devilution::string_view initial_text, unsigned max_length);

Loading…
Cancel
Save