Loading core/jni/android/graphics/FontFamily.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ static bool addSkTypeface(NativeFamilyBuilder* builder, sk_sp<SkData>&& data, in return false; } std::shared_ptr<minikin::MinikinFont> minikinFont = std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, ttcIndex, std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, "", ttcIndex, builder->axes); minikin::Font::Builder fontBuilder(minikinFont); Loading core/jni/android/graphics/fonts/Font.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -134,7 +134,7 @@ static void Font_Builder_addAxis(jlong builderPtr, jint tag, jfloat value) { // Regular JNI static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jobject buffer, jint weight, jboolean italic, jint ttcIndex) { jstring filePath, jint weight, jboolean italic, jint ttcIndex) { NPE_CHECK_RETURN_ZERO(env, buffer); std::unique_ptr<NativeFontBuilder> builder(toBuilder(builderPtr)); const void* fontPtr = env->GetDirectBufferAddress(buffer); Loading @@ -148,6 +148,7 @@ static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jo "buffer size must not be zero or negative"); return 0; } ScopedUtfChars fontPath(env, filePath); jobject fontRef = MakeGlobalRefOrDie(env, buffer); sk_sp<SkData> data(SkData::MakeWithProc(fontPtr, fontSize, release_global_ref, reinterpret_cast<void*>(fontRef))); Loading @@ -171,8 +172,9 @@ static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jo return 0; } std::shared_ptr<minikin::MinikinFont> minikinFont = std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, ttcIndex, builder->axes); std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, std::string_view(fontPath.c_str(), fontPath.size()), ttcIndex, builder->axes); minikin::Font font = minikin::Font::Builder(minikinFont).setWeight(weight) .setSlant(static_cast<minikin::FontStyle::Slant>(italic)).build(); return reinterpret_cast<jlong>(new FontWrapper(std::move(font))); Loading @@ -188,7 +190,7 @@ static jlong Font_Builder_getReleaseNativeFont() { static const JNINativeMethod gFontBuilderMethods[] = { { "nInitBuilder", "()J", (void*) Font_Builder_initBuilder }, { "nAddAxis", "(JIF)V", (void*) Font_Builder_addAxis }, { "nBuild", "(JLjava/nio/ByteBuffer;IZI)J", (void*) Font_Builder_build }, { "nBuild", "(JLjava/nio/ByteBuffer;Ljava/lang/String;IZI)J", (void*) Font_Builder_build }, { "nGetReleaseNativeFont", "()J", (void*) Font_Builder_getReleaseNativeFont }, { "nGetNativeAsset", "(Landroid/content/res/AssetManager;Ljava/lang/String;ZI)J", Loading graphics/java/android/graphics/fonts/Font.java +5 −2 Original line number Diff line number Diff line Loading @@ -372,7 +372,9 @@ public final class Font { } } final ByteBuffer readonlyBuffer = mBuffer.asReadOnlyBuffer(); final long ptr = nBuild(builderPtr, readonlyBuffer, mWeight, italic, mTtcIndex); final String filePath = mFile == null ? "" : mFile.getAbsolutePath(); final long ptr = nBuild(builderPtr, readonlyBuffer, filePath, mWeight, italic, mTtcIndex); final Font font = new Font(ptr, readonlyBuffer, mFile, new FontStyle(mWeight, slant), mTtcIndex, mAxes, mLocaleList); sFontRegistory.registerNativeAllocation(font, ptr); Loading @@ -395,7 +397,8 @@ public final class Font { @CriticalNative private static native void nAddAxis(long builderPtr, int tag, float value); private static native long nBuild( long builderPtr, ByteBuffer buffer, int weight, boolean italic, int ttcIndex); long builderPtr, @NonNull ByteBuffer buffer, @NonNull String filePath, int weight, boolean italic, int ttcIndex); @CriticalNative private static native long nGetReleaseNativeFont(); } Loading libs/hwui/hwui/MinikinSkia.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -30,13 +30,15 @@ namespace android { MinikinFontSkia::MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize, int ttcIndex, const std::vector<minikin::FontVariation>& axes) std::string_view filePath, int ttcIndex, const std::vector<minikin::FontVariation>& axes) : minikin::MinikinFont(typeface->uniqueID()) , mTypeface(std::move(typeface)) , mFontData(fontData) , mFontSize(fontSize) , mTtcIndex(ttcIndex) , mAxes(axes) {} , mAxes(axes) , mFilePath(filePath) {} static void MinikinFontSkia_SetSkiaPaint(const minikin::MinikinFont* font, SkPaint* skPaint, const minikin::MinikinPaint& paint, Loading Loading @@ -131,8 +133,8 @@ std::shared_ptr<minikin::MinikinFont> MinikinFontSkia::createFontWithVariation( sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault()); sk_sp<SkTypeface> face(fm->makeFromStream(std::move(stream), params)); return std::make_shared<MinikinFontSkia>(std::move(face), mFontData, mFontSize, ttcIndex, variations); return std::make_shared<MinikinFontSkia>(std::move(face), mFontData, mFontSize, mFilePath, ttcIndex, variations); } uint32_t MinikinFontSkia::packPaintFlags(const SkPaint* paint) { Loading libs/hwui/hwui/MinikinSkia.h +5 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,9 @@ namespace android { class ANDROID_API MinikinFontSkia : public minikin::MinikinFont { public: explicit MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize, int ttcIndex, const std::vector<minikin::FontVariation>& axes); MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize, std::string_view filePath, int ttcIndex, const std::vector<minikin::FontVariation>& axes); float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint& paint, const minikin::FontFakery& fakery) const override; Loading @@ -48,6 +49,7 @@ public: const void* GetFontData() const; size_t GetFontSize() const; int GetFontIndex() const; const std::string& getFilePath() const { return mFilePath; } const std::vector<minikin::FontVariation>& GetAxes() const; std::shared_ptr<minikin::MinikinFont> createFontWithVariation( const std::vector<minikin::FontVariation>&) const; Loading @@ -68,6 +70,7 @@ private: size_t mFontSize; int mTtcIndex; std::vector<minikin::FontVariation> mAxes; std::string mFilePath; }; } // namespace android Loading Loading
core/jni/android/graphics/FontFamily.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ static bool addSkTypeface(NativeFamilyBuilder* builder, sk_sp<SkData>&& data, in return false; } std::shared_ptr<minikin::MinikinFont> minikinFont = std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, ttcIndex, std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, "", ttcIndex, builder->axes); minikin::Font::Builder fontBuilder(minikinFont); Loading
core/jni/android/graphics/fonts/Font.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -134,7 +134,7 @@ static void Font_Builder_addAxis(jlong builderPtr, jint tag, jfloat value) { // Regular JNI static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jobject buffer, jint weight, jboolean italic, jint ttcIndex) { jstring filePath, jint weight, jboolean italic, jint ttcIndex) { NPE_CHECK_RETURN_ZERO(env, buffer); std::unique_ptr<NativeFontBuilder> builder(toBuilder(builderPtr)); const void* fontPtr = env->GetDirectBufferAddress(buffer); Loading @@ -148,6 +148,7 @@ static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jo "buffer size must not be zero or negative"); return 0; } ScopedUtfChars fontPath(env, filePath); jobject fontRef = MakeGlobalRefOrDie(env, buffer); sk_sp<SkData> data(SkData::MakeWithProc(fontPtr, fontSize, release_global_ref, reinterpret_cast<void*>(fontRef))); Loading @@ -171,8 +172,9 @@ static jlong Font_Builder_build(JNIEnv* env, jobject clazz, jlong builderPtr, jo return 0; } std::shared_ptr<minikin::MinikinFont> minikinFont = std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, ttcIndex, builder->axes); std::make_shared<MinikinFontSkia>(std::move(face), fontPtr, fontSize, std::string_view(fontPath.c_str(), fontPath.size()), ttcIndex, builder->axes); minikin::Font font = minikin::Font::Builder(minikinFont).setWeight(weight) .setSlant(static_cast<minikin::FontStyle::Slant>(italic)).build(); return reinterpret_cast<jlong>(new FontWrapper(std::move(font))); Loading @@ -188,7 +190,7 @@ static jlong Font_Builder_getReleaseNativeFont() { static const JNINativeMethod gFontBuilderMethods[] = { { "nInitBuilder", "()J", (void*) Font_Builder_initBuilder }, { "nAddAxis", "(JIF)V", (void*) Font_Builder_addAxis }, { "nBuild", "(JLjava/nio/ByteBuffer;IZI)J", (void*) Font_Builder_build }, { "nBuild", "(JLjava/nio/ByteBuffer;Ljava/lang/String;IZI)J", (void*) Font_Builder_build }, { "nGetReleaseNativeFont", "()J", (void*) Font_Builder_getReleaseNativeFont }, { "nGetNativeAsset", "(Landroid/content/res/AssetManager;Ljava/lang/String;ZI)J", Loading
graphics/java/android/graphics/fonts/Font.java +5 −2 Original line number Diff line number Diff line Loading @@ -372,7 +372,9 @@ public final class Font { } } final ByteBuffer readonlyBuffer = mBuffer.asReadOnlyBuffer(); final long ptr = nBuild(builderPtr, readonlyBuffer, mWeight, italic, mTtcIndex); final String filePath = mFile == null ? "" : mFile.getAbsolutePath(); final long ptr = nBuild(builderPtr, readonlyBuffer, filePath, mWeight, italic, mTtcIndex); final Font font = new Font(ptr, readonlyBuffer, mFile, new FontStyle(mWeight, slant), mTtcIndex, mAxes, mLocaleList); sFontRegistory.registerNativeAllocation(font, ptr); Loading @@ -395,7 +397,8 @@ public final class Font { @CriticalNative private static native void nAddAxis(long builderPtr, int tag, float value); private static native long nBuild( long builderPtr, ByteBuffer buffer, int weight, boolean italic, int ttcIndex); long builderPtr, @NonNull ByteBuffer buffer, @NonNull String filePath, int weight, boolean italic, int ttcIndex); @CriticalNative private static native long nGetReleaseNativeFont(); } Loading
libs/hwui/hwui/MinikinSkia.cpp +6 −4 Original line number Diff line number Diff line Loading @@ -30,13 +30,15 @@ namespace android { MinikinFontSkia::MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize, int ttcIndex, const std::vector<minikin::FontVariation>& axes) std::string_view filePath, int ttcIndex, const std::vector<minikin::FontVariation>& axes) : minikin::MinikinFont(typeface->uniqueID()) , mTypeface(std::move(typeface)) , mFontData(fontData) , mFontSize(fontSize) , mTtcIndex(ttcIndex) , mAxes(axes) {} , mAxes(axes) , mFilePath(filePath) {} static void MinikinFontSkia_SetSkiaPaint(const minikin::MinikinFont* font, SkPaint* skPaint, const minikin::MinikinPaint& paint, Loading Loading @@ -131,8 +133,8 @@ std::shared_ptr<minikin::MinikinFont> MinikinFontSkia::createFontWithVariation( sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault()); sk_sp<SkTypeface> face(fm->makeFromStream(std::move(stream), params)); return std::make_shared<MinikinFontSkia>(std::move(face), mFontData, mFontSize, ttcIndex, variations); return std::make_shared<MinikinFontSkia>(std::move(face), mFontData, mFontSize, mFilePath, ttcIndex, variations); } uint32_t MinikinFontSkia::packPaintFlags(const SkPaint* paint) { Loading
libs/hwui/hwui/MinikinSkia.h +5 −2 Original line number Diff line number Diff line Loading @@ -28,8 +28,9 @@ namespace android { class ANDROID_API MinikinFontSkia : public minikin::MinikinFont { public: explicit MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize, int ttcIndex, const std::vector<minikin::FontVariation>& axes); MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize, std::string_view filePath, int ttcIndex, const std::vector<minikin::FontVariation>& axes); float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint& paint, const minikin::FontFakery& fakery) const override; Loading @@ -48,6 +49,7 @@ public: const void* GetFontData() const; size_t GetFontSize() const; int GetFontIndex() const; const std::string& getFilePath() const { return mFilePath; } const std::vector<minikin::FontVariation>& GetAxes() const; std::shared_ptr<minikin::MinikinFont> createFontWithVariation( const std::vector<minikin::FontVariation>&) const; Loading @@ -68,6 +70,7 @@ private: size_t mFontSize; int mTtcIndex; std::vector<minikin::FontVariation> mAxes; std::string mFilePath; }; } // namespace android Loading