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

Commit 7a18b799 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Implement getAxes() method.

getAxes() is necessary for calling hb_font_set_variations.

Test: None
Change-Id: Iec4759189b0653aa483ba85682d10b2b81beaab8
parent d2c47843
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -83,7 +83,8 @@ static void FontFamily_unref(jlong familyPtr) {
static void addSkTypeface(jlong builderPtr, sk_sp<SkTypeface> 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<minikin::FontVariation>());
    NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(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<minikin::FontVariation>());
    NativeFamilyBuilder* builder = reinterpret_cast<NativeFamilyBuilder*>(builderPtr);
    builder->fonts.push_back(minikin::Font(minikinFont,
            minikin::FontStyle(weight / 100, isItalic)));
+7 −3
Original line number Diff line number Diff line
@@ -25,9 +25,9 @@
namespace android {

MinikinFontSkia::MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize,
        int ttcIndex) :
        int ttcIndex, const std::vector<minikin::FontVariation>& 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<minikin::FontVariation>& MinikinFontSkia::GetAxes() const {
    return mAxes;
}

minikin::MinikinFont* MinikinFontSkia::createFontWithVariation(
        const std::vector<minikin::FontVariation>& variations) const {
    SkFontMgr::FontParameters params;
@@ -106,7 +110,7 @@ minikin::MinikinFont* MinikinFontSkia::createFontWithVariation(
    sk_sp<SkFontMgr> fm(SkFontMgr::RefDefault());
    sk_sp<SkTypeface> 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) {
+3 −1
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ namespace android {
class ANDROID_API MinikinFontSkia : public minikin::MinikinFont {
public:
    explicit MinikinFontSkia(sk_sp<SkTypeface> typeface, const void* fontData, size_t fontSize,
        int ttcIndex);
        int ttcIndex, const std::vector<minikin::FontVariation>& 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<minikin::FontVariation>& GetAxes() const;
    minikin::MinikinFont* createFontWithVariation(
            const std::vector<minikin::FontVariation>&) const;

@@ -61,6 +62,7 @@ private:
    const void* mFontData;
    size_t mFontSize;
    int mTtcIndex;
    std::vector<minikin::FontVariation> mAxes;
};

}  // namespace android
+2 −1
Original line number Diff line number Diff line
@@ -150,7 +150,8 @@ void Typeface::setRobotoTypefaceForTest() {
    sk_sp<SkTypeface> 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::FontVariation>());
    minikin::FontFamily* family = new minikin::FontFamily(
                 std::vector<minikin::Font>({ minikin::Font(font, minikin::FontStyle()) }));
    font->Unref();