#include "include/core/SkPaint.h"
#include "include/core/SkPath.h"
#include "include/core/SkPoint.h"
#include "include/core/SkRect.h"
#include "include/core/SkRegion.h"
#include "include/core/SkScalar.h"
#include "include/private/base/SkAssert.h"
#include "include/private/base/SkDebug.h"
#include "include/private/base/SkFixed.h"
#include "include/private/base/SkFloatingPoint.h"
#include "include/private/base/SkMath.h"
#include "include/private/base/SkSafe32.h"
#include "src/base/SkMathPriv.h"
#include "src/base/SkUtils.h"
#include "src/base/SkVx.h"
#include "src/core/SkBlitter.h"
#include "src/core/SkFDot6.h"
#include "src/core/SkGeometry.h"
#include "src/core/SkLineClipper.h"
#include "src/core/SkPathPriv.h"
#include "src/core/SkRasterClip.h"
#include "src/core/SkScan.h"
#include <algorithm>
#include <array>
#include <cstdint>
#include <cstring>
static void horiline(int x, int stopx, SkFixed fy, SkFixed dy,
SkBlitter* blitter) { … }
static void vertline(int y, int stopy, SkFixed fx, SkFixed dx,
SkBlitter* blitter) { … }
#ifdef SK_DEBUG
static bool canConvertFDot6ToFixed(SkFDot6 x) { … }
#endif
void SkScan::HairLineRgn(const SkPoint array[], int arrayCount, const SkRegion* clip,
SkBlitter* origBlitter) { … }
void SkScan::HairRect(const SkRect& rect, const SkRasterClip& clip, SkBlitter* blitter) { … }
#define kMaxCubicSubdivideLevel …
#define kMaxQuadSubdivideLevel …
float2;
static uint32_t compute_int_quad_dist(const SkPoint pts[3]) { … }
static void hair_quad(const SkPoint pts[3], const SkRegion* clip,
SkBlitter* blitter, int level, SkScan::HairRgnProc lineproc) { … }
static SkRect compute_nocheck_quad_bounds(const SkPoint pts[3]) { … }
static bool is_inverted(const SkRect& r) { … }
static bool geometric_overlap(const SkRect& a, const SkRect& b) { … }
static bool geometric_contains(const SkRect& outer, const SkRect& inner) { … }
static inline void hairquad(const SkPoint pts[3], const SkRegion* clip, const SkRect* insetClip, const SkRect* outsetClip,
SkBlitter* blitter, int level, SkScan::HairRgnProc lineproc) { … }
static inline SkScalar max_component(const float2& value) { … }
static inline int compute_cubic_segs(const SkPoint pts[4]) { … }
static bool lt_90(SkPoint p0, SkPoint pivot, SkPoint p2) { … }
static bool quick_cubic_niceness_check(const SkPoint pts[4]) { … }
mask2;
static inline mask2 float2_is_finite(const float2& x) { … }
static void hair_cubic(const SkPoint pts[4], const SkRegion* clip, SkBlitter* blitter,
SkScan::HairRgnProc lineproc) { … }
static SkRect compute_nocheck_cubic_bounds(const SkPoint pts[4]) { … }
static inline void haircubic(const SkPoint pts[4], const SkRegion* clip, const SkRect* insetClip, const SkRect* outsetClip,
SkBlitter* blitter, int level, SkScan::HairRgnProc lineproc) { … }
static int compute_quad_level(const SkPoint pts[3]) { … }
template <SkPaint::Cap capStyle>
void extend_pts(SkPath::Verb prevVerb, SkPath::Verb nextVerb, SkPoint* pts, int ptCount) { … }
template <SkPaint::Cap capStyle>
void hair_path(const SkPath& path, const SkRasterClip& rclip, SkBlitter* blitter,
SkScan::HairRgnProc lineproc) { … }
void SkScan::HairPath(const SkPath& path, const SkRasterClip& clip, SkBlitter* blitter) { … }
void SkScan::AntiHairPath(const SkPath& path, const SkRasterClip& clip, SkBlitter* blitter) { … }
void SkScan::HairSquarePath(const SkPath& path, const SkRasterClip& clip, SkBlitter* blitter) { … }
void SkScan::AntiHairSquarePath(const SkPath& path, const SkRasterClip& clip, SkBlitter* blitter) { … }
void SkScan::HairRoundPath(const SkPath& path, const SkRasterClip& clip, SkBlitter* blitter) { … }
void SkScan::AntiHairRoundPath(const SkPath& path, const SkRasterClip& clip, SkBlitter* blitter) { … }
void SkScan::FrameRect(const SkRect& r, const SkPoint& strokeSize,
const SkRasterClip& clip, SkBlitter* blitter) { … }
void SkScan::HairLine(const SkPoint pts[], int count, const SkRasterClip& clip,
SkBlitter* blitter) { … }
void SkScan::AntiHairLine(const SkPoint pts[], int count, const SkRasterClip& clip,
SkBlitter* blitter) { … }