#include "include/core/SkPathEffect.h"
#include "include/core/SkFlattenable.h"
#include "include/core/SkMatrix.h"
#include "include/core/SkPath.h"
#include "include/core/SkRefCnt.h"
#include "include/private/base/SkAssert.h"
#include "src/core/SkPathEffectBase.h"
#include "src/core/SkReadBuffer.h"
#include "src/core/SkWriteBuffer.h"
#include <cstddef>
#include <utility>
class SkStrokeRec;
struct SkDeserialProcs;
struct SkRect;
bool SkPathEffect::filterPath(SkPath* dst, const SkPath& src, SkStrokeRec* rec,
const SkRect* bounds) const { … }
bool SkPathEffect::filterPath(SkPath* dst, const SkPath& src, SkStrokeRec* rec,
const SkRect* bounds, const SkMatrix& ctm) const { … }
bool SkPathEffectBase::asPoints(PointData* results, const SkPath& src,
const SkStrokeRec& rec, const SkMatrix& mx, const SkRect* rect) const { … }
SkPathEffect::DashType SkPathEffect::asADash(DashInfo* info) const { … }
bool SkPathEffect::needsCTM() const { … }
class SkPairPathEffect : public SkPathEffectBase { … };
class SkComposePathEffect : public SkPairPathEffect { … };
sk_sp<SkFlattenable> SkComposePathEffect::CreateProc(SkReadBuffer& buffer) { … }
class SkSumPathEffect : public SkPairPathEffect { … };
sk_sp<SkFlattenable> SkSumPathEffect::CreateProc(SkReadBuffer& buffer) { … }
sk_sp<SkPathEffect> SkPathEffect::MakeSum(sk_sp<SkPathEffect> first, sk_sp<SkPathEffect> second) { … }
sk_sp<SkPathEffect> SkPathEffect::MakeCompose(sk_sp<SkPathEffect> outer,
sk_sp<SkPathEffect> inner) { … }
void SkPathEffectBase::RegisterFlattenables() { … }
sk_sp<SkPathEffect> SkPathEffect::Deserialize(const void* data, size_t size,
const SkDeserialProcs* procs) { … }