diff options
Diffstat (limited to 'samplecode/SampleAnimBlur.cpp')
-rw-r--r-- | samplecode/SampleAnimBlur.cpp | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/samplecode/SampleAnimBlur.cpp b/samplecode/SampleAnimBlur.cpp index e00c46ddd1..527d4300e7 100644 --- a/samplecode/SampleAnimBlur.cpp +++ b/samplecode/SampleAnimBlur.cpp @@ -11,14 +11,23 @@ #include "SkCanvas.h" #include "SkRandom.h" +SkScalar get_anim_sin(SkMSec time, SkScalar amplitude, SkScalar periodInSec, SkScalar phaseInSec) { + if (!periodInSec) { + return 0; + } + double t = (double)time / 1000.0 + phaseInSec; + t *= SkScalarToFloat(2 * SK_ScalarPI) / periodInSec; + amplitude = SK_ScalarHalf * amplitude; + return amplitude * SkDoubleToScalar(sin(t)) + amplitude; +} + class AnimBlurView : public SampleView { public: - AnimBlurView() { - } + AnimBlurView() : fBlurSigma(0), fCircleRadius(100) {} protected: // overrides from SkEventSink - virtual bool onQuery(SkEvent* evt) { + bool onQuery(SkEvent* evt) SK_OVERRIDE { if (SampleCode::TitleQ(*evt)) { SampleCode::TitleR(evt, "AnimBlur"); return true; @@ -26,17 +35,7 @@ protected: return this->INHERITED::onQuery(evt); } - virtual void onDrawContent(SkCanvas* canvas) { - - SkScalar blurSigma = SampleCode::GetAnimSinScalar(100 * SK_Scalar1, - 4 * SK_Scalar1, - 5 * SK_Scalar1); - - SkScalar circleRadius = 3 * SK_Scalar1 + - SampleCode::GetAnimSinScalar(150 * SK_Scalar1, - 25 * SK_Scalar1, - 3 * SK_Scalar1); - + void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { static const SkBlurStyle gStyles[] = { kNormal_SkBlurStyle, kInner_SkBlurStyle, @@ -48,20 +47,27 @@ protected: for (size_t i = 0; i < SK_ARRAY_COUNT(gStyles); ++i) { SkMaskFilter* mf = SkBlurMaskFilter::Create( gStyles[i], - blurSigma, + fBlurSigma, SkBlurMaskFilter::kHighQuality_BlurFlag); SkPaint paint; SkSafeUnref(paint.setMaskFilter(mf)); paint.setColor(random.nextU() | 0xff000000); canvas->drawCircle(200 * SK_Scalar1 + 400 * (i % 2) * SK_Scalar1, 200 * SK_Scalar1 + i / 2 * 400 * SK_Scalar1, - circleRadius, paint); + fCircleRadius, paint); } - this->inval(NULL); + } + + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + fBlurSigma = get_anim_sin(curr, 100, 4, 5); + fCircleRadius = 3 + get_anim_sin(curr, 150, 25, 3); + return true; } private: - typedef SkView INHERITED; + SkScalar fBlurSigma, fCircleRadius; + + typedef SampleView INHERITED; }; ////////////////////////////////////////////////////////////////////////////// |