1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot/* 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Copyright 2012 Google Inc. 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * Use of this source code is governed by a BSD-style license that can be 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot * found in the LICENSE file. 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot */ 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SampleCode.h" 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkAnimTimer.h" 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkBlurMaskFilter.h" 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkColorPriv.h" 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkCanvas.h" 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot#include "SkRandom.h" 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSkScalar get_anim_sin(double secs, SkScalar amplitude, SkScalar periodInSec, SkScalar phaseInSec) { 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (!periodInSec) { 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return 0; 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot double t = secs + phaseInSec; 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot t *= SkScalarToFloat(2 * SK_ScalarPI) / periodInSec; 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot amplitude = SK_ScalarHalf * amplitude; 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return amplitude * SkDoubleToScalar(sin(t)) + amplitude; 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot} 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotclass AnimBlurView : public SampleView { 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotpublic: 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot AnimBlurView() : fBlurSigma(0), fCircleRadius(100) {} 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprotected: 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot // overrides from SkEventSink 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onQuery(SkEvent* evt) override { 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if (SampleCode::TitleQ(*evt)) { 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SampleCode::TitleR(evt, "AnimBlur"); 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return true; 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return this->INHERITED::onQuery(evt); 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot void onDrawContent(SkCanvas* canvas) override { 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot static const SkBlurStyle gStyles[] = { 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kNormal_SkBlurStyle, 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kInner_SkBlurStyle, 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kSolid_SkBlurStyle, 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot kOuter_SkBlurStyle, 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot }; 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkRandom random; 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for (size_t i = 0; i < SK_ARRAY_COUNT(gStyles); ++i) { 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkPaint paint; 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setMaskFilter(SkBlurMaskFilter::Make(gStyles[i], 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fBlurSigma, 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkBlurMaskFilter::kHighQuality_BlurFlag)); 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot paint.setColor(random.nextU() | 0xff000000); 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot canvas->drawCircle(200 * SK_Scalar1 + 400 * (i % 2) * SK_Scalar1, 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 200 * SK_Scalar1 + i / 2 * 400 * SK_Scalar1, 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fCircleRadius, paint); 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot bool onAnimate(const SkAnimTimer& timer) override { 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fBlurSigma = get_anim_sin(timer.secs(), 100, 4, 5); 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot fCircleRadius = 3 + get_anim_sin(timer.secs(), 150, 25, 3); 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot return true; 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotprivate: 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot SkScalar fBlurSigma, fCircleRadius; 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot typedef SampleView INHERITED; 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot}; 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot////////////////////////////////////////////////////////////////////////////// 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkView* MyFactory() { return new AnimBlurView; } 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotstatic SkViewRegister reg(MyFactory); 76