static SkPathEffect* make_path_effect(bool canBeNull = true) {
    SkPathEffect* pathEffect = nullptr;
    if (canBeNull && (R(3) == 1)) { return pathEffect; }

    switch (R(9)) {
        case 0:
            pathEffect = SkArcToPathEffect::Create(make_scalar(true));
            break;
        case 1: {
            SkAutoTUnref<SkPathEffect> outer(make_path_effect(false));
            SkAutoTUnref<SkPathEffect> inner(make_path_effect(false));
            pathEffect = SkComposePathEffect::Create(outer, inner);
            break;
        }
        case 2:
            pathEffect = SkCornerPathEffect::Create(make_scalar());
            break;
        case 3: {
            int count = R(10);
            SkScalar intervals[10];
            for (int i = 0; i < count; ++i) {
                intervals[i] = make_scalar();
            }
            pathEffect = SkDashPathEffect::Create(intervals, count, make_scalar());
            break;
        }
        case 4:
            pathEffect = SkDiscretePathEffect::Create(make_scalar(), make_scalar());
            break;
        case 5:
            pathEffect = SkPath1DPathEffect::Create(make_path(),
                                                    make_scalar(),
                                                    make_scalar(),
                                                    make_path_1d_path_effect_style());
            break;
        case 6:
            pathEffect = SkLine2DPathEffect::Create(make_scalar(), make_matrix());
            break;
        case 7:
            pathEffect = SkPath2DPathEffect::Create(make_matrix(), make_path());
            break;
        case 8:
        default:
            pathEffect = SkSumPathEffect::Create(make_path_effect(false),
                                                 make_path_effect(false));
            break;
    }
    return pathEffect;
}
static sk_sp<SkPathEffect> make_path_effect(bool canBeNull = true) {
    sk_sp<SkPathEffect> pathEffect;
    if (canBeNull && (R(3) == 1)) { return pathEffect; }

    switch (R(8)) {
        case 0:
            pathEffect = SkPath2DPathEffect::Make(make_matrix(), make_path());
            break;
        case 1:
            pathEffect = SkPathEffect::MakeCompose(make_path_effect(false),
                                                   make_path_effect(false));
            break;
        case 2:
            pathEffect = SkCornerPathEffect::Make(make_scalar());
            break;
        case 3: {
            int count = R(10);
            SkScalar intervals[10];
            for (int i = 0; i < count; ++i) {
                intervals[i] = make_scalar();
            }
            pathEffect = SkDashPathEffect::Make(intervals, count, make_scalar());
            break;
        }
        case 4:
            pathEffect = SkDiscretePathEffect::Make(make_scalar(), make_scalar());
            break;
        case 5:
            pathEffect = SkPath1DPathEffect::Make(make_path(), make_scalar(), make_scalar(),
                                                  make_path_1d_path_effect_style());
            break;
        case 6:
            pathEffect = SkLine2DPathEffect::Make(make_scalar(), make_matrix());
            break;
        case 7:
        default:
            pathEffect = SkPathEffect::MakeSum(make_path_effect(false),
                                               make_path_effect(false));
            break;
    }
    return pathEffect;
}
예제 #3
0
static sk_sp<SkPathEffect> make_path_effect(bool canBeNull = true) {
    sk_sp<SkPathEffect> pathEffect;
    uint8_t s;
    fuzz->nextRange(&s, 0, 2);
    if (canBeNull && s == 0) { return pathEffect; }

    fuzz->nextRange(&s, 0, 8);

    switch (s) {
        case 0: {
            SkScalar a = make_number(true);
            pathEffect = SkArcToPathEffect::Make(a);
            break;
        }
        case 1: {
            sk_sp<SkPathEffect> a = make_path_effect(false);
            sk_sp<SkPathEffect> b = make_path_effect(false);
            pathEffect = SkPathEffect::MakeCompose(a, b);
            break;
        }
        case 2: {
            SkScalar a = make_number(false);
            pathEffect = SkCornerPathEffect::Make(a);
            break;
        }
        case 3: {
            uint8_t count;
            fuzz->nextRange(&count, 0, 9);
            SkScalar intervals[10];
            fuzz->nextN(intervals, 10);
            SkScalar a = make_number(false);
            pathEffect = SkDashPathEffect::Make(intervals, count, a);
            break;
        }
        case 4: {
            SkScalar a, b;
            fuzz->next(&a, &b);
            pathEffect = SkDiscretePathEffect::Make(a, b);
            break;
        }
        case 5: {
            SkPath path = make_path();
            SkScalar a, b;
            fuzz->next(&a, &b);
            SkPath1DPathEffect::Style style = make_path_1d_path_effect_style();
            pathEffect = SkPath1DPathEffect::Make(path, a, b, style);
            break;
        }
        case 6: {
            SkScalar a = make_number(false);
            SkMatrix m;
            init_matrix(&m);
            pathEffect = SkLine2DPathEffect::Make(a, m);
            break;
        }
        case 7: {
            SkPath path = make_path();
            SkMatrix m;
            init_matrix(&m);
            pathEffect = SkPath2DPathEffect::Make(m, path);
            break;
        }
        case 8:
        default: {
            sk_sp<SkPathEffect> a = make_path_effect(false);
            sk_sp<SkPathEffect> b = make_path_effect(false);
            pathEffect = SkPathEffect::MakeCompose(a, b);
            break;
        }
    }
    return pathEffect;
}