Chromium Code Reviews| Index: gm/SkAnimTimer.h |
| diff --git a/gm/SkAnimTimer.h b/gm/SkAnimTimer.h |
| index 2c8a723e5bb970d0799e1a802536ad5e6715b95a..2456eed4f835949a6f249c0bac8b0c2ee6587b65 100644 |
| --- a/gm/SkAnimTimer.h |
| +++ b/gm/SkAnimTimer.h |
| @@ -104,6 +104,23 @@ public: |
| return SkDoubleToScalar(value); |
| } |
| + /** |
| + * Transitions from ends->mid->ends linearly over period seconds. The phase specifies a phase |
| + * shift in seconds. |
| + */ |
|
robertphillips
2016/05/13 18:44:16
Isn't this more commonly known as ping-pong?
bsalomon
2016/05/13 18:58:10
Done.
|
| + SkScalar pulse(SkScalar period, SkScalar phase, SkScalar ends, SkScalar mid) const { |
| + return Pulse(this->secs(), period, phase, ends, mid); |
| + } |
| + |
| + /** Helper for computing a pulse value without a SkAnimTimer object */ |
| + static SkScalar Pulse(SkScalar t, SkScalar period, SkScalar phase, SkScalar ends, |
| + SkScalar mid) { |
| + double value = ::fmod(t + phase, period); |
| + double half = period / 2.0; |
| + double diff = ::fabs(value - half); |
| + return ends + (1.0 - diff / half) * (mid - ends); |
| + } |
| + |
| private: |
| double fBaseTimeNanos; |
| double fCurrTimeNanos; |