| Index: samplecode/SampleMegaStroke.cpp | 
| diff --git a/samplecode/SampleMegaStroke.cpp b/samplecode/SampleMegaStroke.cpp | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..9222256c9efeb6b438c93b73c1211887415fc3dc | 
| --- /dev/null | 
| +++ b/samplecode/SampleMegaStroke.cpp | 
| @@ -0,0 +1,99 @@ | 
| +/* | 
| + * Copyright 2016 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 "SkPath.h" | 
| +#include "SkRandom.h" | 
| + | 
| +class MegaStrokeView : public SampleView { | 
| +public: | 
| +    MegaStrokeView() { | 
| +        fClip.set(0, 0, 950, 600); | 
| +        fAngle = 0; | 
| +        fPlusMinus = 0; | 
| +        SkRandom rand; | 
| +        fMegaPath.reset(); | 
| +        for (int index = 0; index < 921; ++index) { | 
| +            for (int segs = 0; segs < 40; ++segs) { | 
| +                fMegaPath.lineTo(SkIntToScalar(index), SkIntToScalar(rand.nextRangeU(500, 600))); | 
| +            } | 
| +        } | 
| +    } | 
| + | 
| +protected: | 
| +    // overrides from SkEventSink | 
| +    bool onQuery(SkEvent* evt) override { | 
| +        if (SampleCode::TitleQ(*evt)) { | 
| +            SampleCode::TitleR(evt, "MegaStroke"); | 
| +            return true; | 
| +        } | 
| + | 
| +        SkUnichar uni; | 
| +        if (SampleCode::CharQ(*evt, &uni)) { | 
| +           fClip.set(0, 0, 950, 600); | 
| +        } | 
| +        SkString str; | 
| +        evt->getType(&str); | 
| +        if (str == SkString("SampleCode_Key_Event")) { | 
| +           fClip.set(0, 0, 950, 600); | 
| +        } | 
| +        return this->INHERITED::onQuery(evt); | 
| +    } | 
| + | 
| +    void onDrawBackground(SkCanvas* canvas) override { | 
| +    } | 
| + | 
| +    void onDrawContent(SkCanvas* canvas) override { | 
| +        SkPaint paint; | 
| +        paint.setAntiAlias(true); | 
| +        paint.setARGB(255,255,153,0); | 
| +        paint.setStyle(SkPaint::kStroke_Style); | 
| +        paint.setStrokeWidth(1); | 
| + | 
| +        canvas->save(); | 
| +        canvas->clipRect(fClip); | 
| +        canvas->clear(SK_ColorWHITE); | 
| +        canvas->drawPath(fMegaPath, paint); | 
| +        canvas->restore(); | 
| + | 
| +        SkPaint divSimPaint; | 
| +        divSimPaint.setColor(SK_ColorBLUE); | 
| +	    SkScalar x = SkScalarSin(fAngle * SK_ScalarPI / 180) * 200 + 250; | 
| +	    SkScalar y = SkScalarCos(fAngle * SK_ScalarPI / 180) * 200 + 250; | 
| + | 
| +        if ((fPlusMinus ^= 1)) { | 
| +            fAngle += 5; | 
| +        } else { | 
| +            fAngle -= 5; | 
| +        } | 
| +        SkRect divSim = SkRect::MakeXYWH(x, y, 100, 100); | 
| +        divSim.outset(30, 30); | 
| +        canvas->drawRect(divSim, divSimPaint); | 
| +        fClip = divSim; | 
| +    } | 
| + | 
| +    void onSizeChange() override { | 
| +        fClip.set(0, 0, 950, 600); | 
| +    } | 
| + | 
| +    bool onAnimate(const SkAnimTimer& ) override { | 
| +        return true; | 
| +    } | 
| + | 
| +private: | 
| +    SkPath      fMegaPath; | 
| +    SkRect      fClip; | 
| +    int         fAngle; | 
| +    int         fPlusMinus; | 
| +    typedef SampleView INHERITED; | 
| +}; | 
| + | 
| +////////////////////////////////////////////////////////////////////////////// | 
| + | 
| +static SkView* MyFactory() { return new MegaStrokeView; } | 
| +static SkViewRegister reg(MyFactory); | 
|  |