From 7a18b799617465a0a27dde1cf0c5f48c52db7980 Mon Sep 17 00:00:00 2001 From: Seigo Nonaka Date: Mon, 13 Feb 2017 18:33:28 +0900 Subject: [PATCH] Implement getAxes() method. getAxes() is necessary for calling hb_font_set_variations. Test: None Change-Id: Iec4759189b0653aa483ba85682d10b2b81beaab8 --- core/jni/android/graphics/FontFamily.cpp | 6 ++++-- libs/hwui/hwui/MinikinSkia.cpp | 10 +++++++--- libs/hwui/hwui/MinikinSkia.h | 4 +++- libs/hwui/hwui/Typeface.cpp | 3 ++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/core/jni/android/graphics/FontFamily.cpp b/core/jni/android/graphics/FontFamily.cpp index 6ec658b9b916e..b1d0899908d8c 100644 --- a/core/jni/android/graphics/FontFamily.cpp +++ b/core/jni/android/graphics/FontFamily.cpp @@ -83,7 +83,8 @@ static void FontFamily_unref(jlong familyPtr) { static void addSkTypeface(jlong builderPtr, sk_sp face, const void* fontData, size_t fontSize, int ttcIndex) { minikin::MinikinFont* minikinFont = - new MinikinFontSkia(std::move(face), fontData, fontSize, ttcIndex); + new MinikinFontSkia(std::move(face), fontData, fontSize, ttcIndex, + std::vector()); NativeFamilyBuilder* builder = reinterpret_cast(builderPtr); int weight; bool italic; @@ -205,7 +206,8 @@ static jboolean FontFamily_addFontWeightStyle(JNIEnv* env, jobject clazz, jlong return false; } minikin::MinikinFont* minikinFont = - new MinikinFontSkia(std::move(face), fontPtr, fontSize, ttcIndex); + new MinikinFontSkia(std::move(face), fontPtr, fontSize, ttcIndex, + std::vector()); NativeFamilyBuilder* builder = reinterpret_cast(builderPtr); builder->fonts.push_back(minikin::Font(minikinFont, minikin::FontStyle(weight / 100, isItalic))); diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp index 6a003794fb283..cbae0a0dbf4ac 100644 --- a/libs/hwui/hwui/MinikinSkia.cpp +++ b/libs/hwui/hwui/MinikinSkia.cpp @@ -25,9 +25,9 @@ namespace android { MinikinFontSkia::MinikinFontSkia(sk_sp typeface, const void* fontData, size_t fontSize, - int ttcIndex) : + int ttcIndex, const std::vector& axes) : minikin::MinikinFont(typeface->uniqueID()), mTypeface(std::move(typeface)), mFontData(fontData), - mFontSize(fontSize), mTtcIndex(ttcIndex) { + mFontSize(fontSize), mTtcIndex(ttcIndex), mAxes(axes) { } static void MinikinFontSkia_SetSkiaPaint(const minikin::MinikinFont* font, SkPaint* skPaint, @@ -87,6 +87,10 @@ int MinikinFontSkia::GetFontIndex() const { return mTtcIndex; } +const std::vector& MinikinFontSkia::GetAxes() const { + return mAxes; +} + minikin::MinikinFont* MinikinFontSkia::createFontWithVariation( const std::vector& variations) const { SkFontMgr::FontParameters params; @@ -106,7 +110,7 @@ minikin::MinikinFont* MinikinFontSkia::createFontWithVariation( sk_sp fm(SkFontMgr::RefDefault()); sk_sp face(fm->createFromStream(stream, params)); - return new MinikinFontSkia(std::move(face), mFontData, mFontSize, ttcIndex); + return new MinikinFontSkia(std::move(face), mFontData, mFontSize, ttcIndex, variations); } uint32_t MinikinFontSkia::packPaintFlags(const SkPaint* paint) { diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h index 249b0cbe44de9..db59fe520068e 100644 --- a/libs/hwui/hwui/MinikinSkia.h +++ b/libs/hwui/hwui/MinikinSkia.h @@ -29,7 +29,7 @@ namespace android { class ANDROID_API MinikinFontSkia : public minikin::MinikinFont { public: explicit MinikinFontSkia(sk_sp typeface, const void* fontData, size_t fontSize, - int ttcIndex); + int ttcIndex, const std::vector& axes); float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint &paint) const; @@ -44,6 +44,7 @@ public: const void* GetFontData() const; size_t GetFontSize() const; int GetFontIndex() const; + const std::vector& GetAxes() const; minikin::MinikinFont* createFontWithVariation( const std::vector&) const; @@ -61,6 +62,7 @@ private: const void* mFontData; size_t mFontSize; int mTtcIndex; + std::vector mAxes; }; } // namespace android diff --git a/libs/hwui/hwui/Typeface.cpp b/libs/hwui/hwui/Typeface.cpp index b69b0cb29efef..9f9fac61fecc9 100644 --- a/libs/hwui/hwui/Typeface.cpp +++ b/libs/hwui/hwui/Typeface.cpp @@ -150,7 +150,8 @@ void Typeface::setRobotoTypefaceForTest() { sk_sp typeface = SkTypeface::MakeFromStream(fontData.release()); LOG_ALWAYS_FATAL_IF(typeface == nullptr, "Failed to make typeface from %s", kRobotoFont); - minikin::MinikinFont* font = new MinikinFontSkia(std::move(typeface), data, st.st_size, 0); + minikin::MinikinFont* font = new MinikinFontSkia(std::move(typeface), data, st.st_size, 0, + std::vector()); minikin::FontFamily* family = new minikin::FontFamily( std::vector({ minikin::Font(font, minikin::FontStyle()) })); font->Unref();