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

Commit a420880c authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi Committed by Android (Google) Code Review
Browse files

Merge "Use light weight method for text measurement."

parents 702d4d97 a3024bd7
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -62,6 +62,15 @@ void MinikinUtils::doLayout(Layout* layout, const Paint* paint, int bidiFlags,
    layout->doLayout(buf, start, count, bufSize, bidiFlags, minikinStyle, minikinPaint);
}

float MinikinUtils::measureText(const Paint* paint, int bidiFlags, TypefaceImpl* typeface,
        const uint16_t* buf, size_t start, size_t count, size_t bufSize, float *advances) {
    FontCollection *font;
    MinikinPaint minikinPaint;
    FontStyle minikinStyle = prepareMinikinPaint(&minikinPaint, &font, paint, typeface);
    return Layout::measureText(buf, start, count, bufSize, bidiFlags, minikinStyle, minikinPaint,
            font, advances);
}

bool MinikinUtils::hasVariationSelector(TypefaceImpl* typeface, uint32_t codepoint, uint32_t vs) {
    const TypefaceImpl* resolvedFace = TypefaceImpl_resolveDefault(typeface);
    return resolvedFace->fFontCollection->hasVariationSelector(codepoint, vs);
+3 −0
Original line number Diff line number Diff line
@@ -40,6 +40,9 @@ public:
            TypefaceImpl* typeface, const uint16_t* buf, size_t start, size_t count,
            size_t bufSize);

    static float measureText(const Paint* paint, int bidiFlags, TypefaceImpl* typeface,
            const uint16_t* buf, size_t start, size_t count, size_t bufSize, float *advances);

    static bool hasVariationSelector(TypefaceImpl* typeface, uint32_t codepoint, uint32_t vs);

    static float xOffsetForTextAlign(Paint* paint, const Layout& layout);
+8 −8
Original line number Diff line number Diff line
@@ -493,16 +493,16 @@ namespace PaintGlue {
                return 0;
            }
        }

        Layout layout;
        MinikinUtils::doLayout(&layout, paint, bidiFlags, typeface, text, start, count,
                contextCount);
        if (advances != NULL) {
            std::unique_ptr<jfloat> advancesArray(new jfloat[count]);
            layout.getAdvances(advancesArray.get());
        std::unique_ptr<jfloat[]> advancesArray;
        if (advances) {
            advancesArray.reset(new jfloat[count]);
        }
        const float advance = MinikinUtils::measureText(paint, bidiFlags, typeface, text,
                start, count, contextCount, advancesArray.get());
        if (advances) {
            env->SetFloatArrayRegion(advances, advancesIndex, count, advancesArray.get());
        }
        return layout.getAdvance();
        return advance;
    }

    static jfloat getTextAdvances___CIIIII_FI(JNIEnv* env, jobject clazz, jlong paintHandle,