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

Commit 5e22f57b authored by Seigo Nonaka's avatar Seigo Nonaka Committed by Android (Google) Code Review
Browse files

Merge "Store FontCollection in MinikinPaint"

parents bb1c8849 c0a35e7b
Loading
Loading
Loading
Loading
+6 −11
Original line number Original line Diff line number Diff line
@@ -137,18 +137,15 @@ class Run {


class StyleRun : public Run {
class StyleRun : public Run {
    public:
    public:
        StyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint,
        StyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint, bool isRtl)
                std::shared_ptr<minikin::FontCollection>&& collection, bool isRtl)
            : Run(start, end), mPaint(std::move(paint)), mIsRtl(isRtl) {}
            : Run(start, end), mPaint(std::move(paint)), mCollection(std::move(collection)),
              mIsRtl(isRtl) {}


        void addTo(minikin::LineBreaker* lineBreaker) override {
        void addTo(minikin::LineBreaker* lineBreaker) override {
            lineBreaker->addStyleRun(&mPaint, mCollection, mStart, mEnd, mIsRtl);
            lineBreaker->addStyleRun(&mPaint, mStart, mEnd, mIsRtl);
        }
        }


    private:
    private:
        minikin::MinikinPaint mPaint;
        minikin::MinikinPaint mPaint;
        std::shared_ptr<minikin::FontCollection> mCollection;
        const bool mIsRtl;
        const bool mIsRtl;
};
};


@@ -176,10 +173,8 @@ class StaticLayoutNative {
              mIndents(std::move(indents)), mLeftPaddings(std::move(leftPaddings)),
              mIndents(std::move(indents)), mLeftPaddings(std::move(leftPaddings)),
              mRightPaddings(std::move(rightPaddings)) {}
              mRightPaddings(std::move(rightPaddings)) {}


        void addStyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint,
        void addStyleRun(int32_t start, int32_t end, minikin::MinikinPaint&& paint, bool isRtl) {
                         std::shared_ptr<minikin::FontCollection> collection, bool isRtl) {
            mRuns.emplace_back(std::make_unique<StyleRun>(start, end, std::move(paint), isRtl));
            mRuns.emplace_back(std::make_unique<StyleRun>(
                    start, end, std::move(paint), std::move(collection), isRtl));
        }
        }


        void addReplacementRun(int32_t start, int32_t end, float width, uint32_t localeListId) {
        void addReplacementRun(int32_t start, int32_t end, float width, uint32_t localeListId) {
@@ -334,7 +329,7 @@ static void nAddStyleRun(jlong nativePtr, jlong nativePaint, jint start, jint en
    Paint* paint = reinterpret_cast<Paint*>(nativePaint);
    Paint* paint = reinterpret_cast<Paint*>(nativePaint);
    const Typeface* typeface = Typeface::resolveDefault(paint->getAndroidTypeface());
    const Typeface* typeface = Typeface::resolveDefault(paint->getAndroidTypeface());
    minikin::MinikinPaint minikinPaint = MinikinUtils::prepareMinikinPaint(paint, typeface);
    minikin::MinikinPaint minikinPaint = MinikinUtils::prepareMinikinPaint(paint, typeface);
    builder->addStyleRun(start, end, std::move(minikinPaint), typeface->fFontCollection, isRtl);
    builder->addStyleRun(start, end, std::move(minikinPaint), isRtl);
}
}


// CriticalNative
// CriticalNative
+21 −24
Original line number Original line Diff line number Diff line
@@ -30,45 +30,42 @@ minikin::MinikinPaint MinikinUtils::prepareMinikinPaint(const Paint* paint,
                                                        const Typeface* typeface) {
                                                        const Typeface* typeface) {
    const Typeface* resolvedFace = Typeface::resolveDefault(typeface);
    const Typeface* resolvedFace = Typeface::resolveDefault(typeface);
    minikin::FontStyle resolved = resolvedFace->fStyle;
    minikin::FontStyle resolved = resolvedFace->fStyle;

    const minikin::FontVariant minikinVariant =
    const minikin::FontVariant minikinVariant =
            (paint->getFontVariant() == minikin::FontVariant::ELEGANT)
            (paint->getFontVariant() == minikin::FontVariant::ELEGANT)
                    ? minikin::FontVariant::ELEGANT
                    ? minikin::FontVariant::ELEGANT
                    : minikin::FontVariant::COMPACT;
                    : minikin::FontVariant::COMPACT;

    float textSize = paint->getTextSize();
    minikin::MinikinPaint minikinPaint;
    if (!paint->isLinearText()) {
    /* Prepare minikin Paint */
        // If linear text is not specified, truncate the value.
    minikinPaint.size =
        textSize = trunc(textSize);
            paint->isLinearText() ? paint->getTextSize() : static_cast<int>(paint->getTextSize());
    }
    minikinPaint.scaleX = paint->getTextScaleX();
    return minikin::MinikinPaint(
    minikinPaint.skewX = paint->getTextSkewX();
            textSize,
    minikinPaint.letterSpacing = paint->getLetterSpacing();
            paint->getTextScaleX(),
    minikinPaint.wordSpacing = paint->getWordSpacing();
            paint->getTextSkewX(),
    minikinPaint.paintFlags = MinikinFontSkia::packPaintFlags(paint);
            paint->getLetterSpacing(),
    minikinPaint.localeListId = paint->getMinikinLocaleListId();
            paint->getWordSpacing(),
    minikinPaint.fontStyle = minikin::FontStyle(minikinVariant, resolved.weight, resolved.slant);
            MinikinFontSkia::packPaintFlags(paint),
    minikinPaint.fontFeatureSettings = paint->getFontFeatureSettings();
            paint->getMinikinLocaleListId(),
    minikinPaint.hyphenEdit = minikin::HyphenEdit(paint->getHyphenEdit());
            minikin::FontStyle(minikinVariant, resolved.weight, resolved.slant),
    return minikinPaint;
            minikin::HyphenEdit(paint->getHyphenEdit()),
            paint->getFontFeatureSettings(),
            resolvedFace->fFontCollection);
}
}


