From 57c65892dbdd28cbee5e9c2ec0d3504824ebb255 Mon Sep 17 00:00:00 2001 From: daiqingshuang Date: Thu, 10 Apr 2025 14:24:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E7=A6=BBconfig=E4=BD=BF=E5=85=B6?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E5=8D=95=E7=8B=AC=E7=9A=84=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitmodules | 6 ++-- CMakeLists.txt | 1 + example/src/main.cpp | 34 +++++++++---------- src/mirage_app/mirage.cpp | 11 +++--- src/mirage_config/CMakeLists.txt | 10 ++++++ src/mirage_config/src/config.cpp | 14 ++++++++ src/mirage_config/src/config.h | 14 ++++++++ .../third_party/tomlplusplus | 0 src/mirage_render/src/font/font_system.cpp | 9 +++++ src/mirage_render/src/font/font_system.h | 5 +++ src/mirage_widget/CMakeLists.txt | 4 +-- src/mirage_widget/src/style/mirage_style.cpp | 10 ------ src/mirage_widget/src/style/mirage_style.h | 13 ++----- 13 files changed, 80 insertions(+), 51 deletions(-) create mode 100644 src/mirage_config/CMakeLists.txt create mode 100644 src/mirage_config/src/config.cpp create mode 100644 src/mirage_config/src/config.h rename src/{mirage_widget => mirage_config}/third_party/tomlplusplus (100%) diff --git a/.gitmodules b/.gitmodules index 411d442..47911f9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,9 @@ [submodule "src/mirage_render/font/freetype_font/harfbuzz"] path = src/mirage_render/font/freetype_font/harfbuzz url = https://github.com/harfbuzz/harfbuzz -[submodule "src/mirage_widget/third_party/tomlplusplus"] - path = src/mirage_widget/third_party/tomlplusplus - url = https://github.com/marzer/tomlplusplus.git [submodule "src/mirage_core/third_party/utfcpp"] path = src/mirage_core/third_party/utfcpp url = https://github.com/nemtrif/utfcpp.git +[submodule "src/mirage_config/third_party/tomlplusplus"] + path = src/mirage_config/third_party/tomlplusplus + url = https://github.com/marzer/tomlplusplus.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 9112e29..f457afd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,6 +43,7 @@ else () endif () add_subdirectory(src/sokol) +add_subdirectory(src/mirage_config) add_subdirectory(src/mirage_render) add_subdirectory(src/mirage_image) add_subdirectory(src/mirage_core) diff --git a/example/src/main.cpp b/example/src/main.cpp index 42d7942..434ca8d 100644 --- a/example/src/main.cpp +++ b/example/src/main.cpp @@ -11,15 +11,7 @@ #include "utf8.h" -int main(int argc, char* argv[]) { - mirage_app::get().init(); - - auto name = mirage_style::get().name(); - auto version = mirage_style::get().version(); - auto author = mirage_style::get().author(); - auto description = mirage_style::get().description(); - auto license = mirage_style::get().license(); - +void test_color() { const char* test_cases[] = { "#FFF", // hex rgb "#ff0000", // hex RRGGBB @@ -48,24 +40,30 @@ int main(int argc, char* argv[]) { std::println(std::cerr, "Failed to parse color string: {}", test_str); } } +} - auto& manager = font_manager::instance(); - manager.add_font(L"C:/Users/46944/AppData/Local/Microsoft/Windows/Fonts/MapleMono-NF-CN-Regular.ttf"); - manager.add_font(L"C:/Windows/Fonts/msyh.ttc"); - // manager.add_font(L"D:/Projects/noto-emoji-2.047/fonts/Noto-COLRv1.ttf"); - manager.add_font(L"C:/Windows/Fonts/seguiemj.ttf"); +int main(int argc, char* argv[]) { + mirage_app::get().init(); + + font_manager::instance().load_default_font(); + + auto name = mirage_style::get().name(); + auto version = mirage_style::get().version(); + auto author = mirage_style::get().author(); + auto description = mirage_style::get().description(); + auto license = mirage_style::get().license(); - const auto& text_block = std::make_shared(); std::stringstream ss; ss << "name: " << name << "\n"; ss << "version: " << version << "\n"; ss << "author: " << author << "\n"; ss << "description: " << description << "\n"; ss << "license: " << license << "\n"; - // text_block->set_text(U"Hello, World! 你好,世界!\n换行测试1111,测试测试测试测试,测试测试😀🐵🙏 😃🐵🙏"); - // const char*转换为std::u32string - text_block->set_text(utf8::utf8to32(ss.str())); + const auto& config_info_str = utf8::utf8to32(ss.str()); + const auto& text_block = std::make_shared(); + text_block->set_text(config_info_str); + // text_block->set_text(U"Hello, World! 你好,世界!\n换行测试1111,测试测试测试测试,测试测试😀🐵🙏 😃🐵🙏"); const auto& text_block2 = std::make_shared(); text_block2->set_text(U"Hello, World!"); diff --git a/src/mirage_app/mirage.cpp b/src/mirage_app/mirage.cpp index aa8c207..7833eb4 100644 --- a/src/mirage_app/mirage.cpp +++ b/src/mirage_app/mirage.cpp @@ -63,13 +63,12 @@ void mirage_app::init() { } render_context = mirage_create_render_context(); render_context->init(); - const sg_desc desc = { - .logger = { - .func = mirage_log, - .user_data = nullptr - }, - .environment = render_context->get_environment(), + sg_desc desc = {}; + desc.logger = { + .func = mirage_log, + .user_data = nullptr }; + desc.environment = render_context->get_environment(); sg_setup(desc); render_context->end_init(); } diff --git a/src/mirage_config/CMakeLists.txt b/src/mirage_config/CMakeLists.txt new file mode 100644 index 0000000..b2e18e9 --- /dev/null +++ b/src/mirage_config/CMakeLists.txt @@ -0,0 +1,10 @@ +project(mirage_config) + +add_subdirectory(third_party/tomlplusplus) + +set(SRC_FILES) +retrieve_files(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_FILES) + +add_library(${PROJECT_NAME} STATIC ${SRC_FILES}) +target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) +target_link_libraries(${PROJECT_NAME} PUBLIC tomlplusplus::tomlplusplus) diff --git a/src/mirage_config/src/config.cpp b/src/mirage_config/src/config.cpp new file mode 100644 index 0000000..b6061d5 --- /dev/null +++ b/src/mirage_config/src/config.cpp @@ -0,0 +1,14 @@ +#include "config.h" + +#include + +bool config_t::load_config(const std::filesystem::path& in_filename) { + try { + tbl = toml::parse_file(in_filename.string()); + } + catch (const toml::parse_error& err) { + std::println(std::cerr, "{}", err.what()); + return false; + } + return true; +} diff --git a/src/mirage_config/src/config.h b/src/mirage_config/src/config.h new file mode 100644 index 0000000..06507f5 --- /dev/null +++ b/src/mirage_config/src/config.h @@ -0,0 +1,14 @@ +#pragma once +#include +#include + +class config_t { +public: + bool load_config(const std::filesystem::path& in_filename); + + [[nodiscard]] const auto& get_config() const { + return tbl; + } +protected: + toml::table tbl{}; +}; diff --git a/src/mirage_widget/third_party/tomlplusplus b/src/mirage_config/third_party/tomlplusplus similarity index 100% rename from src/mirage_widget/third_party/tomlplusplus rename to src/mirage_config/third_party/tomlplusplus diff --git a/src/mirage_render/src/font/font_system.cpp b/src/mirage_render/src/font/font_system.cpp index c703ce4..11784cc 100644 --- a/src/mirage_render/src/font/font_system.cpp +++ b/src/mirage_render/src/font/font_system.cpp @@ -11,6 +11,15 @@ void font_manager::destroy() { destroy_font_system(); } +void font_manager::load_default_font() { +#if MIRAGE_PLATFORM_WINDOWS + add_font(L"C:/Windows/Fonts/msyh.ttc"); + add_font(L"C:/Windows/Fonts/seguiemj.ttf"); +#else + static_assert(false, "暂时不支持当前平台的默认字体加载"); +#endif +} + int font_manager::add_font(const std::filesystem::path& in_font_path, const std::string& in_font_type) { auto font = create_font_face(in_font_path); if (!font) { diff --git a/src/mirage_render/src/font/font_system.h b/src/mirage_render/src/font/font_system.h index e53d0fe..afc31e8 100644 --- a/src/mirage_render/src/font/font_system.h +++ b/src/mirage_render/src/font/font_system.h @@ -38,6 +38,11 @@ public: */ void destroy(); + /** + * @brief 加载操作系统默认字体 + */ + void load_default_font(); + /** * @brief 添加字体 * diff --git a/src/mirage_widget/CMakeLists.txt b/src/mirage_widget/CMakeLists.txt index 352c711..93eb0f6 100644 --- a/src/mirage_widget/CMakeLists.txt +++ b/src/mirage_widget/CMakeLists.txt @@ -3,11 +3,9 @@ project(mirage_widget) set(SRC_FILES) retrieve_files(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_FILES) -add_subdirectory(third_party/tomlplusplus) - add_library(${PROJECT_NAME} STATIC ${SRC_FILES}) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src) -target_link_libraries(${PROJECT_NAME} PUBLIC mirage_core mirage_render tomlplusplus::tomlplusplus) +target_link_libraries(${PROJECT_NAME} PUBLIC mirage_core mirage_render mirage_config) add_resource_file( TARGET_NAME ${PROJECT_NAME} diff --git a/src/mirage_widget/src/style/mirage_style.cpp b/src/mirage_widget/src/style/mirage_style.cpp index 12f80fd..b2739f4 100644 --- a/src/mirage_widget/src/style/mirage_style.cpp +++ b/src/mirage_widget/src/style/mirage_style.cpp @@ -1,12 +1,2 @@ #include "mirage_style.h" -bool mirage_style::load_config(const std::filesystem::path& in_filename) { - try { - tbl = toml::parse_file(in_filename.string()); - } - catch (const toml::parse_error& err) { - fprintf(stderr, "%s\n", err.what()); - return false; - } - return true; -} diff --git a/src/mirage_widget/src/style/mirage_style.h b/src/mirage_widget/src/style/mirage_style.h index b9dcba4..02c5923 100644 --- a/src/mirage_widget/src/style/mirage_style.h +++ b/src/mirage_widget/src/style/mirage_style.h @@ -1,21 +1,13 @@ #pragma once -#include "misc/name.h" -#include -#include +#include "config.h" -class mirage_style { +class mirage_style : public config_t { public: static auto& get() { static mirage_style instance; return instance; } - bool load_config(const std::filesystem::path& in_filename); - - [[nodiscard]] const auto& get_config() const { - return tbl; - } - [[nodiscard]] auto name() const { return tbl["info"]["name"].value_or("unknown"); } @@ -37,5 +29,4 @@ public: } private: mirage_style() = default; - toml::table tbl{}; };