aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkPathMeasure.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkPathMeasure.cpp')
-rw-r--r--src/core/SkPathMeasure.cpp31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/core/SkPathMeasure.cpp b/src/core/SkPathMeasure.cpp
index 0da448f5f9..5a00b17f99 100644
--- a/src/core/SkPathMeasure.cpp
+++ b/src/core/SkPathMeasure.cpp
@@ -228,7 +228,7 @@ static SkScalar compute_quad_len(const SkPoint pts[3]) {
}
SkScalar SkPathMeasure::compute_quad_segs(const SkPoint pts[3],
- SkScalar distance, int mint, int maxt, int ptIndex) {
+ SkScalar distance, int mint, int maxt, unsigned ptIndex) {
if (tspan_big_enough(maxt - mint) && quad_too_curvy(pts)) {
SkPoint tmp[5];
int halft = (mint + maxt) >> 1;
@@ -253,7 +253,7 @@ SkScalar SkPathMeasure::compute_quad_segs(const SkPoint pts[3],
SkScalar SkPathMeasure::compute_conic_segs(const SkConic& conic, SkScalar distance,
int mint, const SkPoint& minPt,
- int maxt, const SkPoint& maxPt, int ptIndex) {
+ int maxt, const SkPoint& maxPt, unsigned ptIndex) {
int halft = (mint + maxt) >> 1;
SkPoint halfPt = conic.evalAt(tValue2Scalar(halft));
if (tspan_big_enough(maxt - mint) && conic_too_curvy(minPt, halfPt, maxPt)) {
@@ -275,7 +275,7 @@ SkScalar SkPathMeasure::compute_conic_segs(const SkConic& conic, SkScalar distan
}
SkScalar SkPathMeasure::compute_cubic_segs(const SkPoint pts[4],
- SkScalar distance, int mint, int maxt, int ptIndex) {
+ SkScalar distance, int mint, int maxt, unsigned ptIndex) {
if (tspan_big_enough(maxt - mint) && cubic_too_curvy(pts)) {
SkPoint tmp[7];
int halft = (mint + maxt) >> 1;
@@ -300,10 +300,10 @@ SkScalar SkPathMeasure::compute_cubic_segs(const SkPoint pts[4],
void SkPathMeasure::buildSegments() {
SkPoint pts[4];
- int ptIndex = fFirstPtIndex;
+ unsigned ptIndex = fFirstPtIndex;
SkScalar distance = 0;
bool isClosed = fForceClosed;
- bool firstMoveTo = ptIndex < 0;
+ bool firstMoveTo = ptIndex == (unsigned) -1;
Segment* seg;
/* Note:
@@ -471,7 +471,6 @@ static void compute_pos_tan(const SkPoint pts[], unsigned segType,
////////////////////////////////////////////////////////////////////////////////
SkPathMeasure::SkPathMeasure() {
- fPath = nullptr;
fTolerance = CHEAP_DIST_LIMIT;
fLength = -1; // signal we need to compute it
fForceClosed = false;
@@ -479,13 +478,13 @@ SkPathMeasure::SkPathMeasure() {
}
SkPathMeasure::SkPathMeasure(const SkPath& path, bool forceClosed, SkScalar resScale) {
- fPath = &path;
+ fPath = path;
fTolerance = CHEAP_DIST_LIMIT * SkScalarInvert(resScale);
fLength = -1; // signal we need to compute it
fForceClosed = forceClosed;
fFirstPtIndex = -1;
- fIter.setPath(path, forceClosed);
+ fIter.setPath(fPath, forceClosed);
}
SkPathMeasure::~SkPathMeasure() {}
@@ -493,20 +492,22 @@ SkPathMeasure::~SkPathMeasure() {}
/** Assign a new path, or null to have none.
*/
void SkPathMeasure::setPath(const SkPath* path, bool forceClosed) {
- fPath = path;
+ if (path) {
+ fPath = *path;
+ } else {
+ fPath.reset();
+ }
fLength = -1; // signal we need to compute it
fForceClosed = forceClosed;
fFirstPtIndex = -1;
- if (path) {
- fIter.setPath(*path, forceClosed);
- }
+ fIter.setPath(fPath, forceClosed);
fSegments.reset();
fPts.reset();
}
SkScalar SkPathMeasure::getLength() {
- if (fPath == nullptr) {
+ if (fPath.isEmpty()) {
return 0;
}
if (fLength < 0) {
@@ -582,7 +583,7 @@ const SkPathMeasure::Segment* SkPathMeasure::distanceToSegment(
}
bool SkPathMeasure::getPosTan(SkScalar distance, SkPoint* pos, SkVector* tangent) {
- if (nullptr == fPath) {
+ if (fPath.isEmpty()) {
return false;
}
@@ -609,7 +610,7 @@ bool SkPathMeasure::getPosTan(SkScalar distance, SkPoint* pos, SkVector* tangent
bool SkPathMeasure::getMatrix(SkScalar distance, SkMatrix* matrix,
MatrixFlags flags) {
- if (nullptr == fPath) {
+ if (fPath.isEmpty()) {
return false;
}