diff options
author | reed <reed@chromium.org> | 2015-02-01 19:01:04 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-01 19:01:04 -0800 |
commit | d9adfe6a223955bc69c8c7661ab8e0a078afbc32 (patch) | |
tree | b3ae977babf890649bce0538e6b6cb766a948219 | |
parent | 47471cf19c1b386212ab0401190ac40cdeb95d1f (diff) |
allow GMs to animate
BUG=skia:
Review URL: https://codereview.chromium.org/888283002
-rw-r--r-- | gm/addarc.cpp | 15 | ||||
-rw-r--r-- | gm/gm.cpp | 7 | ||||
-rw-r--r-- | gm/gm.h | 3 | ||||
-rw-r--r-- | samplecode/GMSampleView.h | 4 | ||||
-rw-r--r-- | samplecode/SampleAnimBlur.cpp | 42 | ||||
-rw-r--r-- | samplecode/SampleAnimatedGradient.cpp | 97 | ||||
-rw-r--r-- | samplecode/SampleApp.cpp | 24 | ||||
-rw-r--r-- | samplecode/SampleApp.h | 2 | ||||
-rw-r--r-- | samplecode/SampleArc.cpp | 8 | ||||
-rw-r--r-- | samplecode/SampleCamera.cpp | 8 | ||||
-rw-r--r-- | samplecode/SampleCode.h | 5 | ||||
-rw-r--r-- | samplecode/SampleDegenerateTwoPtRadials.cpp | 13 | ||||
-rw-r--r-- | samplecode/SampleHT.cpp | 30 | ||||
-rw-r--r-- | samplecode/SampleHairline.cpp | 46 | ||||
-rw-r--r-- | samplecode/SamplePathEffects.cpp | 61 | ||||
-rw-r--r-- | samplecode/SamplePicture.cpp | 22 | ||||
-rw-r--r-- | samplecode/SampleSpiral.cpp | 63 |
17 files changed, 157 insertions, 293 deletions
diff --git a/gm/addarc.cpp b/gm/addarc.cpp index 209fb59aef..1386cdd0e7 100644 --- a/gm/addarc.cpp +++ b/gm/addarc.cpp @@ -10,6 +10,9 @@ #include "SkRandom.h" class AddArcGM : public skiagm::GM { +public: + AddArcGM() : fRotate(0) {} + protected: SkString onShortName() SK_OVERRIDE { return SkString("addarc"); } @@ -29,20 +32,30 @@ protected: const SkScalar sweepAngle = 345; SkRandom rand; + SkScalar sign = 1; while (r.width() > paint.getStrokeWidth() * 3) { paint.setColor(rand.nextU() | (0xFF << 24)); SkScalar startAngle = rand.nextUScalar1() * 360; + SkScalar speed = SkScalarSqrt(16 / r.width()) * 0.5f; + startAngle += fRotate * 360 * speed * sign; + SkPath path; path.addArc(r, startAngle, sweepAngle); canvas->drawPath(path, paint); r.inset(inset, inset); - + sign = -sign; } } + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + fRotate = SkDoubleToScalar(fmod(curr * 0.001, 360)); + return true; + } + private: + SkScalar fRotate; typedef skiagm::GM INHERITED; }; DEF_GM( return new AddArcGM; ) @@ -51,6 +51,12 @@ void GM::setBGColor(SkColor color) { fBGColor = color; } +bool GM::animatePulse(SkMSec curr, SkMSec prev) { + return this->onAnimatePulse(curr, prev); +} + +///////////////////////////////////////////////////////////////////////////////////////////// + void GM::onDrawBackground(SkCanvas* canvas) { canvas->drawColor(fBGColor, SkXfermode::kSrc_Mode); } @@ -101,3 +107,4 @@ SkISize skiagm::SimpleGM::onISize() { SkString skiagm::SimpleGM::onShortName() { return fName; } + @@ -92,6 +92,8 @@ namespace skiagm { fStarterMatrix = matrix; } + bool animatePulse(SkMSec curr, SkMSec prev); + protected: /** draws a standard message that the GM is only intended to be used with the GPU.*/ void drawGpuOnlyMessage(SkCanvas*); @@ -101,6 +103,7 @@ namespace skiagm { virtual SkISize onISize() = 0; virtual SkString onShortName() = 0; + virtual bool onAnimatePulse(SkMSec curr, SkMSec prev) { return false; } virtual SkMatrix onGetInitialTransform() const { return SkMatrix::I(); } private: diff --git a/samplecode/GMSampleView.h b/samplecode/GMSampleView.h index c781cd0b86..a03628e05b 100644 --- a/samplecode/GMSampleView.h +++ b/samplecode/GMSampleView.h @@ -70,6 +70,10 @@ protected: fGM->drawBackground(canvas); } + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + return fGM->animatePulse(curr, prev); + } + private: GM* fGM; typedef SampleView INHERITED; 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; }; ////////////////////////////////////////////////////////////////////////////// diff --git a/samplecode/SampleAnimatedGradient.cpp b/samplecode/SampleAnimatedGradient.cpp deleted file mode 100644 index 79ee499fa4..0000000000 --- a/samplecode/SampleAnimatedGradient.cpp +++ /dev/null @@ -1,97 +0,0 @@ - -/* - * Copyright 2011 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ -#include "SampleCode.h" -#include "SkCanvas.h" -#include "SkGradientShader.h" - -class GradientView : public SampleView { -public: - GradientView() { - this->setBGColor(0xFFDDDDDD); - } - -protected: - struct GradData { - int fCount; - const SkColor* fColors; - const SkScalar* fPos; - }; - // overrides from SkEventSink - virtual bool onQuery(SkEvent* evt) { - if (SampleCode::TitleQ(*evt)) { - SampleCode::TitleR(evt, "Gradients"); - return true; - } - return this->INHERITED::onQuery(evt); - } - virtual void onDrawContent(SkCanvas* canvas) { - SkPaint paint; - paint.setAntiAlias(true); - paint.setStyle(SkPaint::kStroke_Style); - paint.setStrokeWidth(SkScalarHalf(SkIntToScalar(3))); - paint.setStyle(SkPaint::kFill_Style); - - SkPoint p = SkPoint::Make(0,0); - SkPoint q = SkPoint::Make(100,100); - SkPoint pts[] = {p, q}; - - SkScalar t, temp, x, y; - SkColor gColors[] = { - SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorWHITE, SK_ColorBLACK - }; - t = SampleCode::GetAnimScalar(SkIntToScalar(2), SkIntToScalar(20)); - temp = SampleCode::GetAnimScalar(SkIntToScalar(1), SkIntToScalar(8)); - SkScalar step = SK_ScalarPI / (10); - SkScalar angle = t * step; - x = SkScalarSinCos(angle, &y); - SkScalar colorPositions[] = { 0, 0.1 + x, 0.4 + y, 0.9 - x + y, 1.0}; - GradData data = { 5, gColors, colorPositions }; - - - SkRect r = { 0, 0, SkIntToScalar(200), SkIntToScalar(200) }; - SkShader* shader1 = SkGradientShader::CreateLinear( - pts, data.fColors, data.fPos,data.fCount, - SkShader::kMirror_TileMode); - paint.setShader(shader1)->unref(); - - canvas->drawRect(r, paint); - - - SkPoint s = SkPoint::Make(100,100); - SkShader* shader2 = SkGradientShader::CreateRadial( - s, 100, data.fColors, data.fPos, data.fCount, - SkShader::kMirror_TileMode); - paint.setShader(shader2)->unref(); - canvas->translate(250, 0); - canvas->drawRect(r, paint); - - SkShader* shader3 = SkGradientShader::CreateTwoPointRadial( - p, 0, q, 100, data.fColors, data.fPos, data.fCount, - SkShader::kMirror_TileMode); - paint.setShader(shader3)->unref(); - canvas->translate(0, 250); - canvas->drawRect(r, paint); - - SkShader* shader4 = SkGradientShader::CreateSweep( - 100, 100, data.fColors, data.fPos, data.fCount); - - paint.setShader(shader4)->unref(); - canvas->translate(-250, 0); - canvas->drawRect(r, paint); - - this->inval(NULL); - } - -private: - typedef SampleView INHERITED; -}; - -////////////////////////////////////////////////////////////////////////////// - -static SkView* MyFactory() { return new GradientView; } -static SkViewRegister reg(MyFactory); diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp index dd771cec2d..5b8ed96905 100644 --- a/samplecode/SampleApp.cpp +++ b/samplecode/SampleApp.cpp @@ -662,6 +662,19 @@ static bool curr_title(SkWindow* wind, SkString* title) { return false; } +bool SampleWindow::sendAnimatePulse() { + SkView* view = curr_view(this); + if (SampleView::IsSampleView(view)) { + if (fDoAnimate) { + return ((SampleView*)view)->animatePulse(gAnimTime, gAnimTimePrev); + } else { + // 0 signals the view that we are no longer animating + ((SampleView*)view)->animatePulse(0, 0); + } + } + return false; +} + void SampleWindow::setZoomCenter(float x, float y) { fZoomCenterX = x; @@ -823,6 +836,7 @@ SampleWindow::SampleWindow(void* hwnd, int argc, char** argv, DeviceManager* dev fDeviceType = kANGLE_DeviceType; #endif + fDoAnimate = true; fUseClip = false; fNClip = false; fAnimating = false; @@ -1130,6 +1144,10 @@ void SampleWindow::draw(SkCanvas* canvas) { this->postInvalDelay(); } + if (this->sendAnimatePulse()) { + this->inval(NULL); + } + // do this last fDevManager->publishCanvas(fDeviceType, canvas, this); } @@ -1709,6 +1727,12 @@ bool SampleWindow::onHandleChar(SkUnichar uni) { } switch (uni) { + case ' ': + fDoAnimate = !fDoAnimate; + if (this->sendAnimatePulse()) { + this->inval(NULL); + } + break; case 'B': post_event_to_sink(SkNEW_ARGS(SkEvent, ("PictFileView::toggleBBox")), curr_view(this)); // Cannot call updateTitle() synchronously, because the toggleBBox event is still in diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h index 3e8afc0174..d75e1495c3 100644 --- a/samplecode/SampleApp.h +++ b/samplecode/SampleApp.h @@ -175,6 +175,7 @@ private: bool fSaveToPdf; SkAutoTUnref<SkDocument> fPDFDocument; + bool fDoAnimate; bool fUseClip; bool fNClip; bool fAnimating; @@ -238,6 +239,7 @@ private: int findByTitle(const char*); void listTitles(); SkSize tileSize() const; + bool sendAnimatePulse(); typedef SkOSWindow INHERITED; }; diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp index df452ce776..9f922ae2d6 100644 --- a/samplecode/SampleArc.cpp +++ b/samplecode/SampleArc.cpp @@ -195,9 +195,13 @@ protected: } void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { - fAnimatingDrawable->setSweep(SampleCode::GetAnimScalar(360/24, 360)); canvas->EXPERIMENTAL_drawDrawable(fRootDrawable); - this->inval(NULL); + } + + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + SkScalar angle = SkDoubleToScalar(fmod(curr * 0.36 / 24, 360)); + fAnimatingDrawable->setSweep(angle); + return true; } SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_OVERRIDE { diff --git a/samplecode/SampleCamera.cpp b/samplecode/SampleCamera.cpp index 7660129c38..35fa719479 100644 --- a/samplecode/SampleCamera.cpp +++ b/samplecode/SampleCamera.cpp @@ -86,12 +86,14 @@ protected: SkRect r = { -150, -150, 150, 150 }; canvas->drawRoundRect(r, 30, 30, paint); } + } - fRY += SampleCode::GetAnimSecondsDelta() * 90; - if (fRY >= SkIntToScalar(360)) { + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + fRY += (curr - prev) * 0.09f; + if (fRY >= 360) { fRY = 0; } - this->inval(NULL); + return true; } private: diff --git a/samplecode/SampleCode.h b/samplecode/SampleCode.h index d09022f350..02590f17a9 100644 --- a/samplecode/SampleCode.h +++ b/samplecode/SampleCode.h @@ -36,6 +36,7 @@ public: static bool FastTextQ(const SkEvent&); +private: static SkMSec GetAnimTime(); static SkMSec GetAnimTimeDelta(); static SkScalar GetAnimSecondsDelta(); @@ -44,6 +45,8 @@ public: static SkScalar GetAnimSinScalar(SkScalar amplitude, SkScalar periodInSec, SkScalar phaseInSec = 0); + + friend class SampleWindow; }; ////////////////////////////////////////////////////////////////////////////// @@ -117,6 +120,7 @@ public: {} void setBGColor(SkColor color) { fBGColor = color; } + bool animatePulse(SkMSec curr, SkMSec prev) { return this->onAnimatePulse(curr, prev); } static bool IsSampleView(SkView*); static bool SetRepeatDraw(SkView*, int count); @@ -136,6 +140,7 @@ public: protected: virtual void onDrawBackground(SkCanvas*); virtual void onDrawContent(SkCanvas*) = 0; + virtual bool onAnimatePulse(SkMSec curr, SkMSec prev) { return false; } // overrides virtual bool onEvent(const SkEvent& evt); diff --git a/samplecode/SampleDegenerateTwoPtRadials.cpp b/samplecode/SampleDegenerateTwoPtRadials.cpp index 4665425934..71c03b016a 100644 --- a/samplecode/SampleDegenerateTwoPtRadials.cpp +++ b/samplecode/SampleDegenerateTwoPtRadials.cpp @@ -37,7 +37,6 @@ static void draw_gradient2(SkCanvas* canvas, const SkRect& rect, SkScalar delta) class DegenerateTwoPtRadialsView : public SampleView { - public: DegenerateTwoPtRadialsView() { fTime = 0; @@ -45,8 +44,7 @@ public: } protected: - // overrides from SkEventSink - virtual bool onQuery(SkEvent* evt) { + bool onQuery(SkEvent* evt) SK_OVERRIDE { if (SampleCode::TitleQ(*evt)) { SampleCode::TitleR(evt, "DegenerateTwoPtRadials"); return true; @@ -54,8 +52,7 @@ protected: return this->INHERITED::onQuery(evt); } - virtual void onDrawContent(SkCanvas* canvas) { - fTime += SampleCode::GetAnimSecondsDelta(); + void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { SkScalar delta = fTime / 15.f; int intPart = SkScalarFloorToInt(delta); delta = delta - SK_Scalar1 * intPart; @@ -77,7 +74,11 @@ protected: paint.setAntiAlias(true); paint.setColor(SK_ColorBLACK); canvas->drawText(txt.c_str(), txt.size(), l + w/2 + w*DELTA_SCALE*delta, t + h + SK_Scalar1 * 10, paint); - this->inval(NULL); + } + + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + fTime += (curr - prev) * 0.001f; + return true; } private: diff --git a/samplecode/SampleHT.cpp b/samplecode/SampleHT.cpp index c6e2b4971a..07605fe1ed 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; } } diff --git a/samplecode/SampleHairline.cpp b/samplecode/SampleHairline.cpp index 807a319e80..3c254472fa 100644 --- a/samplecode/SampleHairline.cpp +++ b/samplecode/SampleHairline.cpp @@ -30,20 +30,6 @@ static SkRandom gRand; -static void test_chromium_9005() { - SkBitmap bm; - bm.allocN32Pixels(800, 600); - - SkCanvas canvas(bm); - - SkPoint pt0 = { 799.33374f, 1.2360189f }; - SkPoint pt1 = { 808.49969f, -7.4338055f }; - - SkPaint paint; - paint.setAntiAlias(true); - canvas.drawLine(pt0.fX, pt0.fY, pt1.fX, pt1.fY, paint); -} - static void generate_pts(SkPoint pts[], int count, int w, int h) { for (int i = 0; i < count; i++) { pts[i].set(gRand.nextUScalar1() * 3 * w - SkIntToScalar(w), @@ -191,7 +177,6 @@ class HairlineView : public SampleView { bool fDoAA; public: HairlineView() { - fCounter = 0; fProcIndex = 0; fDoAA = true; fNow = 0; @@ -199,7 +184,7 @@ public: protected: // overrides from SkEventSink - virtual bool onQuery(SkEvent* evt) { + bool onQuery(SkEvent* evt) SK_OVERRIDE { if (SampleCode::TitleQ(*evt)) { SkString str; str.printf("Hair-%s", gProcs[fProcIndex].fName); @@ -215,15 +200,9 @@ protected: canvas->drawBitmap(b1, SkIntToScalar(b0.width()), 0, NULL); } - int fCounter; - - virtual void onDrawContent(SkCanvas* canvas) { + void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { gRand.setSeed(fNow); - if (false) { // avoid bit rot, suppress warning - test_chromium_9005(); - } - SkBitmap bm, bm2; bm.allocN32Pixels(WIDTH + MARGIN*2, HEIGHT + MARGIN*2); // this will erase our margin, which we want to always stay 0 @@ -240,23 +219,18 @@ protected: bm2.eraseColor(SK_ColorTRANSPARENT); gProcs[fProcIndex].fProc(&c2, paint, bm); canvas->drawBitmap(bm2, SkIntToScalar(10), SkIntToScalar(10), NULL); + } - SkMSec now = SampleCode::GetAnimTime(); - if (fNow != now) { - fNow = now; - fCounter += 1; - fDoAA = !fDoAA; - if (fCounter > 50) { - fProcIndex = cycle_hairproc_index(fProcIndex); - // todo: signal that we want to rebuild our TITLE - fCounter = 0; - } - this->inval(NULL); + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + if (fDoAA) { + fProcIndex = cycle_hairproc_index(fProcIndex); + // todo: signal that we want to rebuild our TITLE } + fDoAA = !fDoAA; + return true; } - virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, - unsigned modi) { + SkView::Click* onFindClickHandler(SkScalar x, SkScalar y, unsigned modi) SK_OVERRIDE { fDoAA = !fDoAA; this->inval(NULL); return this->INHERITED::onFindClickHandler(x, y, modi); diff --git a/samplecode/SamplePathEffects.cpp b/samplecode/SamplePathEffects.cpp index 9af0abb59a..f07cd6ce40 100644 --- a/samplecode/SamplePathEffects.cpp +++ b/samplecode/SamplePathEffects.cpp @@ -21,13 +21,12 @@ #include "SkPixelXorXfermode.h" #define CORNER_RADIUS 12 -static SkScalar gPhase; static const int gXY[] = { 4, 0, 0, -4, 8, -4, 12, 0, 8, 4, 0, 4 }; -static SkPathEffect* make_pe(int flags) { +static SkPathEffect* make_pe(int flags, SkScalar phase) { if (flags == 1) return SkCornerPathEffect::Create(SkIntToScalar(CORNER_RADIUS)); @@ -38,7 +37,8 @@ static SkPathEffect* make_pe(int flags) { path.close(); path.offset(SkIntToScalar(-6), 0); - SkPathEffect* outer = SkPath1DPathEffect::Create(path, SkIntToScalar(12), gPhase, SkPath1DPathEffect::kRotate_Style); + SkPathEffect* outer = SkPath1DPathEffect::Create(path, 12, phase, + SkPath1DPathEffect::kRotate_Style); if (flags == 2) return outer; @@ -51,7 +51,7 @@ static SkPathEffect* make_pe(int flags) { return pe; } -static SkPathEffect* make_warp_pe() { +static SkPathEffect* make_warp_pe(SkScalar phase) { SkPath path; path.moveTo(SkIntToScalar(gXY[0]), SkIntToScalar(gXY[1])); for (unsigned i = 2; i < SK_ARRAY_COUNT(gXY); i += 2) @@ -60,7 +60,7 @@ static SkPathEffect* make_warp_pe() { path.offset(SkIntToScalar(-6), 0); SkPathEffect* outer = SkPath1DPathEffect::Create( - path, SkIntToScalar(12), gPhase, SkPath1DPathEffect::kMorph_Style); + path, 12, phase, SkPath1DPathEffect::kMorph_Style); SkPathEffect* inner = SkCornerPathEffect::Create(SkIntToScalar(CORNER_RADIUS)); SkPathEffect* pe = SkComposePathEffect::Create(outer, inner); @@ -80,29 +80,21 @@ public: SkPaint paint; paint.setAntiAlias(true); -#if 0 - paint.setStyle(SkPaint::kStroke_Style); - paint.setStrokeWidth(SK_Scalar1*4); - this->addLayer(paint); - - paint.setStrokeWidth(SK_Scalar1*1); - paint.setXfermode(SkXfermode::kClear_Mode); - this->addLayer(paint); -#else paint.setAlpha(0x66); this->addLayer(paint, SkIntToScalar(4), SkIntToScalar(4)); paint.setAlpha(0xFF); this->addLayer(paint); -#endif } }; class PathEffectView : public SampleView { SkPath fPath; SkPoint fClickPt; + SkScalar fPhase; + public: - PathEffectView() { + PathEffectView() : fPhase(0) { SkRandom rand; int steps = 20; SkScalar dist = SkIntToScalar(400); @@ -134,8 +126,7 @@ public: } protected: - // overrides from SkEventSink - virtual bool onQuery(SkEvent* evt) { + bool onQuery(SkEvent* evt) SK_OVERRIDE { if (SampleCode::TitleQ(*evt)) { SampleCode::TitleR(evt, "PathEffects"); return true; @@ -143,45 +134,35 @@ protected: return this->INHERITED::onQuery(evt); } - virtual void onDrawContent(SkCanvas* canvas) { - gPhase -= SampleCode::GetAnimSecondsDelta() * 40; - this->inval(NULL); - + void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { SkPaint paint; -#if 0 - paint.setAntiAlias(true); - paint.setStyle(SkPaint::kStroke_Style); - paint.setStrokeWidth(SkIntToScalar(5)); - canvas->drawPath(fPath, paint); - paint.setStrokeWidth(0); - - paint.setColor(SK_ColorWHITE); - paint.setPathEffect(make_pe(1))->unref(); - canvas->drawPath(fPath, paint); -#endif - - canvas->translate(0, SkIntToScalar(50)); + canvas->translate(0, 50); paint.setColor(SK_ColorBLUE); - paint.setPathEffect(make_pe(2))->unref(); + paint.setPathEffect(make_pe(2, fPhase))->unref(); canvas->drawPath(fPath, paint); - canvas->translate(0, SkIntToScalar(50)); + canvas->translate(0, 50); paint.setARGB(0xFF, 0, 0xBB, 0); - paint.setPathEffect(make_pe(3))->unref(); + paint.setPathEffect(make_pe(3, fPhase))->unref(); canvas->drawPath(fPath, paint); - canvas->translate(0, SkIntToScalar(50)); + canvas->translate(0, 50); paint.setARGB(0xFF, 0, 0, 0); - paint.setPathEffect(make_warp_pe())->unref(); + paint.setPathEffect(make_warp_pe(fPhase))->unref(); TestRastBuilder testRastBuilder; paint.setRasterizer(testRastBuilder.detachRasterizer())->unref(); canvas->drawPath(fPath, paint); } + bool onAnimatePulse(SkMSec curr, SkMSec prev) SK_OVERRIDE { + fPhase -= (curr - prev) * 0.04f; + return true; + } + private: typedef SampleView INHERITED; }; diff --git a/samplecode/SamplePicture.cpp b/samplecode/SamplePicture.cpp index c78571a89b..44c494017f 100644 --- a/samplecode/SamplePicture.cpp +++ b/samplecode/SamplePicture.cpp @@ -95,7 +95,7 @@ public: protected: // overrides from SkEventSink - virtual bool onQuery(SkEvent* evt) { + bool onQuery(SkEvent* evt) SK_OVERRIDE { if (SampleCode::TitleQ(*evt)) { SampleCode::TitleR(evt, "Picture"); return true; @@ -123,7 +123,7 @@ protected: } - virtual void onDrawContent(SkCanvas* canvas) { + void onDrawContent(SkCanvas* canvas) SK_OVERRIDE { this->drawSomething(canvas); SkPictureRecorder recorder; @@ -150,22 +150,6 @@ protected: canvas->translate(-SkIntToScalar(100), 0); canvas->drawPicture(pict); canvas->restore(); - -#ifdef SK_DEVELOPER - if (false) { - SkDebugfDumper dumper; - SkDumpCanvas dumpCanvas(&dumper); - dumpCanvas.drawPicture(pict); - } -#endif - - // This used to re-record the sub-picture and redraw the parent - // A capability that is now forbidden! - - SkRandom rand(SampleCode::GetAnimTime()); - canvas->translate(SkIntToScalar(10), SkIntToScalar(250)); - canvas->drawPicture(fPicture); - delayInval(500); } private: @@ -175,7 +159,7 @@ private: (new SkEvent(INVAL_ALL_TYPE, this->getSinkID()))->postDelay(delay); } - virtual bool onEvent(const SkEvent& evt) { + bool onEvent(const SkEvent& evt) SK_OVERRIDE { if (evt.isType(INVAL_ALL_TYPE)) { this->inval(NULL); return true; diff --git a/samplecode/SampleSpiral.cpp b/samplecode/SampleSpiral.cpp deleted file mode 100644 index 5eda3c61ec..0000000000 --- a/samplecode/SampleSpiral.cpp +++ /dev/null @@ -1,63 +0,0 @@ - -/* - * Copyright 2011 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ -#include "SampleCode.h" -#include "SkView.h" -#include "SkCanvas.h" - -class SpiralView : public SampleView { -public: - SpiralView() { - this->setBGColor(0xFFDDDDDD); - } - -protected: - // overrides from SkEventSink - virtual bool onQuery(SkEvent* evt) { - if (SampleCode::TitleQ(*evt)) { - SampleCode::TitleR(evt, "Spiral"); - return true; - } - return this->INHERITED::onQuery(evt); - } - - virtual void onDrawContent(SkCanvas* canvas) { - SkPaint paint; - paint.setAntiAlias(true); - paint.setStyle(SkPaint::kStroke_Style); - paint.setStrokeWidth(SkScalarHalf(SkIntToScalar(3))); - paint.setStyle(SkPaint::kFill_Style); - - SkRect r; - SkScalar l,t,x,y; - l = SampleCode::GetAnimScalar(SkIntToScalar(10), - SkIntToScalar(400)); - t = SampleCode::GetAnimScalar(SkIntToScalar(5), - SkIntToScalar(200)); - - canvas->translate(320,240); - for (int i = 0; i < 35; i++) { - paint.setColor(0xFFF00FF0 - i * 0x04000000); - SkScalar step = SK_ScalarPI / (55 - i); - SkScalar angle = t * step; - x = (20 + SkIntToScalar(i) * 5) * SkScalarSinCos(angle, &y); - y *= (20 + SkIntToScalar(i) * 5); - r.set(x, y, x + SkIntToScalar(10), y + SkIntToScalar(10)); - canvas->drawRect(r, paint); - } - - this->inval(NULL); - } - -private: - typedef SampleView INHERITED; -}; - -////////////////////////////////////////////////////////////////////////////// - -static SkView* MyFactory() { return new SpiralView; } -static SkViewRegister reg(MyFactory); |