diff --git a/engine/src/flutter/include/minikin/MinikinFont.h b/engine/src/flutter/include/minikin/MinikinFont.h index 57b939788a..64bab02a20 100644 --- a/engine/src/flutter/include/minikin/MinikinFont.h +++ b/engine/src/flutter/include/minikin/MinikinFont.h @@ -126,6 +126,8 @@ public: return 0; } + virtual const std::vector& GetAxes() const = 0; + virtual MinikinFont* createFontWithVariation(const std::vector&) const { return nullptr; } diff --git a/engine/src/flutter/include/minikin/MinikinFontFreeType.h b/engine/src/flutter/include/minikin/MinikinFontFreeType.h index 34c3fd92d4..37333e5f37 100644 --- a/engine/src/flutter/include/minikin/MinikinFontFreeType.h +++ b/engine/src/flutter/include/minikin/MinikinFontFreeType.h @@ -50,6 +50,10 @@ public: const void* GetTable(uint32_t tag, size_t* size, MinikinDestroyFunc* destroy); + const std::vector& GetAxes() const { + return mAxes; + } + // TODO: provide access to raw data, as an optimization. // Not a virtual method, as the protocol to access rendered @@ -63,6 +67,7 @@ public: private: FT_Face mTypeface; static int32_t sIdCounter; + std::vector mAxes; }; } // namespace minikin diff --git a/engine/src/flutter/libs/minikin/HbFontCache.cpp b/engine/src/flutter/libs/minikin/HbFontCache.cpp index bd59e8f626..e871b4ef9b 100644 --- a/engine/src/flutter/libs/minikin/HbFontCache.cpp +++ b/engine/src/flutter/libs/minikin/HbFontCache.cpp @@ -117,6 +117,11 @@ hb_font_t* getHbFontLocked(MinikinFont* minikinFont) { hb_font_set_scale(parent_font, upem, upem); font = hb_font_create_sub_font(parent_font); + std::vector variations; + for (const FontVariation& variation : minikinFont->GetAxes()) { + variations.push_back({variation.axisTag, variation.value}); + } + hb_font_set_variations(font, variations.data(), variations.size()); hb_font_destroy(parent_font); hb_face_destroy(face); fontCache->put(fontId, font); diff --git a/engine/src/flutter/sample/MinikinSkia.h b/engine/src/flutter/sample/MinikinSkia.h index d995f7d279..8284f5d0f9 100644 --- a/engine/src/flutter/sample/MinikinSkia.h +++ b/engine/src/flutter/sample/MinikinSkia.h @@ -26,12 +26,15 @@ public: const MinikinPaint& paint) const; const void* GetTable(uint32_t tag, size_t* size, MinikinDestroyFunc* destroy); + const std::vector& GetAxes() const { + return mAxes; + } SkTypeface *GetSkTypeface(); private: sk_sp mTypeface; - + std::vector mAxes; }; } // namespace minikin diff --git a/engine/src/flutter/tests/util/MinikinFontForTest.h b/engine/src/flutter/tests/util/MinikinFontForTest.h index 2a107036ed..1d0628319b 100644 --- a/engine/src/flutter/tests/util/MinikinFontForTest.h +++ b/engine/src/flutter/tests/util/MinikinFontForTest.h @@ -38,11 +38,11 @@ public: const MinikinPaint& paint) const; const std::string& fontPath() const { return mFontPath; } - const std::vector& variations() const { return mVariations; } const void* GetFontData() const { return mFontData; } size_t GetFontSize() const { return mFontSize; } int GetFontIndex() const { return mFontIndex; } + const std::vector& GetAxes() const { return mVariations; } MinikinFont* createFontWithVariation(const std::vector& variations) const; private: MinikinFontForTest() = delete;