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

Commit a3024bd7 authored by Keisuke Kuroyanagi's avatar Keisuke Kuroyanagi
Browse files

Use light weight method for text measurement.

Bug: 24505153

Change-Id: I94823e8d546fbe0a29bc05e8841672c4cf9b5ecd
parent 88f04309
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,