diff --git a/src/kiwano/render/DirectX/RendererImpl.cpp b/src/kiwano/render/DirectX/RendererImpl.cpp index f652cd85..2e06e08f 100644 --- a/src/kiwano/render/DirectX/RendererImpl.cpp +++ b/src/kiwano/render/DirectX/RendererImpl.cpp @@ -502,8 +502,36 @@ void RendererImpl::CreateFontCollection(Font& font, const String& file_path) ComPtr font_collection; hr = d2d_res_->CreateFontCollectionFromFiles(font_collection, { full_path }); + Vector family_names; if (SUCCEEDED(hr)) { + UINT32 count = font_collection->GetFontFamilyCount(); + for (UINT32 i = 0; i < count; i++) + { + ComPtr family; + if (SUCCEEDED(font_collection->GetFontFamily(i, &family))) + { + ComPtr str; + if (SUCCEEDED(family->GetFamilyNames(&str))) + { + UINT32 length = 0; + if (SUCCEEDED(str->GetStringLength(0, &length))) + { + WideString name; + name.resize(length + 1); + if (SUCCEEDED(str->GetString(0, &name[0], UINT32(name.size())))) + { + family_names.emplace_back(strings::WideToNarrow(name)); + } + } + } + } + } + } + + if (SUCCEEDED(hr)) + { + font.SetFamilyNames(family_names); NativePtr::Set(font, font_collection); } } @@ -524,8 +552,36 @@ void RendererImpl::CreateFontCollection(Font& font, const Resource& res) ComPtr font_collection; hr = d2d_res_->CreateFontCollectionFromResources(font_collection, Vector{ res }); + Vector family_names; if (SUCCEEDED(hr)) { + UINT32 count = font_collection->GetFontFamilyCount(); + for (UINT32 i = 0; i < count; i++) + { + ComPtr family; + if (SUCCEEDED(font_collection->GetFontFamily(i, &family))) + { + ComPtr str; + if (SUCCEEDED(family->GetFamilyNames(&str))) + { + UINT32 length = 0; + if (SUCCEEDED(str->GetStringLength(0, &length))) + { + WideString name; + name.resize(length + 1); + if (SUCCEEDED(str->GetString(0, &name[0], UINT32(name.size())))) + { + family_names.emplace_back(strings::WideToNarrow(name)); + } + } + } + } + } + } + + if (SUCCEEDED(hr)) + { + font.SetFamilyNames(family_names); NativePtr::Set(font, font_collection); } } diff --git a/src/kiwano/render/Font.h b/src/kiwano/render/Font.h index ef9491c8..aee5e6e2 100644 --- a/src/kiwano/render/Font.h +++ b/src/kiwano/render/Font.h @@ -59,8 +59,29 @@ public: /// \~chinese /// @brief 加载字体资源 bool Load(const Resource& resource); + + /// \~chinese + /// @brief 获取字体族名称 + Vector GetFamilyNames() const; + + /// \~chinese + /// @brief 设置字体族名称 + void SetFamilyNames(const Vector& names); + +protected: + Vector family_names_; }; /** @} */ +inline Vector Font::GetFamilyNames() const +{ + return family_names_; +} + +inline void Font::SetFamilyNames(const Vector& names) +{ + family_names_ = names; +} + } // namespace kiwano