mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-05 22:41:25 +12:00
overlays/osk: Migrate to multibyte encoding
This commit is contained in:
parent
703ec9f896
commit
cb2129c7e4
3 changed files with 70 additions and 72 deletions
|
@ -34,22 +34,22 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void edit_text::insert_text(const std::string& str)
|
void edit_text::insert_text(const std::wstring& str)
|
||||||
{
|
{
|
||||||
if (caret_position == 0)
|
if (caret_position == 0)
|
||||||
{
|
{
|
||||||
// Start
|
// Start
|
||||||
text = utf8_to_wstring(str) + text;
|
text = str + text;
|
||||||
}
|
}
|
||||||
else if (caret_position == text.length())
|
else if (caret_position == text.length())
|
||||||
{
|
{
|
||||||
// End
|
// End
|
||||||
text += utf8_to_wstring(str);
|
text += str;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Middle
|
// Middle
|
||||||
text.insert(caret_position, utf8_to_wstring(str));
|
text.insert(caret_position, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
caret_position += ::narrow<u16>(str.length());
|
caret_position += ::narrow<u16>(str.length());
|
||||||
|
|
|
@ -29,7 +29,7 @@ namespace rsx
|
||||||
fade_animation.active = true;
|
fade_animation.active = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::initialize_layout(const std::vector<grid_entry_ctor>& layout, const std::string& title, const std::string& initial_text)
|
void osk_dialog::initialize_layout(const std::vector<grid_entry_ctor>& layout, const std::wstring& title, const std::wstring& initial_text)
|
||||||
{
|
{
|
||||||
const u32 cell_count = num_rows * num_columns;
|
const u32 cell_count = num_rows * num_columns;
|
||||||
|
|
||||||
|
@ -370,7 +370,7 @@ namespace rsx
|
||||||
}
|
}
|
||||||
case pad_button::select:
|
case pad_button::select:
|
||||||
{
|
{
|
||||||
on_shift("");
|
on_shift(L"");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pad_button::start:
|
case pad_button::start:
|
||||||
|
@ -380,12 +380,12 @@ namespace rsx
|
||||||
}
|
}
|
||||||
case pad_button::triangle:
|
case pad_button::triangle:
|
||||||
{
|
{
|
||||||
on_space("");
|
on_space(L"");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pad_button::square:
|
case pad_button::square:
|
||||||
{
|
{
|
||||||
on_backspace("");
|
on_backspace(L"");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case pad_button::cross:
|
case pad_button::cross:
|
||||||
|
@ -417,7 +417,7 @@ namespace rsx
|
||||||
m_update = true;
|
m_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::on_default_callback(const std::string& str)
|
void osk_dialog::on_default_callback(const std::wstring& str)
|
||||||
{
|
{
|
||||||
// Append to output text
|
// Append to output text
|
||||||
if (m_preview.text == L"[Enter Text]")
|
if (m_preview.text == L"[Enter Text]")
|
||||||
|
@ -433,7 +433,7 @@ namespace rsx
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto new_str = m_preview.text + utf8_to_wstring(str);
|
auto new_str = m_preview.text + str;
|
||||||
if (new_str.length() <= char_limit)
|
if (new_str.length() <= char_limit)
|
||||||
{
|
{
|
||||||
m_preview.insert_text(str);
|
m_preview.insert_text(str);
|
||||||
|
@ -443,17 +443,17 @@ namespace rsx
|
||||||
on_text_changed();
|
on_text_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::on_shift(const std::string&)
|
void osk_dialog::on_shift(const std::wstring&)
|
||||||
{
|
{
|
||||||
selected_z = (selected_z + 1) % num_layers;
|
selected_z = (selected_z + 1) % num_layers;
|
||||||
m_update = true;
|
m_update = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::on_space(const std::string&)
|
void osk_dialog::on_space(const std::wstring&)
|
||||||
{
|
{
|
||||||
if (!(flags & CELL_OSKDIALOG_NO_SPACE))
|
if (!(flags & CELL_OSKDIALOG_NO_SPACE))
|
||||||
{
|
{
|
||||||
on_default_callback(" ");
|
on_default_callback(L" ");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -461,7 +461,7 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::on_backspace(const std::string&)
|
void osk_dialog::on_backspace(const std::wstring&)
|
||||||
{
|
{
|
||||||
if (m_preview.text.empty())
|
if (m_preview.text.empty())
|
||||||
{
|
{
|
||||||
|
@ -472,11 +472,11 @@ namespace rsx
|
||||||
on_text_changed();
|
on_text_changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
void osk_dialog::on_enter(const std::string&)
|
void osk_dialog::on_enter(const std::wstring&)
|
||||||
{
|
{
|
||||||
if (!(flags & CELL_OSKDIALOG_NO_RETURN))
|
if (!(flags & CELL_OSKDIALOG_NO_RETURN))
|
||||||
{
|
{
|
||||||
on_default_callback("\n");
|
on_default_callback(L"\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -617,59 +617,57 @@ namespace rsx
|
||||||
std::vector<osk_dialog::grid_entry_ctor> layout =
|
std::vector<osk_dialog::grid_entry_ctor> layout =
|
||||||
{
|
{
|
||||||
// Alphanumeric
|
// Alphanumeric
|
||||||
{{"1", "!"}, default_bg, 1},
|
{{L"1", L"!"}, default_bg, 1},
|
||||||
{{"2", "@"}, default_bg, 1},
|
{{L"2", L"@"}, default_bg, 1},
|
||||||
{{"3", "#"}, default_bg, 1},
|
{{L"3", L"#"}, default_bg, 1},
|
||||||
{{"4", "$"}, default_bg, 1},
|
{{L"4", L"$"}, default_bg, 1},
|
||||||
{{"5", "%"}, default_bg, 1},
|
{{L"5", L"%"}, default_bg, 1},
|
||||||
{{"6", "^"}, default_bg, 1},
|
{{L"6", L"^"}, default_bg, 1},
|
||||||
{{"7", "&"}, default_bg, 1},
|
{{L"7", L"&"}, default_bg, 1},
|
||||||
{{"8", "*"}, default_bg, 1},
|
{{L"8", L"*"}, default_bg, 1},
|
||||||
{{"9", "("}, default_bg, 1},
|
{{L"9", L"("}, default_bg, 1},
|
||||||
{{"0", ")"}, default_bg, 1},
|
{{L"0", L")"}, default_bg, 1},
|
||||||
|
|
||||||
// Alpha
|
// Alpha
|
||||||
{{"q", "Q"}, default_bg, 1},
|
{{L"q", L"Q"}, default_bg, 1},
|
||||||
{{"w", "W"}, default_bg, 1},
|
{{L"w", L"W"}, default_bg, 1},
|
||||||
{{"e", "E"}, default_bg, 1},
|
{{L"e", L"E"}, default_bg, 1},
|
||||||
{{"r", "R"}, default_bg, 1},
|
{{L"r", L"R"}, default_bg, 1},
|
||||||
{{"t", "T"}, default_bg, 1},
|
{{L"t", L"T"}, default_bg, 1},
|
||||||
{{"y", "Y"}, default_bg, 1},
|
{{L"y", L"Y"}, default_bg, 1},
|
||||||
{{"u", "U"}, default_bg, 1},
|
{{L"u", L"U"}, default_bg, 1},
|
||||||
{{"i", "I"}, default_bg, 1},
|
{{L"i", L"I"}, default_bg, 1},
|
||||||
{{"o", "O"}, default_bg, 1},
|
{{L"o", L"O"}, default_bg, 1},
|
||||||
{{"p", "P"}, default_bg, 1},
|
{{L"p", L"P"}, default_bg, 1},
|
||||||
{{"a", "A"}, default_bg, 1},
|
{{L"a", L"A"}, default_bg, 1},
|
||||||
{{"s", "S"}, default_bg, 1},
|
{{L"s", L"S"}, default_bg, 1},
|
||||||
{{"d", "D"}, default_bg, 1},
|
{{L"d", L"D"}, default_bg, 1},
|
||||||
{{"f", "F"}, default_bg, 1},
|
{{L"f", L"F"}, default_bg, 1},
|
||||||
{{"g", "G"}, default_bg, 1},
|
{{L"g", L"G"}, default_bg, 1},
|
||||||
{{"h", "H"}, default_bg, 1},
|
{{L"h", L"H"}, default_bg, 1},
|
||||||
{{"j", "J"}, default_bg, 1},
|
{{L"j", L"J"}, default_bg, 1},
|
||||||
{{"k", "K"}, default_bg, 1},
|
{{L"k", L"K"}, default_bg, 1},
|
||||||
{{"l", "L"}, default_bg, 1},
|
{{L"l", L"L"}, default_bg, 1},
|
||||||
{{"'", "\""}, default_bg, 1},
|
{{L"'", L"\""}, default_bg, 1},
|
||||||
{{"z", "Z"}, default_bg, 1},
|
{{L"z", L"Z"}, default_bg, 1},
|
||||||
{{"x", "X"}, default_bg, 1},
|
{{L"x", L"X"}, default_bg, 1},
|
||||||
{{"c", "C"}, default_bg, 1},
|
{{L"c", L"C"}, default_bg, 1},
|
||||||
{{"v", "V"}, default_bg, 1},
|
{{L"v", L"V"}, default_bg, 1},
|
||||||
{{"b", "B"}, default_bg, 1},
|
{{L"b", L"B"}, default_bg, 1},
|
||||||
{{"n", "N"}, default_bg, 1},
|
{{L"n", L"N"}, default_bg, 1},
|
||||||
{{"m", "M"}, default_bg, 1},
|
{{L"m", L"M"}, default_bg, 1},
|
||||||
{{"-", "_"}, default_bg, 1},
|
{{L"-", L"_"}, default_bg, 1},
|
||||||
{{"+", "="}, default_bg, 1},
|
{{L"+", L"="}, default_bg, 1},
|
||||||
{{",", "?"}, default_bg, 1},
|
{{L",", L"?"}, default_bg, 1},
|
||||||
|
|
||||||
// Special
|
// Special
|
||||||
{{"Shift"}, special2_bg, 2, button_flags::_default, shift_callback },
|
{{L"Shift"}, special2_bg, 2, button_flags::_default, shift_callback },
|
||||||
{{"Space"}, special_bg, 4, button_flags::_space, space_callback },
|
{{L"Space"}, special_bg, 4, button_flags::_space, space_callback },
|
||||||
{{"Backspace"}, special_bg, 2, button_flags::_default, delete_callback },
|
{{L"Backspace"}, special_bg, 2, button_flags::_default, delete_callback },
|
||||||
{{"Enter"}, special2_bg, 2, button_flags::_return, enter_callback },
|
{{L"Enter"}, special2_bg, 2, button_flags::_return, enter_callback },
|
||||||
};
|
};
|
||||||
|
|
||||||
// Narrow to utf-8 as native does not have support for non-ascii glyphs
|
initialize_layout(layout, utf16_to_wstring(message), utf16_to_wstring(init_text));
|
||||||
// TODO: Full multibyte string support in all of rsx::overlays (kd-11)
|
|
||||||
initialize_layout(layout, utf16_to_ascii8(message), utf16_to_ascii8(init_text));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -333,7 +333,7 @@ namespace rsx
|
||||||
|
|
||||||
struct osk_dialog : public user_interface, public OskDialogBase
|
struct osk_dialog : public user_interface, public OskDialogBase
|
||||||
{
|
{
|
||||||
using callback_t = std::function<void(const std::string&)>;
|
using callback_t = std::function<void(const std::wstring&)>;
|
||||||
|
|
||||||
enum border_flags
|
enum border_flags
|
||||||
{
|
{
|
||||||
|
@ -363,13 +363,13 @@ namespace rsx
|
||||||
bool selected = false;
|
bool selected = false;
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
|
|
||||||
std::vector<std::string> outputs;
|
std::vector<std::wstring> outputs;
|
||||||
callback_t callback;
|
callback_t callback;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct grid_entry_ctor
|
struct grid_entry_ctor
|
||||||
{
|
{
|
||||||
std::vector<std::string> outputs;
|
std::vector<std::wstring> outputs;
|
||||||
color4f color;
|
color4f color;
|
||||||
u32 num_cell_hz;
|
u32 num_cell_hz;
|
||||||
button_flags type_flags;
|
button_flags type_flags;
|
||||||
|
@ -415,17 +415,17 @@ namespace rsx
|
||||||
void Create(const std::string& title, const std::u16string& message, char16_t* init_text, u32 charlimit, u32 options) override = 0;
|
void Create(const std::string& title, const std::u16string& message, char16_t* init_text, u32 charlimit, u32 options) override = 0;
|
||||||
void Close(bool ok) override;
|
void Close(bool ok) override;
|
||||||
|
|
||||||
void initialize_layout(const std::vector<grid_entry_ctor>& layout, const std::string& title, const std::string& initial_text);
|
void initialize_layout(const std::vector<grid_entry_ctor>& layout, const std::wstring& title, const std::wstring& initial_text);
|
||||||
void update() override;
|
void update() override;
|
||||||
|
|
||||||
void on_button_pressed(pad_button button_press) override;
|
void on_button_pressed(pad_button button_press) override;
|
||||||
void on_text_changed();
|
void on_text_changed();
|
||||||
|
|
||||||
void on_default_callback(const std::string&);
|
void on_default_callback(const std::wstring&);
|
||||||
void on_shift(const std::string&);
|
void on_shift(const std::wstring&);
|
||||||
void on_space(const std::string&);
|
void on_space(const std::wstring&);
|
||||||
void on_backspace(const std::string&);
|
void on_backspace(const std::wstring&);
|
||||||
void on_enter(const std::string&);
|
void on_enter(const std::wstring&);
|
||||||
|
|
||||||
compiled_resource get_compiled() override;
|
compiled_resource get_compiled() override;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue