31 if (dist <= radius * 2) {
35 *
step *= radius / dist;
59 bool prevIsValid =
true;
68 switch (verb = iter.
next(pts)) {
72 dst->lineTo(lastCorner);
87 dst->moveTo(moveTo +
step);
90 dst->quadTo(pts[0].fX, pts[0].fY, pts[0].fX +
step.
fX,
106 dst->quadTo(pts[1], pts[2]);
126 dst->cubicTo(pts[1], pts[2], pts[3]);
131 if (firstStep.
fX || firstStep.
fY) {
132 dst->quadTo(lastCorner.
fX, lastCorner.
fY,
133 lastCorner.
fX + firstStep.
fX,
134 lastCorner.
fY + firstStep.
fY);
141 dst->lineTo(lastCorner);
167 buffer.writeScalar(fRadius);
171 const char*
getTypeName()
const override {
return "SkCornerPathEffect"; }
static int step(int x, SkScalar min, SkScalar max)
#define SkDEBUGFAIL(message)
static bool ComputeStep(const SkPoint &a, const SkPoint &b, SkScalar radius, SkPoint *step)
static bool SkIsFinite(T x, Pack... values)
SkCornerPathEffectImpl(SkScalar radius)
Factory getFactory() const override
const char * getTypeName() const override
bool computeFastBounds(SkRect *) const override
static sk_sp< SkFlattenable > CreateProc(SkReadBuffer &buffer)
bool onFilterPath(SkPath *dst, const SkPath &src, SkStrokeRec *, const SkRect *, const SkMatrix &) const override
void flatten(SkWriteBuffer &buffer) const override
static void RegisterFlattenables()
static sk_sp< SkPathEffect > Make(SkScalar radius)
sk_sp< SkFlattenable >(* Factory)(SkReadBuffer &)
static void Register(const char name[], Factory)
bool isClosedContour() const
Verb next(SkPoint pts[4])
SkScalar conicWeight() const
static const uint8_t buffer[]
void set(float x, float y)
static float Distance(const SkPoint &a, const SkPoint &b)