| Index: src/effects/SkDashPathEffect.cpp
|
| diff --git a/src/effects/SkDashPathEffect.cpp b/src/effects/SkDashPathEffect.cpp
|
| index 58706c5b78f52d55bbead6d4f7a8f3634bd838c6..15276b684c779329fd9b8d4aee352bf0b344b5de 100644
|
| --- a/src/effects/SkDashPathEffect.cpp
|
| +++ b/src/effects/SkDashPathEffect.cpp
|
| @@ -35,8 +35,7 @@ static SkScalar FindFirstInterval(const SkScalar intervals[], SkScalar phase,
|
| }
|
|
|
| SkDashPathEffect::SkDashPathEffect(const SkScalar intervals[], int count,
|
| - SkScalar phase, bool scaleToFit)
|
| - : fScaleToFit(scaleToFit) {
|
| + SkScalar phase) {
|
| SkASSERT(intervals);
|
| SkASSERT(count > 1 && SkAlign2(count) == count);
|
|
|
| @@ -256,7 +255,6 @@ bool SkDashPathEffect::filterPath(SkPath* dst, const SkPath& src,
|
| bool addedSegment = false;
|
| SkScalar length = meas.getLength();
|
| int index = fInitialDashIndex;
|
| - SkScalar scale = SK_Scalar1;
|
|
|
| // Since the path length / dash length ratio may be arbitrarily large, we can exert
|
| // significant memory pressure while attempting to build the filtered path. To avoid this,
|
| @@ -273,20 +271,10 @@ bool SkDashPathEffect::filterPath(SkPath* dst, const SkPath& src,
|
| return false;
|
| }
|
|
|
| - if (fScaleToFit) {
|
| - if (fIntervalLength >= length) {
|
| - scale = SkScalarDiv(length, fIntervalLength);
|
| - } else {
|
| - SkScalar div = SkScalarDiv(length, fIntervalLength);
|
| - int n = SkScalarFloorToInt(div);
|
| - scale = SkScalarDiv(length, n * fIntervalLength);
|
| - }
|
| - }
|
| -
|
| // Using double precision to avoid looping indefinitely due to single precision rounding
|
| // (for extreme path_length/dash_length ratios). See test_infinite_dash() unittest.
|
| double distance = 0;
|
| - double dlen = SkScalarMul(fInitialDashLength, scale);
|
| + double dlen = fInitialDashLength;
|
|
|
| while (distance < length) {
|
| SkASSERT(dlen >= 0);
|
| @@ -318,13 +306,13 @@ bool SkDashPathEffect::filterPath(SkPath* dst, const SkPath& src,
|
| }
|
|
|
| // fetch our next dlen
|
| - dlen = SkScalarMul(intervals[index], scale);
|
| + dlen = intervals[index];
|
| }
|
|
|
| // extend if we ended on a segment and we need to join up with the (skipped) initial segment
|
| if (meas.isClosed() && is_even(fInitialDashIndex) &&
|
| fInitialDashLength > 0) {
|
| - meas.getSegment(0, SkScalarMul(fInitialDashLength, scale), dst, !addedSegment);
|
| + meas.getSegment(0, fInitialDashLength, dst, !addedSegment);
|
| ++segCount;
|
| }
|
| } while (meas.nextContour());
|
| @@ -362,13 +350,6 @@ bool SkDashPathEffect::asPoints(PointData* results,
|
| return false;
|
| }
|
|
|
| - // TODO: this next test could be eased up. The rescaling should not impact
|
| - // the equality of the ons & offs. However, we would need to remove the
|
| - // integer intervals restriction first
|
| - if (fScaleToFit) {
|
| - return false;
|
| - }
|
| -
|
| SkPoint pts[2];
|
|
|
| if (!src.isLine(pts)) {
|
| @@ -538,7 +519,8 @@ void SkDashPathEffect::flatten(SkWriteBuffer& buffer) const {
|
| buffer.writeInt(fInitialDashIndex);
|
| buffer.writeScalar(fInitialDashLength);
|
| buffer.writeScalar(fIntervalLength);
|
| - buffer.writeBool(fScaleToFit);
|
| + // Dummy write to stay compatible with old skps. Write will be removed in follow up patch.
|
| + buffer.writeBool(false);
|
| buffer.writeScalarArray(fIntervals, fCount);
|
| }
|
|
|
| @@ -550,7 +532,7 @@ SkDashPathEffect::SkDashPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) {
|
| fInitialDashIndex = buffer.readInt();
|
| fInitialDashLength = buffer.readScalar();
|
| fIntervalLength = buffer.readScalar();
|
| - fScaleToFit = buffer.readBool();
|
| + buffer.readBool(); // dummy read to stay compatible with old skps
|
|
|
| fCount = buffer.getArrayCount();
|
| size_t allocSize = sizeof(SkScalar) * fCount;
|
|
|