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

Commit 7c93e868 authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Make casting to bidi flags explicit

Bug: 65024629
Test: checkbuild
Change-Id: I0771036359cc1ee5471e9fd4da304598a2f8bf98
parent 38b93486
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