mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 08:22:32 +00:00
Some review changes
This commit is contained in:
parent
6b65022bde
commit
dfce461908
@ -152,21 +152,9 @@ public:
|
|||||||
static_assert(sizeof(CString<13>) == sizeof(char[13])); // Ensure size still matches a simple array
|
static_assert(sizeof(CString<13>) == sizeof(char[13])); // Ensure size still matches a simple array
|
||||||
static_assert(std::weakly_incrementable<CString<13>::Iterator>);
|
static_assert(std::weakly_incrementable<CString<13>::Iterator>);
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief A null-terminated wide string with a fixed maximum length
|
|
||||||
* This class is not meant to be used as a general-purpose string class
|
|
||||||
* It is meant to be used as `char[N]` where memory layout is fixed
|
|
||||||
* @tparam N Maximum length of the string
|
|
||||||
*/
|
|
||||||
template <size_t N>
|
template <size_t N>
|
||||||
using CWString = CString<N, wchar_t>;
|
using CWString = CString<N, wchar_t>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief A null-terminated 16-bit char string with a fixed maximum length
|
|
||||||
* This class is not meant to be used as a general-purpose string class
|
|
||||||
* It is meant to be used as `char[N]` where memory layout is fixed
|
|
||||||
* @tparam N Maximum length of the string
|
|
||||||
*/
|
|
||||||
template <size_t N>
|
template <size_t N>
|
||||||
using CU16String = CString<N, char16_t>;
|
using CU16String = CString<N, char16_t>;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
#include <algorithm>
|
#include <array>
|
||||||
#include <magic_enum.hpp>
|
#include <magic_enum.hpp>
|
||||||
#include "common/logging/log.h"
|
#include "common/logging/log.h"
|
||||||
#include "core/libraries/error_codes.h"
|
#include "core/libraries/error_codes.h"
|
||||||
@ -9,8 +9,8 @@
|
|||||||
#include "ime_dialog.h"
|
#include "ime_dialog.h"
|
||||||
#include "ime_dialog_ui.h"
|
#include "ime_dialog_ui.h"
|
||||||
|
|
||||||
static constexpr float MAX_X_POSITIONS[] = {3840.0f, 1920.0f};
|
static constexpr std::array<float, 2> MAX_X_POSITIONS = {3840.0f, 1920.0f};
|
||||||
static constexpr float MAX_Y_POSITIONS[] = {2160.0f, 1080.0f};
|
static constexpr std::array<float, 2> MAX_Y_POSITIONS = {2160.0f, 1080.0f};
|
||||||
|
|
||||||
namespace Libraries::ImeDialog {
|
namespace Libraries::ImeDialog {
|
||||||
|
|
||||||
@ -38,11 +38,6 @@ static bool IsValidOption(OrbisImeDialogOption option, OrbisImeType type) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsMemZero(const void* ptr, size_t size) {
|
|
||||||
return std::all_of(static_cast<const u8*>(ptr), static_cast<const u8*>(ptr) + size,
|
|
||||||
[](u8 c) { return c == 0; });
|
|
||||||
}
|
|
||||||
|
|
||||||
Error PS4_SYSV_ABI sceImeDialogAbort() {
|
Error PS4_SYSV_ABI sceImeDialogAbort() {
|
||||||
if (g_ime_dlg_status == OrbisImeDialogStatus::NONE) {
|
if (g_ime_dlg_status == OrbisImeDialogStatus::NONE) {
|
||||||
LOG_INFO(Lib_ImeDialog, "IME dialog not in use");
|
LOG_INFO(Lib_ImeDialog, "IME dialog not in use");
|
||||||
@ -108,11 +103,6 @@ Error PS4_SYSV_ABI sceImeDialogGetResult(OrbisImeDialogResult* result) {
|
|||||||
return Error::INVALID_ADDRESS;
|
return Error::INVALID_ADDRESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IsMemZero(result->reserved, 12)) {
|
|
||||||
LOG_INFO(Lib_ImeDialog, "Invalid result->reserved");
|
|
||||||
return Error::INVALID_RESERVED;
|
|
||||||
}
|
|
||||||
|
|
||||||
result->endstatus = g_ime_dlg_result.endstatus;
|
result->endstatus = g_ime_dlg_result.endstatus;
|
||||||
|
|
||||||
if (g_ime_dlg_status == OrbisImeDialogStatus::RUNNING) {
|
if (g_ime_dlg_status == OrbisImeDialogStatus::RUNNING) {
|
||||||
@ -179,16 +169,6 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt
|
|||||||
return Error::INVALID_PARAM;
|
return Error::INVALID_PARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param->userId != 1) { // We only support user 1 for now
|
|
||||||
LOG_INFO(Lib_ImeDialog, "Invalid param->userId");
|
|
||||||
return Error::INVALID_USER_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!IsMemZero(param->reserved, 16)) {
|
|
||||||
LOG_INFO(Lib_ImeDialog, "Invalid param->reserved");
|
|
||||||
return Error::INVALID_RESERVED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (param->inputTextBuffer == nullptr) {
|
if (param->inputTextBuffer == nullptr) {
|
||||||
LOG_INFO(Lib_ImeDialog, "Invalid param->inputTextBuffer");
|
LOG_INFO(Lib_ImeDialog, "Invalid param->inputTextBuffer");
|
||||||
return Error::INVALID_INPUT_TEXT_BUFFER;
|
return Error::INVALID_INPUT_TEXT_BUFFER;
|
||||||
@ -202,11 +182,6 @@ Error PS4_SYSV_ABI sceImeDialogInit(OrbisImeDialogParam* param, OrbisImeParamExt
|
|||||||
|
|
||||||
// TODO: do correct extended->option validation
|
// TODO: do correct extended->option validation
|
||||||
|
|
||||||
if (!IsMemZero(extended->reserved, 60)) {
|
|
||||||
LOG_INFO(Lib_ImeDialog, "Invalid extended->reserved");
|
|
||||||
return Error::INVALID_EXTENDED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((extended->extKeyboardMode & 0xe3fffffc) != 0) {
|
if ((extended->extKeyboardMode & 0xe3fffffc) != 0) {
|
||||||
LOG_INFO(Lib_ImeDialog, "Invalid extended->extKeyboardMode");
|
LOG_INFO(Lib_ImeDialog, "Invalid extended->extKeyboardMode");
|
||||||
return Error::INVALID_EXTENDED;
|
return Error::INVALID_EXTENDED;
|
||||||
|
@ -53,16 +53,35 @@ enum class Error : u32 {
|
|||||||
DIALOG_INVALID_TITLE = 0x80bc0101,
|
DIALOG_INVALID_TITLE = 0x80bc0101,
|
||||||
DIALOG_NOT_RUNNING = 0x80bc0105,
|
DIALOG_NOT_RUNNING = 0x80bc0105,
|
||||||
DIALOG_NOT_FINISHED = 0x80bc0106,
|
DIALOG_NOT_FINISHED = 0x80bc0106,
|
||||||
DIALOG_NOT_IN_USE = 0x80bc0107
|
DIALOG_NOT_IN_USE = 0x80bc0107,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class OrbisImeDialogStatus : u32 { NONE = 0, RUNNING = 1, FINISHED = 2 };
|
enum class OrbisImeDialogStatus : u32 {
|
||||||
|
NONE = 0,
|
||||||
|
RUNNING = 1,
|
||||||
|
FINISHED = 2,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImeDialogEndStatus : u32 { OK = 0, USER_CANCELED = 1, ABORTED = 2 };
|
enum class OrbisImeDialogEndStatus : u32 {
|
||||||
|
OK = 0,
|
||||||
|
USER_CANCELED = 1,
|
||||||
|
ABORTED = 2,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImeType : u32 { DEFAULT = 0, BASIC_LATIN = 1, URL = 2, MAIL = 3, NUMBER = 4 };
|
enum class OrbisImeType : u32 {
|
||||||
|
DEFAULT = 0,
|
||||||
|
BASIC_LATIN = 1,
|
||||||
|
URL = 2,
|
||||||
|
MAIL = 3,
|
||||||
|
NUMBER = 4,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImeEnterLabel : u32 { DEFAULT = 0, SEND = 1, SEARCH = 2, GO = 3 };
|
enum class OrbisImeEnterLabel : u32 {
|
||||||
|
DEFAULT = 0,
|
||||||
|
SEND = 1,
|
||||||
|
SEARCH = 2,
|
||||||
|
GO = 3,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImeDialogOption : u32 {
|
enum class OrbisImeDialogOption : u32 {
|
||||||
DEFAULT = 0,
|
DEFAULT = 0,
|
||||||
@ -70,18 +89,33 @@ enum class OrbisImeDialogOption : u32 {
|
|||||||
NO_AUTO_CORRECTION = 2,
|
NO_AUTO_CORRECTION = 2,
|
||||||
NO_AUTO_COMPLETION = 4,
|
NO_AUTO_COMPLETION = 4,
|
||||||
// TODO: Document missing options
|
// TODO: Document missing options
|
||||||
LARGE_RESOLUTION = 1024
|
LARGE_RESOLUTION = 1024,
|
||||||
};
|
};
|
||||||
|
|
||||||
DECLARE_ENUM_FLAG_OPERATORS(OrbisImeDialogOption)
|
DECLARE_ENUM_FLAG_OPERATORS(OrbisImeDialogOption)
|
||||||
|
|
||||||
enum class OrbisImeInputMethod : u32 { DEFAULT = 0 };
|
enum class OrbisImeInputMethod : u32 {
|
||||||
|
DEFAULT = 0,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImeHorizontalAlignment : u32 { LEFT = 0, CENTER = 1, RIGHT = 2 };
|
enum class OrbisImeHorizontalAlignment : u32 {
|
||||||
|
LEFT = 0,
|
||||||
|
CENTER = 1,
|
||||||
|
RIGHT = 2,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImeVerticalAlignment : u32 { TOP = 0, CENTER = 1, BOTTOM = 2 };
|
enum class OrbisImeVerticalAlignment : u32 {
|
||||||
|
TOP = 0,
|
||||||
|
CENTER = 1,
|
||||||
|
BOTTOM = 2,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImePanelPriority : u32 { DEFAULT = 0, ALPHABET = 1, SYMBOL = 2, ACCENT = 3 };
|
enum class OrbisImePanelPriority : u32 {
|
||||||
|
DEFAULT = 0,
|
||||||
|
ALPHABET = 1,
|
||||||
|
SYMBOL = 2,
|
||||||
|
ACCENT = 3,
|
||||||
|
};
|
||||||
|
|
||||||
enum class OrbisImeKeyboardType : u32 {
|
enum class OrbisImeKeyboardType : u32 {
|
||||||
NONE = 0,
|
NONE = 0,
|
||||||
@ -121,7 +155,7 @@ enum class OrbisImeKeyboardType : u32 {
|
|||||||
INDONESIAN = 34,
|
INDONESIAN = 34,
|
||||||
VIETNAMESE = 35,
|
VIETNAMESE = 35,
|
||||||
ROMANIAN = 36,
|
ROMANIAN = 36,
|
||||||
HUNGARIAN = 37
|
HUNGARIAN = 37,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct OrbisImeColor {
|
struct OrbisImeColor {
|
||||||
|
Loading…
Reference in New Issue
Block a user