| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2008 The Android Open Source Project | 3 * Copyright 2008 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkInterpolator.h" | 10 #include "SkInterpolator.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 SkScalar SkInterpolatorBase::ComputeRelativeT(SkMSec time, SkMSec prevTime, | 61 SkScalar SkInterpolatorBase::ComputeRelativeT(SkMSec time, SkMSec prevTime, |
| 62 SkMSec nextTime, const SkScalar blend[4]) { | 62 SkMSec nextTime, const SkScalar blend[4]) { |
| 63 SkASSERT(time > prevTime && time < nextTime); | 63 SkASSERT(time > prevTime && time < nextTime); |
| 64 | 64 |
| 65 SkScalar t = (SkScalar)(time - prevTime) / (SkScalar)(nextTime - prevTime); | 65 SkScalar t = (SkScalar)(time - prevTime) / (SkScalar)(nextTime - prevTime); |
| 66 return blend ? | 66 return blend ? |
| 67 SkUnitCubicInterp(t, blend[0], blend[1], blend[2], blend[3]) : t; | 67 SkUnitCubicInterp(t, blend[0], blend[1], blend[2], blend[3]) : t; |
| 68 } | 68 } |
| 69 | 69 |
| 70 SkInterpolatorBase::Result SkInterpolatorBase::timeToT(SkMSec time, SkScalar* T, | 70 SkInterpolatorBase::Result SkInterpolatorBase::timeToT(SkMSec time, SkScalar* T, |
| 71 int* indexPtr, SkBool* exactPtr) const { | 71 int* indexPtr, bool* exactPtr) const { |
| 72 SkASSERT(fFrameCount > 0); | 72 SkASSERT(fFrameCount > 0); |
| 73 Result result = kNormal_Result; | 73 Result result = kNormal_Result; |
| 74 if (fRepeat != SK_Scalar1) { | 74 if (fRepeat != SK_Scalar1) { |
| 75 SkMSec startTime = 0, endTime = 0; // initialize to avoid warning | 75 SkMSec startTime = 0, endTime = 0; // initialize to avoid warning |
| 76 this->getDuration(&startTime, &endTime); | 76 this->getDuration(&startTime, &endTime); |
| 77 SkMSec totalTime = endTime - startTime; | 77 SkMSec totalTime = endTime - startTime; |
| 78 SkMSec offsetTime = time - startTime; | 78 SkMSec offsetTime = time - startTime; |
| 79 endTime = SkScalarFloorToInt(fRepeat * totalTime); | 79 endTime = SkScalarFloorToInt(fRepeat * totalTime); |
| 80 if (offsetTime >= endTime) { | 80 if (offsetTime >= endTime) { |
| 81 SkScalar fraction = SkScalarFraction(fRepeat); | 81 SkScalar fraction = SkScalarFraction(fRepeat); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 SkScalar* dst = &fValues[fElemCount * index]; | 175 SkScalar* dst = &fValues[fElemCount * index]; |
| 176 memcpy(dst, values, fElemCount * sizeof(SkScalar)); | 176 memcpy(dst, values, fElemCount * sizeof(SkScalar)); |
| 177 } | 177 } |
| 178 return success; | 178 return success; |
| 179 } | 179 } |
| 180 | 180 |
| 181 SkInterpolator::Result SkInterpolator::timeToValues(SkMSec time, | 181 SkInterpolator::Result SkInterpolator::timeToValues(SkMSec time, |
| 182 SkScalar values[]) const { | 182 SkScalar values[]) const { |
| 183 SkScalar T; | 183 SkScalar T; |
| 184 int index; | 184 int index; |
| 185 SkBool exact; | 185 bool exact; |
| 186 Result result = timeToT(time, &T, &index, &exact); | 186 Result result = timeToT(time, &T, &index, &exact); |
| 187 if (values) { | 187 if (values) { |
| 188 const SkScalar* nextSrc = &fValues[index * fElemCount]; | 188 const SkScalar* nextSrc = &fValues[index * fElemCount]; |
| 189 | 189 |
| 190 if (exact) { | 190 if (exact) { |
| 191 memcpy(values, nextSrc, fElemCount * sizeof(SkScalar)); | 191 memcpy(values, nextSrc, fElemCount * sizeof(SkScalar)); |
| 192 } else { | 192 } else { |
| 193 SkASSERT(index > 0); | 193 SkASSERT(index > 0); |
| 194 | 194 |
| 195 const SkScalar* prevSrc = nextSrc - fElemCount; | 195 const SkScalar* prevSrc = nextSrc - fElemCount; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 261 } | 261 } |
| 262 | 262 |
| 263 // Now we have t, so compute the coeff for Y and evaluate | 263 // Now we have t, so compute the coeff for Y and evaluate |
| 264 b = pin_and_convert(by); | 264 b = pin_and_convert(by); |
| 265 c = pin_and_convert(cy); | 265 c = pin_and_convert(cy); |
| 266 A = 3*b; | 266 A = 3*b; |
| 267 B = 3*(c - 2*b); | 267 B = 3*(c - 2*b); |
| 268 C = 3*(b - c) + Dot14_ONE; | 268 C = 3*(b - c) + Dot14_ONE; |
| 269 return SkFixedToScalar(eval_cubic(t, A, B, C) << 2); | 269 return SkFixedToScalar(eval_cubic(t, A, B, C) << 2); |
| 270 } | 270 } |
| OLD | NEW |