Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3fb3ac1a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Keep file path used to create SkTypeface in MinikinFontSkia"

parents 4b814637 54c6a272
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);

+6 −4
Original line number Diff line number Diff line
@@ -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);
@@ -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)));
@@ -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)));
@@ -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",
+5 −2
Original line number Diff line number Diff line
@@ -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);
@@ -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();
    }
+6 −4
Original line number Diff line number Diff line
@@ -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,
@@ -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) {
+5 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -68,6 +70,7 @@ private:
    size_t mFontSize;
    int mTtcIndex;
    std::vector<minikin::FontVariation> mAxes;
    std::string mFilePath;
};

}  // namespace android
Loading