From 3d8d265153b687c6e196043cb9b0b886775d2ff3 Mon Sep 17 00:00:00 2001 From: Joel16 Date: Thu, 30 Jul 2020 20:15:40 -0400 Subject: [PATCH] Finalize sceImeDialog implementation --- source/keyboard.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/source/keyboard.cpp b/source/keyboard.cpp index 24897a4..d84e0e8 100644 --- a/source/keyboard.cpp +++ b/source/keyboard.cpp @@ -5,19 +5,25 @@ #include #include "keyboard.h" -#include "log.h" #include "utils.h" +/* + Based off of libkdbvita by usineur -> https://github.com/usineur/libkbdvita/blob/master/kbdvita.c +*/ + namespace Keyboard { static bool running = false; static const int SCE_COMMON_DIALOG_STATUS_CANCELLED = 3; - static uint16_t buffer[SCE_IME_DIALOG_MAX_TEXT_LENGTH + 1]; + static uint16_t buffer[SCE_IME_DIALOG_MAX_TEXT_LENGTH]; std::string text = std::string(); int Init(const std::string &title, const std::string &initial_text) { if (running) return -1; + // Clear our text buffer + text.clear(); + // UTF8 -> UTF16 std::u16string title_u16 = std::wstring_convert, char16_t>{}.from_bytes(title.data()); std::u16string initial_text_u16 = std::wstring_convert, char16_t>{}.from_bytes(initial_text.data()); @@ -36,10 +42,11 @@ namespace Keyboard { param.inputTextBuffer = buffer; int ret = 0; - if (R_SUCCEEDED(ret = sceImeDialogInit(¶m))) - running = true; + if (R_FAILED(ret = sceImeDialogInit(¶m))) + return ret; - return ret; + running = true; + return 0; } SceCommonDialogStatus Update(void) { @@ -71,14 +78,14 @@ namespace Keyboard { return std::string(); bool done = false; - do { glClear(GL_COLOR_BUFFER_BIT); glClearColor(0, 0, 0, 1); - done = true; - - SceCommonDialogStatus ret = Update(); - if (ret != SCE_COMMON_DIALOG_STATUS_CANCELLED) + + SceCommonDialogStatus status = Update(); + if (status == SCE_COMMON_DIALOG_STATUS_FINISHED) + done = true; + else if (status != SCE_COMMON_DIALOG_STATUS_CANCELLED) done = false; vglStopRenderingInit();