From 703ec9f89619e0967ae5d8a4307a9f09d3cef6a7 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Thu, 20 Feb 2020 21:14:13 +0300 Subject: [PATCH] overlays: More unicode utilities --- rpcs3/Emu/RSX/Overlays/overlay_controls.h | 7 +++---- .../Emu/RSX/Overlays/overlay_progress_bar.cpp | 13 ------------ rpcs3/Emu/RSX/Overlays/overlay_utils.h | 5 +++++ rpcs3/Emu/RSX/Overlays/overlays.cpp | 20 +++++++++++++++++++ 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/rpcs3/Emu/RSX/Overlays/overlay_controls.h b/rpcs3/Emu/RSX/Overlays/overlay_controls.h index c9e9bdd1c4..19e3bd3bb4 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_controls.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_controls.h @@ -437,9 +437,9 @@ namespace rsx is_compiled = false; } - virtual void set_text(const char* text) + virtual void set_text(const std::wstring& text) { - this->text = utf8_to_wstring(text); + this->text = text; is_compiled = false; } @@ -1003,7 +1003,6 @@ namespace rsx void set_pos(u16 _x, u16 _y) override; void set_size(u16 _w, u16 _h) override; void translate(s16 dx, s16 dy) override; - void set_text(const char* str) override; void set_text(const std::string& str) override; compiled_resource& get_compiled() override; @@ -1061,7 +1060,7 @@ namespace rsx using label::label; void move_caret(direction dir); - void insert_text(const std::string& str); + void insert_text(const std::wstring& str); void erase(); compiled_resource& get_compiled() override; diff --git a/rpcs3/Emu/RSX/Overlays/overlay_progress_bar.cpp b/rpcs3/Emu/RSX/Overlays/overlay_progress_bar.cpp index 7b099501d5..8e83baab52 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_progress_bar.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlay_progress_bar.cpp @@ -58,19 +58,6 @@ namespace rsx set_pos(x + dx, y + dy); } - void progress_bar::set_text(const char* str) - { - text_view.set_text(str); - text_view.align_text(text_align::center); - - u16 text_w, text_h; - text_view.measure_text(text_w, text_h); - text_view.set_size(w, text_h); - - set_pos(text_view.x, text_view.y); - is_compiled = false; - } - void progress_bar::set_text(const std::string& str) { text_view.set_text(str); diff --git a/rpcs3/Emu/RSX/Overlays/overlay_utils.h b/rpcs3/Emu/RSX/Overlays/overlay_utils.h index 304faf4251..481cc2fa8c 100644 --- a/rpcs3/Emu/RSX/Overlays/overlay_utils.h +++ b/rpcs3/Emu/RSX/Overlays/overlay_utils.h @@ -1,4 +1,8 @@ #pragma once +#include "Utilities/types.h" +#include "Utilities/geometry.h" + +#include struct vertex { @@ -152,3 +156,4 @@ std::string utf16_to_ascii8(const std::u16string& utf16_string); std::u16string ascii8_to_utf16(const std::string& ascii_string); std::wstring utf8_to_wstring(const std::string& utf8_string); std::u16string wstring_to_utf16(const std::wstring& w_string); +std::wstring utf16_to_wstring(const std::u16string& utf16_string); diff --git a/rpcs3/Emu/RSX/Overlays/overlays.cpp b/rpcs3/Emu/RSX/Overlays/overlays.cpp index dffa6ee7d9..658bc78bed 100644 --- a/rpcs3/Emu/RSX/Overlays/overlays.cpp +++ b/rpcs3/Emu/RSX/Overlays/overlays.cpp @@ -200,6 +200,26 @@ std::u16string wstring_to_utf16(const std::wstring& w_string) } } +std::wstring utf16_to_wstring(const std::u16string& utf16_string) +{ + if constexpr (sizeof(wchar_t) == sizeof(char16_t)) + { + return reinterpret_cast(utf16_string.data()); + } + else + { + std::wstring result; + result.reserve(utf16_string.size()); + + for (const auto& code : utf16_string) + { + result.push_back(code); + } + + return result; + } +} + namespace rsx { namespace overlays