blob: 35cc67f8af4447eaf07eeee867d2ed4a1814973e [file] [log] [blame] [edit]
/*
* Copyright 2025 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "fuzz/Fuzz.h"
#include "fuzz/FuzzCanvasHelpers.h"
#include "fuzz/FuzzCommon.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPath.h"
#include "include/core/SkRRect.h"
#include "include/core/SkRect.h"
#include "src/gpu/ganesh/geometry/GrStyledShape.h"
DEF_FUZZ(GrStyledShape, fuzz) {
SkPathBuilder pb;
FuzzNicePath(fuzz, &pb, 10);
SkRect rect;
fuzz->next(&rect);
if (!rect.isFinite()) {
return;
}
SkRRect rrect;
fuzz->next(&rrect);
if (!rrect.isValid()) {
return;
}
SkPaint paint;
FuzzPaint(fuzz, &paint, 3);
GrStyledShape shape1(pb.detach(), paint);
GrStyledShape shape2(rect, paint);
GrStyledShape shape3(rrect, paint);
SkPathBuilder pb2;
FuzzNicePath(fuzz, &pb2, 10);
SkPath path = pb.detach();
GrStyledShape shape4(path);
GrStyledShape shape5(rect);
GrStyledShape shape6(rrect);
GrStyledShape shape7(SkPath::Rect(rect));
GrStyledShape shape8(SkPath::RRect(rrect));
GrStyledShape shape9(SkPath::Oval(rect));
GrStyledShape shape10 = GrStyledShape::MakeFilled(shape4);
auto exercise_shape = [&](const GrStyledShape& shape) {
shape.style();
shape.simplified();
GrStyle::Apply apply;
fuzz->nextEnum(&apply, GrStyle::Apply::kPathEffectAndStrokeRec);
SkScalar scale;
fuzz->nextRange(&scale, 0.001f, 20.0f);
shape.applyStyle(apply, scale);
shape.isRect();
SkRRect r;
bool inverted;
shape.asRRect(&r, &inverted);
SkPoint pts[2];
shape.asLine(pts, &inverted);
SkRect rects[2];
shape.asNestedRects(rects);
SkPath p = shape.asPath();
SkASSERT_RELEASE(p.isValid());
shape.isEmpty();
shape.bounds();
shape.styledBounds();
shape.knownToBeConvex();
shape.knownDirection();
shape.inverseFilled();
shape.mayBeInverseFilledAfterStyling();
shape.knownToBeClosed();
shape.segmentMask();
};
exercise_shape(shape1);
exercise_shape(shape2);
exercise_shape(shape3);
exercise_shape(shape4);
exercise_shape(shape5);
exercise_shape(shape6);
exercise_shape(shape7);
exercise_shape(shape8);
exercise_shape(shape9);
exercise_shape(shape10);
}