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; |