| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkDashPathPriv.h" | 8 #include "SkDashPathPriv.h" |
| 9 #include "SkPathMeasure.h" | 9 #include "SkPathMeasure.h" |
| 10 #include "SkStrokeRec.h" | 10 #include "SkStrokeRec.h" |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 SkPoint fPts[2]; | 209 SkPoint fPts[2]; |
| 210 SkVector fTangent; | 210 SkVector fTangent; |
| 211 SkVector fNormal; | 211 SkVector fNormal; |
| 212 SkScalar fPathLength; | 212 SkScalar fPathLength; |
| 213 }; | 213 }; |
| 214 | 214 |
| 215 | 215 |
| 216 bool SkDashPath::InternalFilter(SkPath* dst, const SkPath& src, SkStrokeRec* rec
, | 216 bool SkDashPath::InternalFilter(SkPath* dst, const SkPath& src, SkStrokeRec* rec
, |
| 217 const SkRect* cullRect, const SkScalar aInterval
s[], | 217 const SkRect* cullRect, const SkScalar aInterval
s[], |
| 218 int32_t count, SkScalar initialDashLength, int32
_t initialDashIndex, | 218 int32_t count, SkScalar initialDashLength, int32
_t initialDashIndex, |
| 219 SkScalar intervalLength) { | 219 SkScalar intervalLength, |
| 220 StrokeRecApplication strokeRecApplication) { |
| 220 | 221 |
| 221 // we do nothing if the src wants to be filled | 222 // we do nothing if the src wants to be filled |
| 222 SkStrokeRec::Style style = rec->getStyle(); | 223 SkStrokeRec::Style style = rec->getStyle(); |
| 223 if (SkStrokeRec::kFill_Style == style || SkStrokeRec::kStrokeAndFill_Style =
= style) { | 224 if (SkStrokeRec::kFill_Style == style || SkStrokeRec::kStrokeAndFill_Style =
= style) { |
| 224 return false; | 225 return false; |
| 225 } | 226 } |
| 226 | 227 |
| 227 const SkScalar* intervals = aIntervals; | 228 const SkScalar* intervals = aIntervals; |
| 228 SkScalar dashCount = 0; | 229 SkScalar dashCount = 0; |
| 229 int segCount = 0; | 230 int segCount = 0; |
| 230 | 231 |
| 231 SkPath cullPathStorage; | 232 SkPath cullPathStorage; |
| 232 const SkPath* srcPtr = &src; | 233 const SkPath* srcPtr = &src; |
| 233 if (cull_path(src, *rec, cullRect, intervalLength, &cullPathStorage)) { | 234 if (cull_path(src, *rec, cullRect, intervalLength, &cullPathStorage)) { |
| 234 srcPtr = &cullPathStorage; | 235 srcPtr = &cullPathStorage; |
| 235 } | 236 } |
| 236 | 237 |
| 237 SpecialLineRec lineRec; | 238 SpecialLineRec lineRec; |
| 238 bool specialLine = lineRec.init(*srcPtr, dst, rec, count >> 1, intervalLengt
h); | 239 bool specialLine = (StrokeRecApplication::kAllow == strokeRecApplication) && |
| 240 lineRec.init(*srcPtr, dst, rec, count >> 1, intervalLengt
h); |
| 239 | 241 |
| 240 SkPathMeasure meas(*srcPtr, false, rec->getResScale()); | 242 SkPathMeasure meas(*srcPtr, false, rec->getResScale()); |
| 241 | 243 |
| 242 do { | 244 do { |
| 243 bool skipFirstSegment = meas.isClosed(); | 245 bool skipFirstSegment = meas.isClosed(); |
| 244 bool addedSegment = false; | 246 bool addedSegment = false; |
| 245 SkScalar length = meas.getLength(); | 247 SkScalar length = meas.getLength(); |
| 246 int index = initialDashIndex; | 248 int index = initialDashIndex; |
| 247 | 249 |
| 248 // Since the path length / dash length ratio may be arbitrarily large, w
e can exert | 250 // Since the path length / dash length ratio may be arbitrarily large, w
e can exert |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 SkScalar length = 0; | 336 SkScalar length = 0; |
| 335 for (int i = 0; i < count; i++) { | 337 for (int i = 0; i < count; i++) { |
| 336 if (intervals[i] < 0) { | 338 if (intervals[i] < 0) { |
| 337 return false; | 339 return false; |
| 338 } | 340 } |
| 339 length += intervals[i]; | 341 length += intervals[i]; |
| 340 } | 342 } |
| 341 // watch out for values that might make us go out of bounds | 343 // watch out for values that might make us go out of bounds |
| 342 return length > 0 && SkScalarIsFinite(phase) && SkScalarIsFinite(length); | 344 return length > 0 && SkScalarIsFinite(phase) && SkScalarIsFinite(length); |
| 343 } | 345 } |
| OLD | NEW |