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 Diff line number Diff line
@@ -137,18 +137,15 @@ class Run {

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

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

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

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

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

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

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

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

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

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