Index: samplecode/SampleHT.cpp |
diff --git a/samplecode/SampleHT.cpp b/samplecode/SampleHT.cpp |
index c6e2b4971a4f8a529ae8078197d4719855c2513d..07605fe1ed65dd0cb8c1f18a3abf4dba9895fefc 100644 |
--- a/samplecode/SampleHT.cpp |
+++ b/samplecode/SampleHT.cpp |
@@ -46,6 +46,7 @@ class HTDrawable : public SkCanvasDrawable { |
SkRect fR; |
SkColor fColor; |
SkInterpolator* fInterp; |
+ SkMSec fTime; |
public: |
HTDrawable(SkRandom& rand) { |
@@ -53,18 +54,21 @@ public: |
rand.nextRangeF(20, 200), rand.nextRangeF(20, 200)); |
fColor = rand_opaque_color(rand.nextU()); |
fInterp = NULL; |
+ fTime = 0; |
} |
- void spawnAnimation() { |
+ void spawnAnimation(SkMSec now) { |
+ this->setTime(now); |
+ |
SkDELETE(fInterp); |
fInterp = SkNEW_ARGS(SkInterpolator, (5, 3)); |
SkScalar values[5]; |
color_to_floats(fColor, values); values[4] = 0; |
- fInterp->setKeyFrame(0, SampleCode::GetAnimTime(), values); |
+ fInterp->setKeyFrame(0, now, values); |
values[0] = 0; values[4] = 180; |
- fInterp->setKeyFrame(1, SampleCode::GetAnimTime() + 1000, values); |
+ fInterp->setKeyFrame(1, now + 1000, values); |
color_to_floats(rand_opaque_color(fColor), values); values[4] = 360; |
- fInterp->setKeyFrame(2, SampleCode::GetAnimTime() + 2000, values); |
+ fInterp->setKeyFrame(2, now + 2000, values); |
fInterp->setMirror(true); |
fInterp->setRepeatCount(3); |
@@ -76,6 +80,8 @@ public: |
return oval_contains(fR, x, y); |
} |
+ void setTime(SkMSec time) { fTime = time; } |
+ |
void onDraw(SkCanvas* canvas) SK_OVERRIDE { |
SkAutoCanvasRestore acr(canvas, false); |
@@ -84,7 +90,7 @@ public: |
if (fInterp) { |
SkScalar values[5]; |
- SkInterpolator::Result res = fInterp->timeToValues(SampleCode::GetAnimTime(), values); |
+ SkInterpolator::Result res = fInterp->timeToValues(fTime, values); |
fColor = floats_to_color(values); |
canvas->save(); |
@@ -104,7 +110,7 @@ public: |
paint.setColor(fColor); |
canvas->drawRect(fR, paint); |
} |
- |
+ |
SkRect onGetBounds() SK_OVERRIDE { return fR; } |
}; |
@@ -121,6 +127,7 @@ public: |
}; |
Rec fArray[N]; |
SkAutoTUnref<SkCanvasDrawable> fRoot; |
+ SkMSec fTime; |
HTView() { |
SkRandom rand; |
@@ -146,14 +153,21 @@ protected: |
void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { |
canvas->EXPERIMENTAL_drawDrawable(fRoot); |
- this->inval(NULL); |
+ } |
+ |
+ bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { |
+ fTime = curr; |
+ for (int i = 0; i < N; ++i) { |
+ fArray[i].fDrawable->setTime(fTime); |
+ } |
+ return true; |
} |
SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_OVERRIDE { |
// search backwards to find the top-most |
for (int i = N - 1; i >= 0; --i) { |
if (fArray[i].fDrawable->hitTest(x, y)) { |
- fArray[i].fDrawable->spawnAnimation(); |
+ fArray[i].fDrawable->spawnAnimation(fTime); |
break; |
} |
} |