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

Commit 6ffdd11f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make casting to bidi flags explicit"

parents 637c1ba1 7c93e868
Loading
Loading
Loading
Loading
+16 −14
Original line number Diff line number Diff line
@@ -112,8 +112,8 @@ namespace PaintGlue {
        float measured = 0;

        std::unique_ptr<float[]> advancesArray(new float[count]);
        MinikinUtils::measureText(&paint, bidiFlags, typeface, text, 0, count, count,
                advancesArray.get());
        MinikinUtils::measureText(&paint, static_cast<minikin::Bidi>(bidiFlags), typeface, text,
                0, count, count, advancesArray.get());

        for (int i = 0; i < count; i++) {
            // traverse in the given direction
@@ -203,8 +203,9 @@ namespace PaintGlue {
        if (advances) {
            advancesArray.reset(new jfloat[count]);
        }
        const float advance = MinikinUtils::measureText(paint, bidiFlags, typeface, text,
                start, count, contextCount, advancesArray.get());
        const float advance = MinikinUtils::measureText(paint,
                static_cast<minikin::Bidi>(bidiFlags), typeface, text, start, count, contextCount,
                advancesArray.get());
        if (advances) {
            env->SetFloatArrayRegion(advances, advancesIndex, count, advancesArray.get());
        }
@@ -239,7 +240,7 @@ namespace PaintGlue {
    static jint doTextRunCursor(JNIEnv *env, Paint* paint, const Typeface* typeface,
            const jchar *text, jint start, jint count, jint dir, jint offset, jint opt) {
        minikin::GraphemeBreak::MoveOpt moveOpt = minikin::GraphemeBreak::MoveOpt(opt);
        int bidiFlags = dir == 1 ? minikin::kBidi_Force_RTL : minikin::kBidi_Force_LTR;
        minikin::Bidi bidiFlags = dir == 1 ? minikin::Bidi::FORCE_RTL : minikin::Bidi::FORCE_LTR;
        std::unique_ptr<float[]> advancesArray(new float[count]);
        MinikinUtils::measureText(paint, bidiFlags, typeface, text, start, count, start + count,
                advancesArray.get());
@@ -305,7 +306,7 @@ namespace PaintGlue {
    static void getTextPath(JNIEnv* env, Paint* paint, const Typeface* typeface, const jchar* text,
            jint count, jint bidiFlags, jfloat x, jfloat y, SkPath* path) {
        minikin::Layout layout = MinikinUtils::doLayout(
                paint, bidiFlags, typeface, text, 0, count, count);
                paint, static_cast<minikin::Bidi>(bidiFlags), typeface, text, 0, count, count);
        size_t nGlyphs = layout.nGlyphs();
        uint16_t* glyphs = new uint16_t[nGlyphs];
        SkPoint* pos = new SkPoint[nGlyphs];
@@ -346,8 +347,8 @@ namespace PaintGlue {
        SkRect  r;
        SkIRect ir;

        minikin::Layout layout = MinikinUtils::doLayout(
                &paint, bidiFlags, typeface, text, 0, count, count);
        minikin::Layout layout = MinikinUtils::doLayout(&paint,
                static_cast<minikin::Bidi>(bidiFlags), typeface, text, 0, count, count);
        minikin::MinikinRect rect;
        layout.getBounds(&rect);
        r.fLeft = rect.mLeft;
@@ -461,8 +462,9 @@ namespace PaintGlue {
            nChars++;
            prevCp = cp;
        }
        minikin::Layout layout = MinikinUtils::doLayout(
                paint, bidiFlags, typeface, str.get(), 0, str.size(), str.size());
        minikin::Layout layout = MinikinUtils::doLayout(paint,
                static_cast<minikin::Bidi>(bidiFlags), typeface, str.get(), 0, str.size(),
                str.size());
        size_t nGlyphs = countNonSpaceGlyphs(layout);
        if (nGlyphs != 1 && nChars > 1) {
            // multiple-character input, and was not a ligature
@@ -481,8 +483,8 @@ namespace PaintGlue {
            // since ZZ is reserved for unknown or invalid territory.
            // U+1F1FF (REGIONAL INDICATOR SYMBOL LETTER Z) is \uD83C\uDDFF in UTF16.
            static const jchar ZZ_FLAG_STR[] = { 0xD83C, 0xDDFF, 0xD83C, 0xDDFF };
            minikin::Layout zzLayout = MinikinUtils::doLayout(
                    paint, bidiFlags, typeface, ZZ_FLAG_STR, 0, 4, 4);
            minikin::Layout zzLayout = MinikinUtils::doLayout(paint,
                    static_cast<minikin::Bidi>(bidiFlags), typeface, ZZ_FLAG_STR, 0, 4, 4);
            if (zzLayout.nGlyphs() != 1 || layoutContainsNotdef(zzLayout)) {
                // The font collection doesn't have a glyph for unknown flag. Just return true.
                return true;
@@ -494,7 +496,7 @@ namespace PaintGlue {

    static jfloat doRunAdvance(const Paint* paint, const Typeface* typeface, const jchar buf[],
            jint start, jint count, jint bufSize, jboolean isRtl, jint offset) {
        int bidiFlags = isRtl ? minikin::kBidi_Force_RTL : minikin::kBidi_Force_LTR;
        minikin::Bidi bidiFlags = isRtl ? minikin::Bidi::FORCE_RTL : minikin::Bidi::FORCE_LTR;
        if (offset == start + count) {
            return MinikinUtils::measureText(paint, bidiFlags, typeface, buf, start, count,
                    bufSize, nullptr);
@@ -519,7 +521,7 @@ namespace PaintGlue {

    static jint doOffsetForAdvance(const Paint* paint, const Typeface* typeface, const jchar buf[],
            jint start, jint count, jint bufSize, jboolean isRtl, jfloat advance) {
        int bidiFlags = isRtl ? minikin::kBidi_Force_RTL : minikin::kBidi_Force_LTR;
        minikin::Bidi bidiFlags = isRtl ? minikin::Bidi::FORCE_RTL : minikin::Bidi::FORCE_LTR;
        std::unique_ptr<float[]> advancesArray(new float[count]);
        MinikinUtils::measureText(paint, bidiFlags, typeface, buf, start, count, bufSize,
                advancesArray.get());
+8 −8
Original line number Diff line number Diff line
@@ -480,7 +480,7 @@ static void drawTextChars(JNIEnv* env, jobject, jlong canvasHandle, jcharArray t
    const Typeface* typeface = paint->getAndroidTypeface();
    jchar* jchars = env->GetCharArrayElements(text, NULL);
    get_canvas(canvasHandle)->drawText(jchars + index, 0, count, count, x, y,
                                       bidiFlags, *paint, typeface);
            static_cast<minikin::Bidi>(bidiFlags), *paint, typeface);
    env->ReleaseCharArrayElements(text, jchars, JNI_ABORT);
}

@@ -492,7 +492,7 @@ static void drawTextString(JNIEnv* env, jobject, jlong canvasHandle, jstring tex
    const int count = end - start;
    const jchar* jchars = env->GetStringChars(text, NULL);
    get_canvas(canvasHandle)->drawText(jchars + start, 0, count, count, x, y,
                                       bidiFlags, *paint, typeface);
            static_cast<minikin::Bidi>(bidiFlags), *paint, typeface);
    env->ReleaseStringChars(text, jchars);
}

@@ -502,7 +502,7 @@ static void drawTextRunChars(JNIEnv* env, jobject, jlong canvasHandle, jcharArra
    Paint* paint = reinterpret_cast<Paint*>(paintHandle);
    const Typeface* typeface = paint->getAndroidTypeface();

    const int bidiFlags = isRtl ? minikin::kBidi_Force_RTL : minikin::kBidi_Force_LTR;
    const minikin::Bidi bidiFlags = isRtl ? minikin::Bidi::FORCE_RTL : minikin::Bidi::FORCE_LTR;
    jchar* jchars = env->GetCharArrayElements(text, NULL);
    get_canvas(canvasHandle)->drawText(jchars + contextIndex, index - contextIndex, count,
                                       contextCount, x, y, bidiFlags, *paint, typeface);
@@ -515,7 +515,7 @@ static void drawTextRunString(JNIEnv* env, jobject obj, jlong canvasHandle, jstr
    Paint* paint = reinterpret_cast<Paint*>(paintHandle);
    const Typeface* typeface = paint->getAndroidTypeface();

    int bidiFlags = isRtl ? minikin::kBidi_Force_RTL : minikin::kBidi_Force_LTR;
    const minikin::Bidi bidiFlags = isRtl ? minikin::Bidi::FORCE_RTL : minikin::Bidi::FORCE_LTR;
    jint count = end - start;
    jint contextCount = contextEnd - contextStart;
    const jchar* jchars = env->GetStringChars(text, NULL);
@@ -533,8 +533,8 @@ static void drawTextOnPathChars(JNIEnv* env, jobject, jlong canvasHandle, jcharA

    jchar* jchars = env->GetCharArrayElements(text, NULL);

    get_canvas(canvasHandle)->drawTextOnPath(jchars + index, count, bidiFlags, *path,
                   hOffset, vOffset, *paint, typeface);
    get_canvas(canvasHandle)->drawTextOnPath(jchars + index, count,
            static_cast<minikin::Bidi>(bidiFlags), *path, hOffset, vOffset, *paint, typeface);

    env->ReleaseCharArrayElements(text, jchars, 0);
}
@@ -549,8 +549,8 @@ static void drawTextOnPathString(JNIEnv* env, jobject, jlong canvasHandle, jstri
    const jchar* jchars = env->GetStringChars(text, NULL);
    int count = env->GetStringLength(text);

    get_canvas(canvasHandle)->drawTextOnPath(jchars, count, bidiFlags, *path,
                   hOffset, vOffset, *paint, typeface);
    get_canvas(canvasHandle)->drawTextOnPath(jchars, count, static_cast<minikin::Bidi>(bidiFlags),
            *path, hOffset, vOffset, *paint, typeface);

    env->ReleaseStringChars(text, jchars);
}
+5 −3
Original line number Diff line number Diff line
@@ -158,7 +158,8 @@ private:
};

void Canvas::drawText(const uint16_t* text, int start, int count, int contextCount,
        float x, float y, int bidiFlags, const Paint& origPaint, const Typeface* typeface) {
        float x, float y, minikin::Bidi bidiFlags, const Paint& origPaint,
        const Typeface* typeface) {
    // minikin may modify the original paint
    Paint paint(origPaint);

@@ -206,8 +207,9 @@ private:
    const SkPath& path;
};

void Canvas::drawTextOnPath(const uint16_t* text, int count, int bidiFlags, const SkPath& path,
        float hOffset, float vOffset, const Paint& paint, const Typeface* typeface) {
void Canvas::drawTextOnPath(const uint16_t* text, int count, minikin::Bidi bidiFlags,
        const SkPath& path, float hOffset, float vOffset, const Paint& paint,
        const Typeface* typeface) {
    Paint paintCopy(paint);
    minikin::Layout layout = MinikinUtils::doLayout(
            &paintCopy, bidiFlags, typeface, text, 0, count, count);
+6 −3
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ class SkVertices;

namespace minikin {
    class Layout;
    enum class Bidi : uint8_t;
}

namespace android {
@@ -255,10 +256,12 @@ public:
     * and delegating the final draw to virtual drawGlyphs method.
     */
    void drawText(const uint16_t* text, int start, int count, int contextCount,
            float x, float y, int bidiFlags, const Paint& origPaint, const Typeface* typeface);
            float x, float y, minikin::Bidi bidiFlags, const Paint& origPaint,
            const Typeface* typeface);

    void drawTextOnPath(const uint16_t* text, int count, int bidiFlags, const SkPath& path,
            float hOffset, float vOffset, const Paint& paint, const Typeface* typeface);
    void drawTextOnPath(const uint16_t* text, int count, minikin::Bidi bidiFlags,
            const SkPath& path, float hOffset, float vOffset, const Paint& paint,
            const Typeface* typeface);

protected:
    void drawTextDecorations(float x, float y, float length, const SkPaint& paint);
+5 −5
Original line number Diff line number Diff line
@@ -51,9 +51,8 @@ minikin::FontStyle MinikinUtils::prepareMinikinPaint(minikin::MinikinPaint* mini
    return minikinStyle;
}

minikin::Layout MinikinUtils::doLayout(const Paint* paint, int bidiFlags,
        const Typeface* typeface, const uint16_t* buf, size_t start, size_t count,
        size_t bufSize) {
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;
    minikin::FontStyle minikinStyle = prepareMinikinPaint(&minikinPaint, paint, typeface);
    minikin::Layout layout;
@@ -62,8 +61,9 @@ minikin::Layout MinikinUtils::doLayout(const Paint* paint, int bidiFlags,
    return layout;
}

float MinikinUtils::measureText(const Paint* paint, int bidiFlags, const Typeface* typeface,
        const uint16_t* buf, size_t start, size_t count, size_t bufSize, float *advances) {
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;
    minikin::FontStyle minikinStyle = prepareMinikinPaint(&minikinPaint, paint, typeface);
    const Typeface* resolvedTypeface = Typeface::resolveDefault(typeface);
Loading