diff options
Diffstat (limited to 'include')
31 files changed, 66 insertions, 700 deletions
diff --git a/include/cru/base/Base.h b/include/cru/base/Base.h index 369dd5c3..28983469 100644 --- a/include/cru/base/Base.h +++ b/include/cru/base/Base.h @@ -16,9 +16,6 @@ #define CRU_UNUSED(entity) static_cast<void>(entity); -#define CRU__CONCAT(a, b) a##b -#define CRU_MAKE_UNICODE_LITERAL(str) CRU__CONCAT(u, #str) - #define CRU_DEFAULT_COPY(classname) \ classname(const classname&) = default; \ classname& operator=(const classname&) = default; diff --git a/include/cru/base/Format.h b/include/cru/base/Format.h deleted file mode 100644 index 4f56d189..00000000 --- a/include/cru/base/Format.h +++ /dev/null @@ -1,173 +0,0 @@ -#pragma once - -#include "Exception.h" -#include "String.h" - -#include <cassert> -#include <cstdio> -#include <format> -#include <type_traits> -#include <vector> - -namespace cru { -inline String ToString(bool value) { - return value ? String(u"true") : String(u"false"); -} - -template <typename T> -inline constexpr std::nullptr_t kPrintfFormatSpecifierOfType = nullptr; - -#define CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(type, specifier) \ - template <> \ - inline constexpr const char* kPrintfFormatSpecifierOfType<type> = specifier; - -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(signed char, "%c") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(unsigned char, "%c") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(signed short, "%hd") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(unsigned short, "%hu") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(signed int, "%d") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(unsigned int, "%u") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(signed long, "%ld") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(unsigned long, "%lu") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(signed long long, "%lld") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(unsigned long long, "%llu") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(float, "%f") -CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE(double, "%f") - -#undef CRU_DEFINE_PRINTF_FORMAT_SPECIFIER_OF_TYPE - -template <typename T> -std::enable_if_t< - !std::is_null_pointer_v<decltype(kPrintfFormatSpecifierOfType<T>)>, String> -ToString(T value) { - auto size = std::snprintf(nullptr, 0, kPrintfFormatSpecifierOfType<T>, value); - assert(size > 0); - std::vector<char> buffer(size + 1); - size = std::snprintf(buffer.data(), size + 1, kPrintfFormatSpecifierOfType<T>, - value); - assert(size > 0); - return String::FromUtf8(buffer.data(), size); -} - -template <typename T> -String ToString(const T& value, StringView option) { - CRU_UNUSED(option) - return ToString(value); -} - -inline String ToString(String value) { return value; } - -namespace details { -enum class FormatTokenType { PlaceHolder, Text }; -enum class FormatPlaceHolderType { None, Positioned, Named }; - -struct FormatToken { - static FormatToken Text() { - return FormatToken{FormatTokenType::Text, {}, {}, 0, {}, {}}; - } - - static FormatToken NonePlaceHolder(String option) { - return FormatToken(FormatTokenType::PlaceHolder, {}, - FormatPlaceHolderType::None, 0, {}, std::move(option)); - } - - static FormatToken PositionedPlaceHolder(int position, String option) { - return FormatToken(FormatTokenType::PlaceHolder, {}, - FormatPlaceHolderType::Positioned, position, {}, - std::move(option)); - } - - static FormatToken NamedPlaceHolder(String name, String option) { - return FormatToken(FormatTokenType::PlaceHolder, {}, - FormatPlaceHolderType::Named, 0, std::move(name), - std::move(option)); - } - - FormatToken(FormatTokenType type, String data, - FormatPlaceHolderType place_holder_type, - int place_holder_position, String place_holder_name, - String place_holder_option) - : type(type), - data(std::move(data)), - place_holder_type(place_holder_type), - place_holder_position(place_holder_position), - place_holder_name(std::move(place_holder_name)), - place_holder_option(std::move(place_holder_option)) {} - - CRU_DEFAULT_COPY(FormatToken) - CRU_DEFAULT_MOVE(FormatToken) - - CRU_DEFAULT_DESTRUCTOR(FormatToken) - - FormatTokenType type; - String data; - FormatPlaceHolderType place_holder_type; - int place_holder_position; - String place_holder_name; - String place_holder_option; -}; - -std::vector<FormatToken> CRU_BASE_API ParseToFormatTokenList(StringView str); - -void CRU_BASE_API FormatAppendFromFormatTokenList( - String& current, const std::vector<FormatToken>& format_token_list, - Index index); - -template <typename TA, typename... T> -void FormatAppendFromFormatTokenList( - String& current, const std::vector<FormatToken>& format_token_list, - Index index, TA&& args0, T&&... args) { - for (Index i = index; i < static_cast<Index>(format_token_list.size()); i++) { - const auto& token = format_token_list[i]; - if (token.type == FormatTokenType::PlaceHolder) { - if (token.place_holder_type == FormatPlaceHolderType::None) { - current += ToString(std::forward<TA>(args0), token.place_holder_option); - FormatAppendFromFormatTokenList(current, format_token_list, i + 1, - std::forward<T>(args)...); - - return; - } else { - throw Exception( - "Currently do not support positional or named place holder."); - } - } else { - current += token.data; - } - } -} -} // namespace details - -template <typename... T> -String Format(StringView format, T&&... args) { - String result; - - details::FormatAppendFromFormatTokenList( - result, details::ParseToFormatTokenList(format), 0, - std::forward<T>(args)...); - - return result; -} - -template <typename... T> -String String::Format(T&&... args) const { - return cru::Format(*this, std::forward<T>(args)...); -} - -template <typename T> -struct ImplementFormatterByToUtf8String { - template <class ParseContext> - constexpr ParseContext::iterator parse(ParseContext& ctx) const { - auto iter = ctx.begin(); - if (*iter != '}') { - throw std::format_error( - "ImplementFormatterByToUtf8String does not accept format args."); - } - return iter; - } - - template <class FmtContext> - FmtContext::iterator format(const T& object, FmtContext& ctx) const { - return std::ranges::copy(ToUtf8String(object), ctx.out()).out; - } -}; -} // namespace cru diff --git a/include/cru/base/String.h b/include/cru/base/String.h deleted file mode 100644 index 313a3ce2..00000000 --- a/include/cru/base/String.h +++ /dev/null @@ -1,442 +0,0 @@ -#pragma once -#include "Base.h" - -#include "Buffer.h" -#include "Range.h" -#include "StringUtil.h" - -#include <filesystem> -#include <initializer_list> -#include <iterator> -#include <string> -#include <string_view> -#include <vector> - -namespace cru { -class StringView; - -class CRU_BASE_API String { - public: - using value_type = char16_t; - using size_type = Index; - using difference_type = Index; - using reference = value_type&; - using const_reference = const value_type&; - using pointer = value_type*; - using const_pointer = const value_type*; - using iterator = value_type*; - using const_iterator = const value_type*; - using reverse_iterator = std::reverse_iterator<iterator>; - using const_reverse_iterator = std::reverse_iterator<const_iterator>; - - public: - static String FromUtf8(const char* str); - static String FromUtf8(const char* str, Index size); - static String FromUtf8(const std::byte* str, Index size); - static String FromUtf8(std::string_view str) { - return FromUtf8(str.data(), str.size()); - } - static String FromUtf8(const Buffer& buffer); - - static String FromUtf16(const char16_t* str) { return String(str); } - static String FromUtf16(const char16_t* str, Index size) { - return String(str, size); - } - static String FromUtf16(std::u16string_view str) { - return FromUtf16(str.data(), str.size()); - } - - static inline String From(StringView str); - - // Never use this if you don't know what this mean! - static String FromBuffer(pointer buffer, Index size, Index capacity) { - return String{from_buffer_tag{}, buffer, size, capacity}; - } - - static String FromStdPath(const std::filesystem::path& path); - -#ifdef CRU_PLATFORM_WINDOWS - static String FromUtf16(wchar_t* str) { return String(str); } - static String FromUtf16(wchar_t* str, Index size) { - return String(str, size); - } -#endif - - public: - String(); - - String(const_pointer str); - String(const_pointer str, size_type size); - - template <Index size> - String(const char16_t (&str)[size]) - : String(reinterpret_cast<const_pointer>(str), size - 1) {} - - template <typename Iter> - String(Iter start, Iter end): String() { - for (; start != end; start++) { - append(*start); - } - } - - String(size_type size, value_type ch = 0); - - String(std::initializer_list<value_type> l); - - explicit String(StringView str); - -#ifdef CRU_PLATFORM_WINDOWS - String(const wchar_t* str); - String(const wchar_t* str, Index size); - String(const std::wstring& str) : String(str.data(), str.size()) {} -#endif - - String(const String& other); - String(String&& other) noexcept; - - String& operator=(const String& other); - String& operator=(String&& other) noexcept; - - ~String(); - - private: - struct from_buffer_tag {}; - String(from_buffer_tag, pointer buffer, Index size, Index capacity); - - public: - bool empty() const { return this->size_ == 0; } - Index size() const { return this->size_; } - Index length() const { return this->size(); } - Index capacity() const { return this->capacity_; } - pointer data() { return this->buffer_; } - const_pointer data() const { return this->buffer_; } - - void resize(Index new_size); - void reserve(Index new_capacity); - void shrink_to_fit(); - - reference front() { return this->operator[](0); } - const_reference front() const { return this->operator[](0); } - - reference back() { return this->operator[](size_ - 1); } - const_reference back() const { return this->operator[](size_ - 1); } - - const_pointer c_str() const { return buffer_; } - - reference operator[](Index index) { return buffer_[index]; } - const_reference operator[](Index index) const { return buffer_[index]; } - - public: - iterator begin() { return this->buffer_; } - const_iterator begin() const { return this->buffer_; } - const_iterator cbegin() const { return this->buffer_; } - - iterator end() { return this->buffer_ + this->size_; } - const_iterator end() const { return this->buffer_ + this->size_; } - const_iterator cend() const { return this->buffer_ + this->size_; } - - reverse_iterator rbegin() { return reverse_iterator{end()}; } - const_reverse_iterator rbegin() const { - return const_reverse_iterator{end()}; - } - const_reverse_iterator crbegin() const { - return const_reverse_iterator{cend()}; - } - - reverse_iterator rend() { return reverse_iterator{begin()}; } - const_reverse_iterator rend() const { - return const_reverse_iterator{begin()}; - } - const_reverse_iterator crend() const { - return const_reverse_iterator{cbegin()}; - } - - public: - void clear(); - iterator insert(const_iterator pos, value_type value) { - return this->insert(pos, &value, 1); - } - iterator insert(const_iterator pos, const_iterator str, Index size); - iterator insert(const_iterator pos, StringView str); - iterator erase(const_iterator pos) { return this->erase(pos, pos + 1); } - iterator erase(const_iterator start, const_iterator end); - void push_back(value_type value) { this->append(value); } - void pop_back() { this->erase(cend() - 1); } - void append(value_type value) { this->insert(cend(), value); } - void append(const_iterator str, Index size) { - this->insert(cend(), str, size); - } - inline void append(StringView str); - - String substr(size_type start, size_type size = -1) const { - if (size == -1) { - size = this->size_ - start; - } - return String(this->buffer_ + start, size); - } - - String& operator+=(value_type value) { - this->append(value); - return *this; - } - String& operator+=(StringView other); - - public: - operator std::u16string_view() const { - return std::u16string_view(data(), size()); - } - - StringView View() const; - - public: - Index Find(value_type value, Index start = 0) const; - std::vector<String> Split(value_type separator, - bool remove_space_line = false) const; - std::vector<String> SplitToLines(bool remove_space_line = false) const; - - bool StartWith(StringView str) const; - bool EndWith(StringView str) const; - - String& TrimStart(); - String& TrimEnd(); - String& Trim(); - - public: - void AppendCodePoint(CodePoint code_point); - - Utf16CodePointIterator CodePointIterator() const { - return Utf16CodePointIterator(buffer_, size_); - } - - Index IndexFromCodeUnitToCodePoint(Index code_unit_index) const; - Index IndexFromCodePointToCodeUnit(Index code_point_index) const; - Range RangeFromCodeUnitToCodePoint(Range code_unit_range) const; - Range RangeFromCodePointToCodeUnit(Range code_point_range) const; - -#ifdef CRU_PLATFORM_WINDOWS - const wchar_t* WinCStr() const { - return reinterpret_cast<const wchar_t*>(c_str()); - } -#endif - - template <typename... T> - String Format(T&&... args) const; - - std::string ToUtf8() const; - Buffer ToUtf8Buffer(bool end_zero = true) const; - - int Compare(const String& other) const; - int CaseInsensitiveCompare(const String& other) const; - bool CaseInsensitiveEqual(const String& other) const { - return CaseInsensitiveCompare(other) == 0; - } - - private: - char16_t* buffer_; - Index size_; // not including trailing '\0' - Index capacity_; // always 1 smaller than real buffer size -}; -CRU_BASE_API -std::ostream& operator<<(std::ostream& os, const String& value); - -class CRU_BASE_API StringView { - public: - using value_type = char16_t; - using size_type = Index; - using difference_type = Index; - using reference = value_type&; - using const_reference = const value_type&; - using pointer = value_type*; - using const_pointer = const value_type*; - using iterator = const value_type*; - using const_iterator = const value_type*; - using reverse_iterator = std::reverse_iterator<iterator>; - using const_reverse_iterator = std::reverse_iterator<const_iterator>; - - StringView() = default; - - constexpr StringView(const_pointer ptr, Index size) - : ptr_(ptr), size_(size) {} - - template <Index size> - constexpr StringView(const value_type (&array)[size]) - : StringView(array, size - 1) {} - - StringView(const String& str) : StringView(str.data(), str.size()) {} - - CRU_DEFAULT_COPY(StringView) - CRU_DEFAULT_MOVE(StringView) - - ~StringView() = default; - - bool empty() const { return size_ == 0; } - Index size() const { return size_; } - const value_type* data() const { return ptr_; } - - public: - iterator begin() { return this->ptr_; } - const_iterator begin() const { return this->ptr_; } - const_iterator cbegin() const { return this->ptr_; } - - iterator end() { return this->ptr_ + this->size_; } - const_iterator end() const { return this->ptr_ + this->size_; } - const_iterator cend() const { return this->ptr_ + this->size_; } - - reverse_iterator rbegin() { return reverse_iterator{end()}; } - const_reverse_iterator rbegin() const { - return const_reverse_iterator{end()}; - } - const_reverse_iterator crbegin() const { - return const_reverse_iterator{cend()}; - } - - reverse_iterator rend() { return reverse_iterator{begin()}; } - const_reverse_iterator rend() const { - return const_reverse_iterator{begin()}; - } - const_reverse_iterator crend() const { - return const_reverse_iterator{cbegin()}; - } - - StringView substr(Index pos); - StringView substr(Index pos, Index size); - - value_type operator[](Index index) const { return ptr_[index]; } - - operator std::u16string_view() const { - return std::u16string_view(data(), size()); - } - - public: - int Compare(const StringView& other) const; - int CaseInsensitiveCompare(const StringView& other) const; - bool CaseInsensitiveEqual(const StringView& other) const { - return CaseInsensitiveCompare(other) == 0; - } - - String ToString() const { return String(ptr_, size_); } - - Utf16CodePointIterator CodePointIterator() const { - return Utf16CodePointIterator(ptr_, size_); - } - - Index Find(value_type value, Index start = 0) const; - std::vector<String> Split(value_type separator, - bool remove_space_line = false) const; - std::vector<String> SplitToLines(bool remove_space_line = false) const; - - bool StartWith(StringView str) const; - bool EndWith(StringView str) const; - - Index IndexFromCodeUnitToCodePoint(Index code_unit_index) const; - Index IndexFromCodePointToCodeUnit(Index code_point_index) const; - Range RangeFromCodeUnitToCodePoint(Range code_unit_range) const; - Range RangeFromCodePointToCodeUnit(Range code_point_range) const; - - std::string ToUtf8() const; - Buffer ToUtf8Buffer(bool end_zero = true) const; - - private: - const char16_t* ptr_; - Index size_; -}; - -CRU_DEFINE_COMPARE_OPERATORS(String) - -inline String operator+(const String& left, const String& right) { - String result; - result += left; - result += right; - return result; -} - -inline String operator+(String::value_type left, const String& right) { - String result; - result += left; - result += right; - return result; -} - -inline String operator+(const String& left, String::value_type right) { - String result; - result += left; - result += right; - return result; -} - -CRU_DEFINE_COMPARE_OPERATORS(StringView) - -inline String::iterator String::insert(const_iterator pos, StringView str) { - return insert(pos, str.data(), str.size()); -} - -inline void String::append(StringView str) { - this->append(str.data(), str.size()); -} - -inline String String::From(StringView str) { return str.ToString(); } - -inline String::String(StringView str) : String(str.data(), str.size()) {} - -inline String ToString(StringView value) { return value.ToString(); } - -inline CodePoint Utf16PreviousCodePoint(StringView str, Index current, - Index* previous_position) { - return Utf16PreviousCodePoint(str.data(), str.size(), current, - previous_position); -} - -inline CodePoint Utf16NextCodePoint(StringView str, Index current, - Index* next_position) { - return Utf16NextCodePoint(str.data(), str.size(), current, next_position); -} - -inline bool Utf16IsValidInsertPosition(StringView str, Index position) { - return Utf16IsValidInsertPosition(str.data(), str.size(), position); -} - -// Return position after the character making predicate returns true or 0 if no -// character doing so. -inline Index CRU_BASE_API -Utf16BackwardUntil(StringView str, Index position, - const std::function<bool(CodePoint)>& predicate) { - return Utf16BackwardUntil(str.data(), str.size(), position, predicate); -} -// Return position before the character making predicate returns true or -// str.size() if no character doing so. -inline Index CRU_BASE_API -Utf16ForwardUntil(StringView str, Index position, - const std::function<bool(CodePoint)>& predicate) { - return Utf16ForwardUntil(str.data(), str.size(), position, predicate); -} - -inline Index Utf16PreviousWord(StringView str, Index position, - bool* is_space = nullptr) { - return Utf16PreviousWord(str.data(), str.size(), position, is_space); -} - -inline Index Utf16NextWord(StringView str, Index position, - bool* is_space = nullptr) { - return Utf16NextWord(str.data(), str.size(), position, is_space); -} - -String CRU_BASE_API ToLower(StringView s); -String CRU_BASE_API ToUpper(StringView s); - -} // namespace cru - -template <> -struct std::hash<cru::String> { - std::size_t operator()(const cru::String& value) const { - return std::hash<std::u16string_view>{}(std::u16string_view( - reinterpret_cast<const char16_t*>(value.data()), value.size())); - } -}; - -template <> -struct std::hash<cru::StringView> { - std::size_t operator()(const cru::StringView& value) const { - return std::hash<std::u16string_view>{}(std::u16string_view( - reinterpret_cast<const char16_t*>(value.data()), value.size())); - } -}; diff --git a/include/cru/base/StringUtil.h b/include/cru/base/StringUtil.h index 258d884e..7a88f7e8 100644 --- a/include/cru/base/StringUtil.h +++ b/include/cru/base/StringUtil.h @@ -111,10 +111,10 @@ std::vector<T> ParseToNumberList(std::string_view str, auto segs = Split(str, separator, SplitOptions::RemoveSpace); std::vector<T> result; for (const auto& seg : segs) { - result.push_back( - ParseToNumber<T>(Trim(seg), ParseToNumberFlags::AllowLeadingSpaces | - ParseToNumberFlags::AllowTrailingSpaces) - .value); + auto r = ParseToNumber<T>(Trim(seg), + ParseToNumberFlags::AllowLeadingSpaces | + ParseToNumberFlags::AllowTrailingSpaces); + result.push_back(r.value); } return result; } diff --git a/include/cru/ui/ThemeManager.h b/include/cru/ui/ThemeManager.h index 10d90060..5e24a159 100644 --- a/include/cru/ui/ThemeManager.h +++ b/include/cru/ui/ThemeManager.h @@ -1,7 +1,6 @@ #pragma once #include "Base.h" #include "cru/base/Event.h" -#include "cru/base/Format.h" #include "cru/ui/ThemeResourceDictionary.h" #include <vector> @@ -27,7 +26,7 @@ class CRU_UI_API ThemeManager : public Object { std::unique_ptr<ThemeResourceDictionary> theme_resource_dictionary); template <typename T> - T GetResource(std::string_view key) { + T GetResource(const std::string_view& key) { for (const auto& resource_dictionary : theme_resource_dictionary_list_) { try { return resource_dictionary->GetResource<T>(key); diff --git a/include/cru/ui/ThemeResourceDictionary.h b/include/cru/ui/ThemeResourceDictionary.h index 90cbe520..e7463b12 100644 --- a/include/cru/ui/ThemeResourceDictionary.h +++ b/include/cru/ui/ThemeResourceDictionary.h @@ -28,11 +28,7 @@ class CRU_UI_API ThemeResourceDictionary : public Object { public: static std::unique_ptr<ThemeResourceDictionary> FromFile( - const String& file_path); - static std::unique_ptr<ThemeResourceDictionary> FromFile( - std::filesystem::path file_path) { - return FromFile(String::FromStdPath(file_path)); - } + std::filesystem::path file_path); explicit ThemeResourceDictionary(xml::XmlElementNode* xml_root, bool clone = true); diff --git a/include/cru/ui/controls/Button.h b/include/cru/ui/controls/Button.h index 717710e8..3c01be32 100644 --- a/include/cru/ui/controls/Button.h +++ b/include/cru/ui/controls/Button.h @@ -12,7 +12,7 @@ class CRU_UI_API Button : public SingleChildControl<render::BorderRenderObject>, public virtual IClickableControl, public virtual IBorderControl { public: - static constexpr StringView kControlType = u"Button"; + static constexpr std::string_view kControlType = "Button"; public: Button(); @@ -22,7 +22,7 @@ class CRU_UI_API Button : public SingleChildControl<render::BorderRenderObject>, Button& operator=(Button&& other) = delete; ~Button() override; - String GetControlType() const final { return kControlType.ToString(); } + std::string GetControlType() const final { return std::string(kControlType); } public: helper::ClickState GetClickState() override { diff --git a/include/cru/ui/controls/CheckBox.h b/include/cru/ui/controls/CheckBox.h index 19908389..8a2c84a0 100644 --- a/include/cru/ui/controls/CheckBox.h +++ b/include/cru/ui/controls/CheckBox.h @@ -12,12 +12,12 @@ class CRU_UI_API CheckBox : public NoChildControl, public virtual ICheckableControl, public virtual IClickableControl { public: - static constexpr StringView kControlType = u"CheckBox"; + static constexpr std::string_view kControlType = "CheckBox"; CheckBox(); ~CheckBox() override; - String GetControlType() const override { return kControlType.ToString(); } + std::string GetControlType() const override { return std::string(kControlType); } render::RenderObject* GetRenderObject() const override { return container_render_object_.get(); diff --git a/include/cru/ui/controls/Container.h b/include/cru/ui/controls/Container.h index c8bf3f32..4fee178d 100644 --- a/include/cru/ui/controls/Container.h +++ b/include/cru/ui/controls/Container.h @@ -8,7 +8,7 @@ namespace cru::ui::controls { class CRU_UI_API Container : public SingleChildControl<render::BorderRenderObject>, public virtual IBorderControl { - static constexpr StringView kControlType = u"Container"; + static constexpr std::string_view kControlType = "Container"; public: Container(); @@ -46,6 +46,6 @@ class CRU_UI_API Container } public: - String GetControlType() const final { return kControlType.ToString(); } + std::string GetControlType() const final { return std::string(kControlType); } }; } // namespace cru::ui::controls diff --git a/include/cru/ui/controls/Control.h b/include/cru/ui/controls/Control.h index f6603bbc..7301ecd8 100644 --- a/include/cru/ui/controls/Control.h +++ b/include/cru/ui/controls/Control.h @@ -36,7 +36,7 @@ class CRU_UI_API Control : public Object, ~Control() override; public: - virtual String GetControlType() const = 0; + virtual std::string GetControlType() const = 0; //*************** region: tree *************** public: diff --git a/include/cru/ui/controls/FlexLayout.h b/include/cru/ui/controls/FlexLayout.h index 148586c0..8940e38e 100644 --- a/include/cru/ui/controls/FlexLayout.h +++ b/include/cru/ui/controls/FlexLayout.h @@ -13,7 +13,7 @@ using render::FlexMainAlignment; class CRU_UI_API FlexLayout : public LayoutControl<render::FlexLayoutRenderObject> { public: - static constexpr StringView kControlType = u"FlexLayout"; + static constexpr std::string_view kControlType = "FlexLayout"; public: FlexLayout(); @@ -23,7 +23,7 @@ class CRU_UI_API FlexLayout FlexLayout& operator=(FlexLayout&& other) = delete; ~FlexLayout() override; - String GetControlType() const final { return kControlType.ToString(); } + std::string GetControlType() const final { return std::string(kControlType); } FlexMainAlignment GetContentMainAlign() const; void SetContentMainAlign(FlexMainAlignment value); diff --git a/include/cru/ui/controls/IconButton.h b/include/cru/ui/controls/IconButton.h index 9dbb3a3d..9e7572e0 100644 --- a/include/cru/ui/controls/IconButton.h +++ b/include/cru/ui/controls/IconButton.h @@ -17,14 +17,14 @@ class CRU_UI_API IconButton : public NoChildControl, public virtual IBorderControl, public virtual IContentBrushControl { public: - static constexpr StringView kControlType = u"IconButton"; + static constexpr std::string_view kControlType = "IconButton"; public: IconButton(); IconButton(std::string_view icon_svg_path_data_string, const Rect& view_port); ~IconButton() override; - String GetControlType() const final { return kControlType.ToString(); } + std::string GetControlType() const final { return std::string(kControlType); } render::RenderObject* GetRenderObject() const override { return container_render_object_.get(); diff --git a/include/cru/ui/controls/Popup.h b/include/cru/ui/controls/Popup.h index 464e7278..7c57d257 100644 --- a/include/cru/ui/controls/Popup.h +++ b/include/cru/ui/controls/Popup.h @@ -8,7 +8,7 @@ namespace cru::ui::controls { class CRU_UI_API Popup : public RootControl { public: - static constexpr StringView kControlType = u"Popup"; + static constexpr std::string_view kControlType = "Popup"; explicit Popup(Control* attached_control = nullptr); @@ -17,6 +17,6 @@ class CRU_UI_API Popup : public RootControl { ~Popup() override; - String GetControlType() const override { return kControlType.ToString(); } + std::string GetControlType() const override { return std::string(kControlType); } }; } // namespace cru::ui::controls diff --git a/include/cru/ui/controls/ScrollView.h b/include/cru/ui/controls/ScrollView.h index 244977d5..cefda747 100644 --- a/include/cru/ui/controls/ScrollView.h +++ b/include/cru/ui/controls/ScrollView.h @@ -7,7 +7,7 @@ namespace cru::ui::controls { class CRU_UI_API ScrollView : public SingleChildControl<render::ScrollRenderObject> { public: - static constexpr StringView kControlType = u"ScrollView"; + static constexpr std::string_view kControlType = "ScrollView"; ScrollView(); CRU_DELETE_COPY(ScrollView) @@ -15,6 +15,6 @@ class CRU_UI_API ScrollView ~ScrollView() override; public: - String GetControlType() const override { return kControlType.ToString(); } + std::string GetControlType() const override { return std::string(kControlType); } }; } // namespace cru::ui::controls diff --git a/include/cru/ui/controls/StackLayout.h b/include/cru/ui/controls/StackLayout.h index cbf35cbe..db646807 100644 --- a/include/cru/ui/controls/StackLayout.h +++ b/include/cru/ui/controls/StackLayout.h @@ -9,13 +9,13 @@ using render::StackChildLayoutData; class CRU_UI_API StackLayout : public LayoutControl<render::StackLayoutRenderObject> { public: - static constexpr StringView kControlType = u"StackLayout"; + static constexpr std::string_view kControlType = "StackLayout"; StackLayout(); CRU_DELETE_COPY(StackLayout) CRU_DELETE_MOVE(StackLayout) ~StackLayout() override; - String GetControlType() const final { return kControlType.ToString(); } + std::string GetControlType() const final { return std::string(kControlType); } }; } // namespace cru::ui::controls diff --git a/include/cru/ui/controls/TextBlock.h b/include/cru/ui/controls/TextBlock.h index 66330b23..a3b6407f 100644 --- a/include/cru/ui/controls/TextBlock.h +++ b/include/cru/ui/controls/TextBlock.h @@ -14,7 +14,7 @@ class CRU_UI_API TextBlock : public NoChildControl, public virtual IFontControl, public virtual IContentBrushControl { public: - static constexpr StringView kControlType = u"TextBlock"; + static constexpr std::string_view kControlType = "TextBlock"; static std::unique_ptr<TextBlock> Create(std::string text, bool selectable = false) { @@ -32,7 +32,7 @@ class CRU_UI_API TextBlock : public NoChildControl, TextBlock& operator=(TextBlock&& other) = delete; ~TextBlock() override; - String GetControlType() const final { return kControlType.ToString(); } + std::string GetControlType() const final { return std::string(kControlType); } render::RenderObject* GetRenderObject() const override; diff --git a/include/cru/ui/controls/TextBox.h b/include/cru/ui/controls/TextBox.h index 13f5d356..adb9895e 100644 --- a/include/cru/ui/controls/TextBox.h +++ b/include/cru/ui/controls/TextBox.h @@ -18,14 +18,14 @@ class CRU_UI_API TextBox : public NoChildControl, public virtual IContentBrushControl, public virtual IFontControl { public: - static constexpr StringView control_type = u"TextBox"; + static constexpr std::string_view control_type = "TextBox"; TextBox(); CRU_DELETE_COPY(TextBox) CRU_DELETE_MOVE(TextBox) ~TextBox() override; - String GetControlType() const final { return control_type.ToString(); } + std::string GetControlType() const final { return std::string(control_type); } render::RenderObject* GetRenderObject() const override; diff --git a/include/cru/ui/controls/TreeView.h b/include/cru/ui/controls/TreeView.h index 6c3c360b..dc74750a 100644 --- a/include/cru/ui/controls/TreeView.h +++ b/include/cru/ui/controls/TreeView.h @@ -52,14 +52,16 @@ class CRU_UI_API TreeViewItem : public Object { class CRU_UI_API TreeView : public Control { public: - constexpr static StringView kControlType = u"TreeView"; + constexpr static std::string_view kControlType = "TreeView"; TreeView(); CRU_DELETE_COPY(TreeView) CRU_DELETE_MOVE(TreeView) ~TreeView() override; - String GetControlType() const override { return kControlType.ToString(); } + std::string GetControlType() const override { + return std::string(kControlType); + } render::TreeRenderObject* GetRenderObject() { return &render_object_; } void ForEachChild(const std::function<void(Control*)>& predicate) override; diff --git a/include/cru/ui/controls/Window.h b/include/cru/ui/controls/Window.h index 656a96dd..c4ba94d9 100644 --- a/include/cru/ui/controls/Window.h +++ b/include/cru/ui/controls/Window.h @@ -1,5 +1,4 @@ #pragma once -#include "cru/platform/gui/Base.h" #include "cru/ui/controls/RootControl.h" #include "cru/base/Base.h" @@ -7,7 +6,7 @@ namespace cru::ui::controls { class CRU_UI_API Window final : public RootControl { public: - static constexpr StringView control_type = u"Window"; + static constexpr std::string_view control_type = "Window"; public: explicit Window(Control* attached_control = nullptr); @@ -16,6 +15,6 @@ class CRU_UI_API Window final : public RootControl { ~Window() override; public: - String GetControlType() const final { return control_type.ToString(); } + std::string GetControlType() const final { return std::string(control_type); } }; } // namespace cru::ui::controls diff --git a/include/cru/ui/document/DocumentElementType.h b/include/cru/ui/document/DocumentElementType.h index 6d4958d0..3621bbd9 100644 --- a/include/cru/ui/document/DocumentElementType.h +++ b/include/cru/ui/document/DocumentElementType.h @@ -1,26 +1,25 @@ #pragma once #include "../Base.h" -#include "cru/base/String.h" #include <vector> namespace cru::ui::document { class CRU_UI_API DocumentElementType : public Object { public: - explicit DocumentElementType(String name, + explicit DocumentElementType(std::string name, std::vector<DocumentElementType*> parents); ~DocumentElementType() override; public: - String GetName() const { return name_; } + std::string GetName() const { return name_; } const std::vector<DocumentElementType*>& GetParents() const { return parents_; } private: - String name_; + std::string name_; std::vector<DocumentElementType*> parents_; }; diff --git a/include/cru/ui/document/TextDocumentElement.h b/include/cru/ui/document/TextDocumentElement.h index 73a041ef..85ea6f2e 100644 --- a/include/cru/ui/document/TextDocumentElement.h +++ b/include/cru/ui/document/TextDocumentElement.h @@ -24,12 +24,12 @@ struct IDocumentLink : virtual Interface { class CRU_UI_API TextDocumentElement : public DocumentElement { public: - TextDocumentElement(String text, TextStyle style, IDocumentLink* link); + TextDocumentElement(std::string text, TextStyle style, IDocumentLink* link); ~TextDocumentElement() override; - String GetText() const { return text_; } - void SetText(String text); + std::string GetText() const { return text_; } + void SetText(std::string text); TextStyle GetStyle() const { return style_; } void SetStyle(TextStyle style); @@ -38,7 +38,7 @@ class CRU_UI_API TextDocumentElement : public DocumentElement { void SetLink(IDocumentLink link); private: - String text_; + std::string text_; TextStyle style_; IDocumentLink* link_; }; diff --git a/include/cru/ui/mapper/StringMapper.h b/include/cru/ui/mapper/StringMapper.h index 01f58c77..e41ee0f9 100644 --- a/include/cru/ui/mapper/StringMapper.h +++ b/include/cru/ui/mapper/StringMapper.h @@ -1,10 +1,10 @@ #pragma once #include "Mapper.h" -#include <cru/base/String.h> +#include <string> namespace cru::ui::mapper { -class CRU_UI_API StringMapper : public BasicMapper<String> { +class CRU_UI_API StringMapper : public BasicMapper<std::string> { public: StringMapper(); ~StringMapper(); @@ -14,7 +14,7 @@ class CRU_UI_API StringMapper : public BasicMapper<String> { bool SupportMapFromXml() override { return true; } protected: - String DoMapFromString(std::string str) override; - String DoMapFromXml(xml::XmlElementNode* node) override; + std::string DoMapFromString(std::string str) override; + std::string DoMapFromXml(xml::XmlElementNode* node) override; }; } // namespace cru::ui::mapper diff --git a/include/cru/ui/render/BorderRenderObject.h b/include/cru/ui/render/BorderRenderObject.h index 7bfa4290..001494a6 100644 --- a/include/cru/ui/render/BorderRenderObject.h +++ b/include/cru/ui/render/BorderRenderObject.h @@ -50,7 +50,7 @@ class CRU_UI_API BorderRenderObject : public SingleChildRenderObject { Rect GetPaddingRect() const override; Rect GetContentRect() const override; - String GetName() const override; + std::string GetName() const override; protected: Size OnMeasureContent(const MeasureRequirement& requirement, diff --git a/include/cru/ui/render/FlexLayoutRenderObject.h b/include/cru/ui/render/FlexLayoutRenderObject.h index 6c65ace3..bf68720a 100644 --- a/include/cru/ui/render/FlexLayoutRenderObject.h +++ b/include/cru/ui/render/FlexLayoutRenderObject.h @@ -104,7 +104,7 @@ class CRU_UI_API FlexLayoutRenderObject FlexLayoutRenderObject& operator=(FlexLayoutRenderObject&& other) = delete; ~FlexLayoutRenderObject() override = default; - String GetName() const override; + std::string GetName() const override; FlexDirection GetFlexDirection() const { return direction_; } void SetFlexDirection(FlexDirection direction) { diff --git a/include/cru/ui/render/MeasureRequirement.h b/include/cru/ui/render/MeasureRequirement.h index 544e0788..43bd3326 100644 --- a/include/cru/ui/render/MeasureRequirement.h +++ b/include/cru/ui/render/MeasureRequirement.h @@ -1,8 +1,6 @@ #pragma once #include "../Base.h" -#include "cru/base/String.h" - #include <algorithm> #include <format> #include <limits> @@ -113,13 +111,11 @@ class MeasureLength final { } } - std::string ToDebugStringUtf8() const { + std::string ToDebugString() const { return IsSpecified() ? std::to_string(GetLengthOrUndefined()) : "UNSPECIFIED"; } - String ToDebugString() const { return String::FromUtf8(ToDebugStringUtf8()); } - private: // -1 for not specify float length_; @@ -168,13 +164,11 @@ struct MeasureSize { }; } - std::string ToDebugStringUtf8() const { - return std::format("({}, {})", width.ToDebugStringUtf8(), - height.ToDebugStringUtf8()); + std::string ToDebugString() const { + return std::format("({}, {})", width.ToDebugString(), + height.ToDebugString()); } - String ToDebugString() const { return String::FromUtf8(ToDebugStringUtf8()); } - constexpr static MeasureSize NotSpecified() { return MeasureSize{MeasureLength::NotSpecified(), MeasureLength::NotSpecified()}; @@ -241,13 +235,11 @@ struct MeasureRequirement { return result; } - std::string ToDebugStringUtf8() const { - return std::format("{{min: {}, max: {}}}", min.ToDebugStringUtf8(), - max.ToDebugStringUtf8()); + std::string ToDebugString() const { + return std::format("{{min: {}, max: {}}}", min.ToDebugString(), + max.ToDebugString()); } - String ToDebugString() const { return String::FromUtf8(ToDebugStringUtf8()); } - constexpr static MeasureRequirement Merge(const MeasureRequirement& left, const MeasureRequirement& right) { return MeasureRequirement{MeasureSize::Min(left.max, right.max), diff --git a/include/cru/ui/render/RenderObject.h b/include/cru/ui/render/RenderObject.h index eba3b6c4..266045e3 100644 --- a/include/cru/ui/render/RenderObject.h +++ b/include/cru/ui/render/RenderObject.h @@ -2,7 +2,6 @@ #include "../Base.h" #include "MeasureRequirement.h" -#include "cru/base/String.h" #include <cru/platform/graphics/Painter.h> @@ -145,8 +144,8 @@ class CRU_UI_API RenderObject : public Object { void InvalidatePaint(); public: - virtual String GetName() const; - String GetDebugPathInTree() const; + virtual std::string GetName() const; + std::string GetDebugPathInTree() const; protected: // Size measure including margin and padding. Please reduce margin and padding diff --git a/include/cru/ui/render/ScrollRenderObject.h b/include/cru/ui/render/ScrollRenderObject.h index 180e927a..63a49aa3 100644 --- a/include/cru/ui/render/ScrollRenderObject.h +++ b/include/cru/ui/render/ScrollRenderObject.h @@ -60,7 +60,7 @@ class CRU_UI_API ScrollRenderObject : public SingleChildRenderObject { // Param margin is just for convenience and it will just add to the rect. void ScrollToContain(const Rect& rect, const Thickness& margin = Thickness{}); - String GetName() const override { return u"ScrollRenderObject"; } + std::string GetName() const override { return "ScrollRenderObject"; } bool IsMouseWheelScrollEnabled() const { return is_mouse_wheel_enabled_; } void SetMouseWheelScrollEnabled(bool enable); diff --git a/include/cru/ui/render/StackLayoutRenderObject.h b/include/cru/ui/render/StackLayoutRenderObject.h index 515e8f43..0d75d032 100644 --- a/include/cru/ui/render/StackLayoutRenderObject.h +++ b/include/cru/ui/render/StackLayoutRenderObject.h @@ -36,7 +36,7 @@ class CRU_UI_API StackLayoutRenderObject CRU_DELETE_MOVE(StackLayoutRenderObject) ~StackLayoutRenderObject() = default; - String GetName() const override { return u"StackLayoutRenderObject"; } + std::string GetName() const override { return "StackLayoutRenderObject"; } Alignment GetDefaultHorizontalAlignment() const { return default_vertical_alignment_; diff --git a/include/cru/ui/render/TextRenderObject.h b/include/cru/ui/render/TextRenderObject.h index b8d1882d..5b99ae98 100644 --- a/include/cru/ui/render/TextRenderObject.h +++ b/include/cru/ui/render/TextRenderObject.h @@ -93,7 +93,7 @@ class CRU_UI_API TextRenderObject : public RenderObject { RenderObject* HitTest(const Point& point) override; - String GetName() const override { return u"TextRenderObject"; } + std::string GetName() const override { return "TextRenderObject"; } void Draw(platform::graphics::IPainter* painter) override; diff --git a/include/cru/ui/render/TreeRenderObject.h b/include/cru/ui/render/TreeRenderObject.h index ef40f4d0..9cb8581e 100644 --- a/include/cru/ui/render/TreeRenderObject.h +++ b/include/cru/ui/render/TreeRenderObject.h @@ -57,7 +57,7 @@ class CRU_UI_API TreeRenderObject : public RenderObject { CRU_DELETE_MOVE(TreeRenderObject) ~TreeRenderObject() override; - String GetName() const override { return u"TreeRenderObject"; } + std::string GetName() const override { return "TreeRenderObject"; } TreeRenderObjectItem* GetRootItem() { return root_item_; } diff --git a/include/cru/ui/style/StyleRule.h b/include/cru/ui/style/StyleRule.h index 1ae2f0f1..e7f4d390 100644 --- a/include/cru/ui/style/StyleRule.h +++ b/include/cru/ui/style/StyleRule.h @@ -4,9 +4,6 @@ #include "Styler.h" #include "cru/base/ClonablePtr.h" -#include <memory> -#include <vector> - namespace cru::ui::style { /** * \brief An immutable style rule contains a condition and a styler. @@ -16,13 +13,13 @@ class CRU_UI_API StyleRule : public Object { public: static ClonablePtr<StyleRule> Create(ClonablePtr<Condition> condition, ClonablePtr<Styler> styler, - String name = {}) { + std::string name = {}) { return ClonablePtr<StyleRule>(new StyleRule( std::move(condition), std::move(styler), std::move(name))); } StyleRule(ClonablePtr<Condition> condition, ClonablePtr<Styler> styler, - String name = {}); + std::string name = {}); CRU_DEFAULT_COPY(StyleRule) CRU_DEFAULT_MOVE(StyleRule) @@ -30,16 +27,17 @@ class CRU_UI_API StyleRule : public Object { ~StyleRule() override = default; public: - String GetName() const { return name_; } + std::string GetName() const { return name_; } Condition* GetCondition() const { return condition_.get(); } Styler* GetStyler() const { return styler_.get(); } StyleRule WithNewCondition(ClonablePtr<Condition> condition, - String name = {}) const { + std::string name = {}) const { return StyleRule{std::move(condition), styler_, std::move(name)}; } - StyleRule WithNewStyler(ClonablePtr<Styler> styler, String name = {}) const { + StyleRule WithNewStyler(ClonablePtr<Styler> styler, + std::string name = {}) const { return StyleRule{condition_, std::move(styler), std::move(name)}; } @@ -48,6 +46,6 @@ class CRU_UI_API StyleRule : public Object { private: ClonablePtr<Condition> condition_; ClonablePtr<Styler> styler_; - String name_; + std::string name_; }; } // namespace cru::ui::style |