Add 'K' to SampleApp to trigger animated perspective rendering
Review URL: http://codereview.appspot.com/4967061/
git-svn-id: http://skia.googlecode.com/svn/trunk@2244 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 3805ca6..7dbec17 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -432,6 +432,8 @@
fRepeatDrawing = false;
fAnimating = false;
fRotate = false;
+ fPerspAnim = false;
+ fPerspAnimTime = 0;
fScale = false;
fRequestGrabImage = false;
fUsePipe = false;
@@ -615,8 +617,14 @@
return;
}
// update the animation time
- gAnimTimePrev = gAnimTime;
- gAnimTime = SkTime::GetMSecs();
+ if (!gAnimTimePrev && !gAnimTime) {
+ // first time make delta be 0
+ gAnimTime = SkTime::GetMSecs();
+ gAnimTimePrev = gAnimTime;
+ } else {
+ gAnimTimePrev = gAnimTime;
+ gAnimTime = SkTime::GetMSecs();
+ }
SkScalar cx = fZoomCenterX;
SkScalar cy = fZoomCenterY;
@@ -1023,6 +1031,22 @@
canvas->rotate(SkIntToScalar(30));
canvas->translate(-cx, -cy);
}
+ if (fPerspAnim) {
+ fPerspAnimTime += SampleCode::GetAnimSecondsDelta();
+
+ static const SkScalar gAnimPeriod = 10 * SK_Scalar1;
+ static const SkScalar gAnimMag = SK_Scalar1 / 1000;
+ SkScalar t = SkScalarMod(fPerspAnimTime, gAnimPeriod);
+ if (SkScalarFloorToInt(SkScalarDiv(fPerspAnimTime, gAnimPeriod)) & 0x1) {
+ t = gAnimPeriod - t;
+ }
+ t = 2 * t - gAnimPeriod;
+ t = SkScalarMul(SkScalarDiv(t, gAnimPeriod), gAnimMag);
+ SkMatrix m;
+ m.reset();
+ m.setPerspY(t);
+ canvas->concat(m);
+ }
canvas->setDrawFilter(new FlagsDrawFilter(fLCDState, fAAState,
fFilterState, fHintingState))->unref();
@@ -1035,6 +1059,9 @@
} else {
(void)SampleView::SetRepeatDraw(child, 1);
}
+ if (fPerspAnim) {
+ this->inval(NULL);
+ }
//(void)SampleView::SetUsePipe(child, fUsePipe);
}
@@ -1302,6 +1329,11 @@
this->inval(NULL);
this->updateTitle();
return true;
+ case 'k':
+ fPerspAnim = !fPerspAnim;
+ this->inval(NULL);
+ this->updateTitle();
+ return true;
case 's':
fScale = !fScale;
this->inval(NULL);
@@ -1555,6 +1587,9 @@
if (fNClip) {
title.prepend("<C> ");
}
+ if (fPerspAnim) {
+ title.prepend("<K> ");
+ }
title.prepend(trystate_str(fLCDState, "LCD ", "lcd "));
title.prepend(trystate_str(fAAState, "AA ", "aa "));