minikin::Layout MinikinUtils::doLayout(const Paint* paint, minikin::Bidi bidiFlags,
minikin::Layout MinikinUtils::doLayout(const Paint* paint, minikin::Bidi bidiFlags,
                                       const Typeface* typeface, const uint16_t* buf, size_t start,
                                       const Typeface* typeface, const uint16_t* buf, size_t start,
                                       size_t count, size_t bufSize) {
                                       size_t count, size_t bufSize) {
    minikin::MinikinPaint minikinPaint = prepareMinikinPaint(paint, typeface);
    minikin::Layout layout;
    minikin::Layout layout;
    layout.doLayout(buf, start, count, bufSize, bidiFlags, minikinPaint,
    layout.doLayout(buf, start, count, bufSize, bidiFlags, prepareMinikinPaint(paint, typeface));
                    Typeface::resolveDefault(typeface)->fFontCollection);
    return layout;
    return layout;
}
}


float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags,
float MinikinUtils::measureText(const Paint* paint, minikin::Bidi bidiFlags,
                                const Typeface* typeface, const uint16_t* buf, size_t start,
                                const Typeface* typeface, const uint16_t* buf, size_t start,
                                size_t count, size_t bufSize, float* advances) {
                                size_t count, size_t bufSize, float* advances) {
    minikin::MinikinPaint minikinPaint = prepareMinikinPaint(paint, typeface);
    return minikin::Layout::measureText(
    const Typeface* resolvedTypeface = Typeface::resolveDefault(typeface);
            buf, start, count, bufSize, bidiFlags, prepareMinikinPaint(paint, typeface), advances,
    return minikin::Layout::measureText(buf, start, count, bufSize, bidiFlags, minikinPaint,
                                        resolvedTypeface->fFontCollection, advances,
            nullptr /* extent */, nullptr /* overhangs */);
            nullptr /* extent */, nullptr /* overhangs */);
}
}