| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
| 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 "SkDashPathEffect.h" | 8 #include "SkDashPathEffect.h" |
| 9 | 9 |
| 10 #include "SkDashPathPriv.h" | 10 #include "SkDashPathPriv.h" |
| 11 #include "SkReadBuffer.h" | 11 #include "SkReadBuffer.h" |
| 12 #include "SkWriteBuffer.h" | 12 #include "SkWriteBuffer.h" |
| 13 | 13 |
| 14 SkDashPathEffect::SkDashPathEffect(const SkScalar intervals[], int count, | 14 SkDashPathEffect::SkDashPathEffect(const SkScalar intervals[], int count, SkScal
ar phase) |
| 15 SkScalar phase) { | 15 : fPhase(0) |
| 16 , fInitialDashLength(0) |
| 17 , fInitialDashIndex(0) |
| 18 , fIntervalLength(0) { |
| 16 SkASSERT(intervals); | 19 SkASSERT(intervals); |
| 17 SkASSERT(count > 1 && SkAlign2(count) == count); | 20 SkASSERT(count > 1 && SkAlign2(count) == count); |
| 18 | 21 |
| 19 fIntervals = (SkScalar*)sk_malloc_throw(sizeof(SkScalar) * count); | 22 fIntervals = (SkScalar*)sk_malloc_throw(sizeof(SkScalar) * count); |
| 20 fCount = count; | 23 fCount = count; |
| 21 for (int i = 0; i < count; i++) { | 24 for (int i = 0; i < count; i++) { |
| 22 SkASSERT(intervals[i] >= 0); | 25 SkASSERT(intervals[i] >= 0); |
| 23 fIntervals[i] = intervals[i]; | 26 fIntervals[i] = intervals[i]; |
| 24 } | 27 } |
| 25 | 28 |
| 26 // set the internal data members | 29 // set the internal data members |
| 27 SkDashPath::CalcDashParameters(phase, fIntervals, fCount, &fInitialDashLengt
h, | 30 SkDashPath::CalcDashParameters(phase, fIntervals, fCount, |
| 28 &fInitialDashIndex, &fIntervalLength, &fPhase
); | 31 &fInitialDashLength, &fInitialDashIndex, &fIntervalLength, &fPhase); |
| 29 } | 32 } |
| 30 | 33 |
| 31 SkDashPathEffect::~SkDashPathEffect() { | 34 SkDashPathEffect::~SkDashPathEffect() { |
| 32 sk_free(fIntervals); | 35 sk_free(fIntervals); |
| 33 } | 36 } |
| 34 | 37 |
| 35 bool SkDashPathEffect::filterPath(SkPath* dst, const SkPath& src, | 38 bool SkDashPathEffect::filterPath(SkPath* dst, const SkPath& src, |
| 36 SkStrokeRec* rec, const SkRect* cullRect) const { | 39 SkStrokeRec* rec, const SkRect* cullRect) const { |
| 37 return SkDashPath::FilterDashPath(dst, src, rec, cullRect, fIntervals, fCoun
t, | 40 return SkDashPath::FilterDashPath(dst, src, rec, cullRect, fIntervals, fCoun
t, |
| 38 fInitialDashLength, fInitialDashIndex, fIn
tervalLength); | 41 fInitialDashLength, fInitialDashIndex, fIn
tervalLength); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 void SkDashPathEffect::flatten(SkWriteBuffer& buffer) const { | 245 void SkDashPathEffect::flatten(SkWriteBuffer& buffer) const { |
| 243 this->INHERITED::flatten(buffer); | 246 this->INHERITED::flatten(buffer); |
| 244 buffer.writeScalar(fPhase); | 247 buffer.writeScalar(fPhase); |
| 245 buffer.writeScalarArray(fIntervals, fCount); | 248 buffer.writeScalarArray(fIntervals, fCount); |
| 246 } | 249 } |
| 247 | 250 |
| 248 SkFlattenable* SkDashPathEffect::CreateProc(SkReadBuffer& buffer) { | 251 SkFlattenable* SkDashPathEffect::CreateProc(SkReadBuffer& buffer) { |
| 249 return SkNEW_ARGS(SkDashPathEffect, (buffer)); | 252 return SkNEW_ARGS(SkDashPathEffect, (buffer)); |
| 250 } | 253 } |
| 251 | 254 |
| 252 SkDashPathEffect::SkDashPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) { | 255 SkDashPathEffect::SkDashPathEffect(SkReadBuffer& buffer) |
| 256 : INHERITED(buffer) |
| 257 , fPhase(0) |
| 258 , fInitialDashLength(0) |
| 259 , fInitialDashIndex(0) |
| 260 , fIntervalLength(0) { |
| 253 bool useOldPic = buffer.isVersionLT(SkReadBuffer::kDashWritesPhaseIntervals_
Version); | 261 bool useOldPic = buffer.isVersionLT(SkReadBuffer::kDashWritesPhaseIntervals_
Version); |
| 254 if (useOldPic) { | 262 if (useOldPic) { |
| 255 fInitialDashIndex = buffer.readInt(); | 263 fInitialDashIndex = buffer.readInt(); |
| 256 fInitialDashLength = buffer.readScalar(); | 264 fInitialDashLength = buffer.readScalar(); |
| 257 fIntervalLength = buffer.readScalar(); | 265 fIntervalLength = buffer.readScalar(); |
| 258 buffer.readBool(); // Dummy for old ScalarToFit field | 266 buffer.readBool(); // Dummy for old ScalarToFit field |
| 259 } else { | 267 } else { |
| 260 fPhase = buffer.readScalar(); | 268 fPhase = buffer.readScalar(); |
| 261 } | 269 } |
| 262 | 270 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 273 fPhase = 0; | 281 fPhase = 0; |
| 274 if (fInitialDashLength != -1) { // Signal for bad dash interval | 282 if (fInitialDashLength != -1) { // Signal for bad dash interval |
| 275 for (int i = 0; i < fInitialDashIndex; ++i) { | 283 for (int i = 0; i < fInitialDashIndex; ++i) { |
| 276 fPhase += fIntervals[i]; | 284 fPhase += fIntervals[i]; |
| 277 } | 285 } |
| 278 fPhase += fIntervals[fInitialDashIndex] - fInitialDashLength; | 286 fPhase += fIntervals[fInitialDashIndex] - fInitialDashLength; |
| 279 } | 287 } |
| 280 } else { | 288 } else { |
| 281 // set the internal data members, fPhase should have been between 0 and
intervalLength | 289 // set the internal data members, fPhase should have been between 0 and
intervalLength |
| 282 // when written to buffer so no need to adjust it | 290 // when written to buffer so no need to adjust it |
| 283 SkDashPath::CalcDashParameters(fPhase, fIntervals, fCount, &fInitialDash
Length, | 291 SkDashPath::CalcDashParameters(fPhase, fIntervals, fCount, |
| 284 &fInitialDashIndex, &fIntervalLength); | 292 &fInitialDashLength, &fInitialDashIndex, &fIntervalLength); |
| 285 } | 293 } |
| 286 } | 294 } |
| OLD | NEW |