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; }
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; }