Index: src/gpu/FlingState.cpp |
diff --git a/src/gpu/FlingState.cpp b/src/gpu/FlingState.cpp |
deleted file mode 100644 |
index f0db5016bde7a01b02f14a7f9fad7f6567062b41..0000000000000000000000000000000000000000 |
--- a/src/gpu/FlingState.cpp |
+++ /dev/null |
@@ -1,125 +0,0 @@ |
- |
-/* |
- * Copyright 2010 Google Inc. |
- * |
- * Use of this source code is governed by a BSD-style license that can be |
- * found in the LICENSE file. |
- */ |
- |
- |
- |
-#include "FlingState.h" |
-#include "SkMatrix.h" |
-#include "SkTime.h" |
- |
-#define DISCRETIZE_TRANSLATE_TO_AVOID_FLICKER true |
- |
-static const float MAX_FLING_SPEED = 1500; |
- |
-static float pin_max_fling(float speed) { |
- if (speed > MAX_FLING_SPEED) { |
- speed = MAX_FLING_SPEED; |
- } |
- return speed; |
-} |
- |
-static double getseconds() { |
- return SkTime::GetMSecs() * 0.001; |
-} |
- |
-// returns +1 or -1, depending on the sign of x |
-// returns +1 if x is zero |
-static SkScalar SkScalarSign(SkScalar x) { |
- SkScalar sign = SK_Scalar1; |
- if (x < 0) { |
- sign = -sign; |
- } |
- return sign; |
-} |
- |
-static void unit_axis_align(SkVector* unit) { |
- const SkScalar TOLERANCE = SkDoubleToScalar(0.15); |
- if (SkScalarAbs(unit->fX) < TOLERANCE) { |
- unit->fX = 0; |
- unit->fY = SkScalarSign(unit->fY); |
- } else if (SkScalarAbs(unit->fY) < TOLERANCE) { |
- unit->fX = SkScalarSign(unit->fX); |
- unit->fY = 0; |
- } |
-} |
- |
-void FlingState::reset(float sx, float sy) { |
- fActive = true; |
- fDirection.set(sx, sy); |
- fSpeed0 = SkPoint::Normalize(&fDirection); |
- fSpeed0 = pin_max_fling(fSpeed0); |
- fTime0 = getseconds(); |
- |
- unit_axis_align(&fDirection); |
-// printf("---- speed %g dir %g %g\n", fSpeed0, fDirection.fX, fDirection.fY); |
-} |
- |
-bool FlingState::evaluateMatrix(SkMatrix* matrix) { |
- if (!fActive) { |
- return false; |
- } |
- |
- const float t = getseconds() - fTime0; |
- const float MIN_SPEED = 2; |
- const float K0 = 5.0; |
- const float K1 = 0.02; |
- const float speed = fSpeed0 * (sk_float_exp(- K0 * t) - K1); |
- if (speed <= MIN_SPEED) { |
- fActive = false; |
- return false; |
- } |
- float dist = (fSpeed0 - speed) / K0; |
- |
-// printf("---- time %g speed %g dist %g\n", t, speed, dist); |
- float tx = fDirection.fX * dist; |
- float ty = fDirection.fY * dist; |
- if (DISCRETIZE_TRANSLATE_TO_AVOID_FLICKER) { |
- tx = sk_float_round2int(tx); |
- ty = sk_float_round2int(ty); |
- } |
- matrix->setTranslate(tx, ty); |
-// printf("---- evaluate (%g %g)\n", tx, ty); |
- |
- return true; |
-} |
- |
-//////////////////////////////////////// |
- |
-GrAnimateFloat::GrAnimateFloat() : fTime0(0) {} |
- |
-void GrAnimateFloat::start(float v0, float v1, float duration) { |
- fValue0 = v0; |
- fValue1 = v1; |
- fDuration = duration; |
- if (duration > 0) { |
- fTime0 = SkTime::GetMSecs(); |
- if (!fTime0) { |
- fTime0 = 1; // time0 is our sentinel |
- } |
- } else { |
- fTime0 = 0; |
- } |
-} |
- |
-float GrAnimateFloat::evaluate() { |
- if (!fTime0) { |
- return fValue1; |
- } |
- |
- double elapsed = (SkTime::GetMSecs() - fTime0) * 0.001; |
- if (elapsed >= fDuration) { |
- fTime0 = 0; |
- return fValue1; |
- } |
- |
- double t = elapsed / fDuration; |
- if (true) { |
- t = (3 - 2 * t) * t * t; |
- } |
- return fValue0 + t * (fValue1 - fValue0); |
-} |