#include "src/utils/SkDashPathPriv.h"
#include "include/core/SkPaint.h"
#include "include/core/SkPath.h"
#include "include/core/SkPathEffect.h"
#include "include/core/SkPathMeasure.h"
#include "include/core/SkPoint.h"
#include "include/core/SkRect.h"
#include "include/core/SkScalar.h"
#include "include/core/SkStrokeRec.h"
#include "include/core/SkTypes.h"
#include "include/private/base/SkAlign.h"
#include "include/private/base/SkFloatingPoint.h"
#include "include/private/base/SkTo.h"
#include "src/core/SkPathEnums.h"
#include "src/core/SkPathPriv.h"
#include "src/core/SkPointPriv.h"
#include <algorithm>
#include <cmath>
#include <cstdint>
#include <iterator>
static inline int is_even(int x) { … }
static SkScalar find_first_interval(const SkScalar intervals[], SkScalar phase,
int32_t* index, int count) { … }
void SkDashPath::CalcDashParameters(SkScalar phase, const SkScalar intervals[], int32_t count,
SkScalar* initialDashLength, int32_t* initialDashIndex,
SkScalar* intervalLength, SkScalar* adjustedPhase) { … }
static void outset_for_stroke(SkRect* rect, const SkStrokeRec& rec) { … }
static void adjust_zero_length_line(SkPoint pts[2]) { … }
static bool clip_line(SkPoint pts[2], const SkRect& bounds, SkScalar intervalLength,
SkScalar priorPhase) { … }
static bool cull_path(const SkPath& srcPath, const SkStrokeRec& rec,
const SkRect* cullRect, SkScalar intervalLength, SkPath* dstPath) { … }
class SpecialLineRec { … };
bool SkDashPath::InternalFilter(SkPath* dst, const SkPath& src, SkStrokeRec* rec,
const SkRect* cullRect, const SkScalar aIntervals[],
int32_t count, SkScalar initialDashLength, int32_t initialDashIndex,
SkScalar intervalLength, SkScalar startPhase,
StrokeRecApplication strokeRecApplication) { … }
bool SkDashPath::FilterDashPath(SkPath* dst, const SkPath& src, SkStrokeRec* rec,
const SkRect* cullRect, const SkPathEffect::DashInfo& info) { … }
bool SkDashPath::ValidDashPath(SkScalar phase, const SkScalar intervals[], int32_t count) { … }