Samples: clean up cruft

  - replace virtual with override.
  - remove default constructor.
  - use default field initializers
  - move work from constructor into onOnceBeforeDraw
  - mark everything private
  - enum { N = 100 }; constants to constexpr
  - remove unused variables

Change-Id: I8c7a19bc24fec416a6b88d634ee948d3e842b986
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/228056
Commit-Queue: Ben Wagner <bungeman@google.com>
Auto-Submit: Hal Canary <halcanary@google.com>
Reviewed-by: Ben Wagner <bungeman@google.com>
diff --git a/samplecode/SampleAAClip.cpp b/samplecode/SampleAAClip.cpp
index 757ba40..8733be5 100644
--- a/samplecode/SampleAAClip.cpp
+++ b/samplecode/SampleAAClip.cpp
@@ -55,15 +55,11 @@
 }
 
 class AAClipView : public Sample {
-public:
-    AAClipView() {
-        testop();
-    }
+    SkString name() override { return SkString("AAClip"); }
 
-protected:
-    virtual SkString name() { return SkString("AAClip"); }
+    void onOnceBeforeDraw() override { testop(); }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    void onDrawContent(SkCanvas* canvas) override {
 #if 1
         SkAAClip aaclip;
         SkPath path;
@@ -106,11 +102,5 @@
         canvas->drawPath(path, paint);
 #endif
     }
-
-private:
-    typedef Sample INHERITED;
 };
-
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new AAClipView(); )
diff --git a/samplecode/SampleAARectModes.cpp b/samplecode/SampleAARectModes.cpp
index 006734f..a3c5ea3 100644
--- a/samplecode/SampleAARectModes.cpp
+++ b/samplecode/SampleAARectModes.cpp
@@ -70,15 +70,14 @@
 
 class AARectsModesView : public Sample {
     SkPaint fBGPaint;
-public:
-    AARectsModesView () {
+
+    void onOnceBeforeDraw() override {
         fBGPaint.setShader(make_bg_shader());
     }
 
-protected:
-    virtual SkString name() { return SkString("AARectsModes"); }
+    SkString name() override { return SkString("AARectsModes"); }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    void onDrawContent(SkCanvas* canvas) override {
         const SkRect bounds = SkRect::MakeWH(W, H);
         static const SkAlpha gAlphaValue[] = { 0xFF, 0x88, 0x88 };
 
@@ -107,11 +106,5 @@
             canvas->translate(W * 5 / 4, 0);
         }
     }
-
-private:
-    typedef Sample INHERITED;
 };
-
-///////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new AARectsModesView(); )
diff --git a/samplecode/SampleAARects.cpp b/samplecode/SampleAARects.cpp
index e46f986..028c30d 100644
--- a/samplecode/SampleAARects.cpp
+++ b/samplecode/SampleAARects.cpp
@@ -32,17 +32,13 @@
     return bitmap;
 }
 
+static constexpr int N = 64;
+
 class AARectView : public Sample {
     SkBitmap fBitmap;
-    enum {
-        N = 64
-    };
 
-protected:
     void onOnceBeforeDraw() override {
         fBitmap = createBitmap(N);
-
-        fWidth = N;
     }
 
     SkString name() override { return SkString("AA Rects"); }
@@ -173,7 +169,6 @@
     }
 
 private:
-    int fWidth;
 
     typedef Sample INHERITED;
 };
diff --git a/samplecode/SampleAndroidShadows.cpp b/samplecode/SampleAndroidShadows.cpp
index 3c9c57c..71eb22a 100644
--- a/samplecode/SampleAndroidShadows.cpp
+++ b/samplecode/SampleAndroidShadows.cpp
@@ -35,32 +35,18 @@
     SkPath    fTabPath;
 
     SkPoint3  fLightPos;
-    SkScalar  fZDelta;
-    SkScalar  fAnimTranslate;
-    SkScalar  fAnimAngle;
-    SkScalar  fAnimAlpha;
+    SkScalar  fZDelta = 0;
+    SkScalar  fAnimTranslate = 0;
+    SkScalar  fAnimAngle = 0;
+    SkScalar  fAnimAlpha = 1;
 
-    bool      fShowAmbient;
-    bool      fShowSpot;
-    bool      fUseAlt;
-    bool      fShowObject;
-    bool      fIgnoreShadowAlpha;
-    bool      fDoAlphaAnimation;
+    bool      fShowAmbient = true;
+    bool      fShowSpot = true;
+    bool      fUseAlt = false;
+    bool      fShowObject = true;
+    bool      fIgnoreShadowAlpha = false;
+    bool      fDoAlphaAnimation = false;
 
-public:
-    ShadowsView()
-        : fZDelta(0)
-        , fAnimTranslate(0)
-        , fAnimAngle(0)
-        , fAnimAlpha(1)
-        , fShowAmbient(true)
-        , fShowSpot(true)
-        , fUseAlt(false)
-        , fShowObject(true)
-        , fIgnoreShadowAlpha(false)
-        , fDoAlphaAnimation(false) {}
-
-protected:
     void onOnceBeforeDraw() override {
         fCirclePath.addCircle(0, 0, 50);
         fRectPath.addRect(SkRect::MakeXYWH(-100, -50, 200, 100));
@@ -155,10 +141,6 @@
             return false;
     }
 
-    void drawBG(SkCanvas* canvas) {
-        canvas->drawColor(0xFFDDDDDD);
-    }
-
     void drawShadowedPath(SkCanvas* canvas, const SkPath& path,
                           const SkPoint3& zPlaneParams,
                           const SkPaint& paint, SkScalar ambientAlpha,
@@ -196,7 +178,8 @@
     }
 
     void onDrawContent(SkCanvas* canvas) override {
-        this->drawBG(canvas);
+        canvas->drawColor(0xFFDDDDDD);
+
         const SkScalar kLightWidth = 800;
         const SkScalar kAmbientAlpha = 0.039f;
         const SkScalar kSpotAlpha = 0.19f;
diff --git a/samplecode/SampleAnimBlur.cpp b/samplecode/SampleAnimBlur.cpp
index 178854a..c946a2a 100644
--- a/samplecode/SampleAnimBlur.cpp
+++ b/samplecode/SampleAnimBlur.cpp
@@ -22,10 +22,9 @@
 }
 
 class AnimBlurView : public Sample {
-public:
-    AnimBlurView() : fBlurSigma(0), fCircleRadius(100) {}
+    SkScalar fBlurSigma = 0;
+    SkScalar fCircleRadius = 100;
 
-protected:
     SkString name() override { return SkString("AnimBlur"); }
 
     void onDrawContent(SkCanvas* canvas) override {
@@ -53,13 +52,5 @@
         fCircleRadius = 3 + get_anim_sin(1e-9 * nanos, 150, 25, 3);
         return true;
     }
-
-private:
-    SkScalar fBlurSigma, fCircleRadius;
-
-    typedef Sample INHERITED;
 };
-
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new AnimBlurView(); )
diff --git a/samplecode/SampleAnimatedImage.cpp b/samplecode/SampleAnimatedImage.cpp
index eaa318c..da6ac28 100644
--- a/samplecode/SampleAnimatedImage.cpp
+++ b/samplecode/SampleAnimatedImage.cpp
@@ -23,13 +23,14 @@
 static constexpr char kResetKey = 'r';
 
 class SampleAnimatedImage : public Sample {
-public:
-    SampleAnimatedImage()
-        : INHERITED()
-        , fYOffset(0)
-    {}
+    sk_sp<SkAnimatedImage>  fImage;
+    sk_sp<SkDrawable>       fDrawable;
+    SkScalar                fYOffset = 0;
+    bool                    fRunning = false;
+    double                  fCurrentTime = 0.0;
+    double                  fLastWallTime = 0.0;
+    double                  fTimeToShowNextFrame = 0.0;
 
-protected:
     void onDrawBackground(SkCanvas* canvas) override {
         SkFont font;
         font.setSize(20);
@@ -119,18 +120,6 @@
         }
         return false;
     }
-
-private:
-    sk_sp<SkAnimatedImage>  fImage;
-    sk_sp<SkDrawable>       fDrawable;
-    SkScalar                fYOffset;
-    bool                    fRunning = false;
-    double                  fCurrentTime = 0.0;
-    double                  fLastWallTime = 0.0;
-    double                  fTimeToShowNextFrame = 0.0;
-    typedef Sample INHERITED;
 };
 
-///////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new SampleAnimatedImage(); )
diff --git a/samplecode/SampleAnimatedText.cpp b/samplecode/SampleAnimatedText.cpp
index 3f8555c..8e7ed0e 100644
--- a/samplecode/SampleAnimatedText.cpp
+++ b/samplecode/SampleAnimatedText.cpp
@@ -38,10 +38,11 @@
 //               SDF-text special case (which falls back to bitmap fonts for small points)
 
 class AnimatedTextView : public Sample {
-public:
-    AnimatedTextView() : fScale(1.0f), fScaleInc(0.1f), fRotation(0.0f), fSizeScale(1) {}
+    float fScale = 1;
+    float fScaleInc = 0.1f;
+    float fRotation = 0;
+    int   fSizeScale = 1;
 
-protected:
     SkString name() override { return SkString("AnimatedText"); }
 
     bool onChar(SkUnichar uni) override {
@@ -106,17 +107,6 @@
         }
         return true;
     }
-
-private:
-    float fScale;
-    float fScaleInc;
-    float fRotation;
-    int   fSizeScale;
-
-
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new AnimatedTextView(); )
diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp
index d6b6170..2d5892d 100644
--- a/samplecode/SampleArc.cpp
+++ b/samplecode/SampleArc.cpp
@@ -78,14 +78,10 @@
         }
     };
 
-public:
-    SkRect fRect;
+    SkRect fRect = {20, 20, 220, 220};
     sk_sp<MyDrawable> fAnimatingDrawable;
     sk_sp<SkDrawable> fRootDrawable;
 
-    ArcsView() { }
-
-protected:
     SkString name() override { return SkString("Arcs"); }
 
     static void DrawRectWithLines(SkCanvas* canvas, const SkRect& r, const SkPaint& p) {
@@ -164,11 +160,8 @@
 
     void onOnceBeforeDraw() override {
         testparse();
-        fSweep = SkIntToScalar(100);
         this->setBGColor(0xFFDDDDDD);
 
-        fRect.set(0, 0, SkIntToScalar(200), SkIntToScalar(200));
-        fRect.offset(SkIntToScalar(20), SkIntToScalar(20));
         fAnimatingDrawable = sk_make_sp<MyDrawable>(fRect);
 
         SkPictureRecorder recorder;
@@ -187,13 +180,6 @@
         }
         return true;
     }
-
-private:
-    SkScalar fSweep;
-
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new ArcsView(); )
diff --git a/samplecode/SampleBitmapRect.cpp b/samplecode/SampleBitmapRect.cpp
index 8644cb4..1f757f5 100644
--- a/samplecode/SampleBitmapRect.cpp
+++ b/samplecode/SampleBitmapRect.cpp
@@ -95,13 +95,8 @@
         bounce_pt(&fSrcPt, &fSrcVec, fSrcLimit);
         return true;
     }
-
-private:
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 static constexpr int BIG_H = 120;
 
 static void make_big_bitmap(SkBitmap* bm) {
@@ -161,7 +156,5 @@
     }
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new BitmapRectView(); )
 DEF_SAMPLE( return new BitmapRectView2(); )
diff --git a/samplecode/SampleCCPRGeometry.cpp b/samplecode/SampleCCPRGeometry.cpp
index 3145865..c6330cb 100644
--- a/samplecode/SampleCCPRGeometry.cpp
+++ b/samplecode/SampleCCPRGeometry.cpp
@@ -44,8 +44,7 @@
  * geometry processors.
  */
 class CCPRGeometryView : public Sample {
-public:
-    CCPRGeometryView() { this->updateGpuData(); }
+    void onOnceBeforeDraw() override { this->updateGpuData(); }
     void onDrawContent(SkCanvas*) override;
 
     Sample::Click* onFindClickHandler(SkScalar x, SkScalar y, ModifierKey) override;
@@ -53,7 +52,6 @@
     bool onChar(SkUnichar) override;
     SkString name() override { return SkString("CCPRGeometry"); }
 
-private:
     class Click;
     class DrawCoverageCountOp;
     class VisualizeCoverageCountFP;
@@ -76,8 +74,6 @@
     SkTArray<TriPointInstance> fTriPointInstances;
     SkTArray<QuadPointInstance> fQuadPointInstances;
     SkPath fPath;
-
-    typedef Sample INHERITED;
 };
 
 class CCPRGeometryView::DrawCoverageCountOp : public GrDrawOp {
diff --git a/samplecode/SampleChart.cpp b/samplecode/SampleChart.cpp
index c849d32..448e1d7 100644
--- a/samplecode/SampleChart.cpp
+++ b/samplecode/SampleChart.cpp
@@ -81,13 +81,13 @@
 // A set of scrolling line plots with the area between each plot filled. Stresses out GPU path
 // filling
 class ChartView : public Sample {
-public:
-    ChartView() {
-        fShift = 0;
-        fSize.set(-1, -1);
-    }
+    static constexpr int kNumGraphs = 5;
+    static constexpr int kPixelsPerTick = 3;
+    static constexpr int kShiftPerFrame = 1;
+    int                 fShift = 0;
+    SkISize             fSize = {-1, -1};
+    SkTDArray<SkScalar> fData[kNumGraphs];
 
-protected:
     SkString name() override { return SkString("Chart"); }
 
     void onDrawContent(SkCanvas* canvas) override {
@@ -158,19 +158,6 @@
 
         fShift += kShiftPerFrame;
     }
-
-private:
-    enum {
-        kNumGraphs = 5,
-        kPixelsPerTick = 3,
-        kShiftPerFrame = 1,
-    };
-    int                 fShift;
-    SkISize             fSize;
-    SkTDArray<SkScalar> fData[kNumGraphs];
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new ChartView(); )
diff --git a/samplecode/SampleChineseFling.cpp b/samplecode/SampleChineseFling.cpp
index bb749e5..1cdf784 100644
--- a/samplecode/SampleChineseFling.cpp
+++ b/samplecode/SampleChineseFling.cpp
@@ -38,18 +38,18 @@
 }
 
 class ChineseFlingView : public Sample {
-public:
-    ChineseFlingView() : fBlobs(kNumBlobs) {}
+    static constexpr int kNumBlobs = 200;
+    static constexpr int kWordLength = 16;
 
-protected:
+    sk_sp<SkTypeface>    fTypeface;
+    SkFontMetrics        fMetrics;
+    sk_sp<SkTextBlob>    fBlobs[kNumBlobs];
+    SkRandom             fRand;
+    int                  fIndex = 0;
+
     SkString name() override { return SkString("chinese-fling"); }
 
     void onDrawContent(SkCanvas* canvas) override {
-        if (!fInitialized) {
-            this->init();
-            fInitialized = true;
-        }
-
         canvas->clear(0xFFDDDDDD);
 
         SkPaint paint;
@@ -64,18 +64,14 @@
 
             y += fMetrics.fDescent + fMetrics.fLeading;
             ++index;
-            index %= fBlobs.count();
+            index %= kNumBlobs;
         }
         // now "fling" a random amount
         fIndex += fRand.nextRangeU(5, 20);
-        fIndex %= fBlobs.count();
+        fIndex %= kNumBlobs;
     }
 
-private:
-    static constexpr auto kNumBlobs = 200;
-    static constexpr auto kWordLength = 16;
-
-    void init() {
+    void onOnceBeforeDraw() override {
         fTypeface = chinese_typeface();
 
         SkFont font(fTypeface, 56);
@@ -94,10 +90,8 @@
                                               0,
                                               0);
 
-            fBlobs.emplace_back(builder.make());
+            fBlobs[i] = builder.make();
         }
-
-        fIndex = 0;
     }
 
     // Construct a random kWordLength character 'word' drawing from the full Chinese set
@@ -106,22 +100,20 @@
             glyphs[i] = fRand.nextRangeU(0x4F00, 0x9FA0);
         }
     }
-
-    bool                        fInitialized = false;
-    sk_sp<SkTypeface>           fTypeface;
-    SkFontMetrics               fMetrics;
-    SkTArray<sk_sp<SkTextBlob>> fBlobs;
-    SkRandom                    fRand;
-    int                         fIndex;
-
-    typedef Sample INHERITED;
 };
 
 class ChineseZoomView : public Sample {
-public:
-    ChineseZoomView() : fBlobs(kNumBlobs), fScale(15.0f), fTranslate(0.0f) {}
+    static constexpr int kNumBlobs = 8;
+    static constexpr int kParagraphLength = 175;
 
-protected:
+    bool                 fAfterFirstFrame = false;
+    sk_sp<SkTypeface>    fTypeface;
+    SkFontMetrics        fMetrics;
+    sk_sp<SkTextBlob>    fBlobs[kNumBlobs];
+    SkRandom             fRand;
+    SkScalar             fScale = 15;
+    SkScalar             fTranslate = 0;
+
     SkString name() override { return SkString("chinese-zoom"); }
 
     bool onChar(SkUnichar uni) override {
@@ -137,37 +129,30 @@
     }
 
     void onDrawContent(SkCanvas* canvas) override {
-        bool afterFirstFrame = fInitialized;
-        if (!fInitialized) {
-            this->init();
-            fInitialized = true;
-        }
-
         canvas->clear(0xFFDDDDDD);
 
         SkPaint paint;
         paint.setAntiAlias(true);
         paint.setColor(0xDE000000);
 
-        if (afterFirstFrame) {
+        if (fAfterFirstFrame) {
 #if SK_SUPPORT_GPU
             GrContext* grContext = canvas->getGrContext();
             if (grContext) {
-                sk_sp<SkImage> image =
-                grContext->priv().testingOnly_getFontAtlasImage(
-                                                            GrMaskFormat::kA8_GrMaskFormat, 0);
+                sk_sp<SkImage> image = grContext->priv().testingOnly_getFontAtlasImage(
+                            GrMaskFormat::kA8_GrMaskFormat, 0);
                 canvas->drawImageRect(image,
                                       SkRect::MakeXYWH(10.0f, 10.0f, 512.0f, 512.0), &paint);
                 image = grContext->priv().testingOnly_getFontAtlasImage(
-                                                            GrMaskFormat::kA8_GrMaskFormat, 1);
+                        GrMaskFormat::kA8_GrMaskFormat, 1);
                 canvas->drawImageRect(image,
                                       SkRect::MakeXYWH(522.0f, 10.0f, 512.f, 512.0f), &paint);
                 image = grContext->priv().testingOnly_getFontAtlasImage(
-                                                            GrMaskFormat::kA8_GrMaskFormat, 2);
+                        GrMaskFormat::kA8_GrMaskFormat, 2);
                 canvas->drawImageRect(image,
                                       SkRect::MakeXYWH(10.0f, 522.0f, 512.0f, 512.0f), &paint);
                 image = grContext->priv().testingOnly_getFontAtlasImage(
-                                                            GrMaskFormat::kA8_GrMaskFormat, 3);
+                        GrMaskFormat::kA8_GrMaskFormat, 3);
                 canvas->drawImageRect(image,
                                       SkRect::MakeXYWH(522.0f, 522.0f, 512.0f, 512.0f), &paint);
             }
@@ -186,13 +171,12 @@
 
             y += 3*(fMetrics.fDescent - fMetrics.fAscent + fMetrics.fLeading);
         }
+        if (!fAfterFirstFrame) {
+            fAfterFirstFrame = true;
+        }
     }
 
-private:
-    static constexpr auto kNumBlobs = 8;
-    static constexpr auto kParagraphLength = 175;
-
-    void init() {
+    void onOnceBeforeDraw() override {
         fTypeface = chinese_typeface();
 
         SkFont font(fTypeface, 11);
@@ -220,10 +204,8 @@
                 y += fMetrics.fDescent - fMetrics.fAscent + fMetrics.fLeading;
                 paragraphLength -= 45;
             }
-            fBlobs.emplace_back(builder.make());
+            fBlobs[i] = builder.make();
         }
-
-        fIndex = 0;
     }
 
     // Construct a random kWordLength character 'word' drawing from the full Chinese set
@@ -232,17 +214,6 @@
             glyphs[i] = fRand.nextRangeU(0x4F00, 0x9FA0);
         }
     }
-
-    bool                        fInitialized = false;
-    sk_sp<SkTypeface>           fTypeface;
-    SkFontMetrics               fMetrics;
-    SkTArray<sk_sp<SkTextBlob>> fBlobs;
-    SkRandom                    fRand;
-    SkScalar                    fScale;
-    SkScalar                    fTranslate;
-    int                         fIndex;
-
-    typedef Sample INHERITED;
 };
 
 //////////////////////////////////////////////////////////////////////////////
diff --git a/samplecode/SampleCircle.cpp b/samplecode/SampleCircle.cpp
index 3f83556..c4126f9 100644
--- a/samplecode/SampleCircle.cpp
+++ b/samplecode/SampleCircle.cpp
@@ -22,19 +22,7 @@
 }
 
 class CircleView : public Sample {
-public:
-    static const SkScalar ANIM_DX;
-    static const SkScalar ANIM_DY;
-    static const SkScalar ANIM_RAD;
-    SkScalar fDX, fDY, fRAD;
-
-    CircleView() {
-        fDX = fDY = fRAD = 0;
-        fN = 3;
-    }
-
-protected:
-    virtual SkString name() { return SkString("Circles"); }
+    SkString name() override { return SkString("Circles"); }
 
     void circle(SkCanvas* canvas, int width, bool aa) {
         SkPaint paint;
@@ -46,7 +34,7 @@
             paint.setStyle(SkPaint::kStroke_Style);
             paint.setStrokeWidth(SkIntToScalar(width));
         }
-        canvas->drawCircle(0, 0, SkIntToScalar(9) + fRAD, paint);
+        canvas->drawCircle(0, 0, 9.0f, paint);
         if (false) { // avoid bit rot, suppress warning
             test_circlebounds(canvas);
         }
@@ -78,7 +66,7 @@
         path->close();
     }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    void onDrawContent(SkCanvas* canvas) override {
         SkPaint paint;
         paint.setAntiAlias(true);
         paint.setStyle(SkPaint::kStroke_Style);
@@ -95,16 +83,6 @@
             canvas->drawPath(path, paint);
         }
     }
-
-private:
-    int fN;
-    typedef Sample INHERITED;
 };
 
-const SkScalar CircleView::ANIM_DX(SK_Scalar1 / 67);
-const SkScalar CircleView::ANIM_DY(SK_Scalar1 / 29);
-const SkScalar CircleView::ANIM_RAD(SK_Scalar1 / 19);
-
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new CircleView(); )
diff --git a/samplecode/SampleClip.cpp b/samplecode/SampleClip.cpp
index 1e7b2ce..e931881 100644
--- a/samplecode/SampleClip.cpp
+++ b/samplecode/SampleClip.cpp
@@ -12,7 +12,6 @@
 #include "include/core/SkPath.h"
 #include "include/utils/SkRandom.h"
 #include "samplecode/Sample.h"
-#include "src/core/SkAAClip.h"
 #include "src/core/SkClipOpPriv.h"
 
 constexpr int W = 150;
@@ -102,20 +101,9 @@
 typedef void (*CanvasProc)(SkCanvas*, bool);
 
 class ClipView : public Sample {
-public:
-    ClipView() {
-        SkAAClip clip;
-        SkIRect r = { -2, -3, 842, 18 };
-        clip.setRect(r);
-    }
+    SkString name() override { return SkString("Clip"); }
 
-    virtual ~ClipView() {
-    }
-
-protected:
-    virtual SkString name() { return SkString("Clip"); }
-
-    virtual void onDrawContent(SkCanvas* canvas) {
+    void onDrawContent(SkCanvas* canvas) override {
         canvas->drawColor(SK_ColorWHITE);
         canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
 
@@ -144,11 +132,6 @@
             canvas->translate(0, H * SK_Scalar1 * 8 / 7);
         }
     }
-
-private:
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new ClipView(); )
diff --git a/samplecode/SampleClipDrawMatch.cpp b/samplecode/SampleClipDrawMatch.cpp
index 729e16a..bdbb54b 100644
--- a/samplecode/SampleClipDrawMatch.cpp
+++ b/samplecode/SampleClipDrawMatch.cpp
@@ -115,8 +115,17 @@
 }
 
 class ClipDrawMatchView : public Sample {
+    SkInterpolator  fTrans;
+    Geometry        fGeom;
+    bool            fClipFirst = true;
+    int             fSign = 1;
+    const double    fStart = SkTime::GetMSecs();
+
 public:
-    ClipDrawMatchView() : fTrans(2, 5), fGeom(kRect_Geometry), fClipFirst(true), fSign(1) {
+    ClipDrawMatchView() : fTrans(2, 5), fGeom(kRect_Geometry) {}
+
+private:
+    void onOnceBeforeDraw() override {
         SkScalar values[2];
 
         fTrans.setRepeatCount(999);
@@ -132,7 +141,6 @@
         fTrans.setKeyFrame(4, GetMSecs() + 5000, values);
     }
 
-protected:
     SkString name() override { return SkString("ClipDrawMatch"); }
 
     bool onChar(SkUnichar uni) override {
@@ -239,17 +247,6 @@
     SkMSec GetMSecs() const {
         return static_cast<SkMSec>(SkTime::GetMSecs() - fStart);
     }
-
-private:
-    SkInterpolator  fTrans;
-    Geometry        fGeom;
-    bool            fClipFirst;
-    int             fSign;
-    const double    fStart = SkTime::GetMSecs();
-
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new ClipDrawMatchView(); )
diff --git a/samplecode/SampleClock.cpp b/samplecode/SampleClock.cpp
index 347b2ea..a90ecf1 100644
--- a/samplecode/SampleClock.cpp
+++ b/samplecode/SampleClock.cpp
@@ -18,10 +18,6 @@
 #define USE_PATH 1
 
 class ClockView : public Sample {
-public:
-    ClockView() {}
-
-protected:
     SkString name() override { return SkString("Clock"); }
 
     void onDrawContent(SkCanvas* canvas) override {
@@ -211,12 +207,6 @@
     }
 
     bool onAnimate(double /*nanos*/) override { return true; }
-
-private:
-
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new ClockView(); )
diff --git a/samplecode/SampleColorFilter.cpp b/samplecode/SampleColorFilter.cpp
index 339a05c..d30f760 100644
--- a/samplecode/SampleColorFilter.cpp
+++ b/samplecode/SampleColorFilter.cpp
@@ -113,7 +113,6 @@
         N = 64
     };
 
-protected:
     void onOnceBeforeDraw() override {
         fBitmap = createBitmap(N);
         fShader = ToolUtils::create_checkerboard_shader(0xFFCCCCCC, 0xFFFFFFFF, 12);
@@ -179,11 +178,6 @@
         }
 
     }
-
-private:
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new ColorFilterView(); )
diff --git a/samplecode/SampleComplexClip.cpp b/samplecode/SampleComplexClip.cpp
index 9af4669..4e811a0 100644
--- a/samplecode/SampleComplexClip.cpp
+++ b/samplecode/SampleComplexClip.cpp
@@ -12,15 +12,13 @@
 #include "src/core/SkClipOpPriv.h"
 
 class ComplexClipView : public Sample {
-public:
-    ComplexClipView() {
+    void onOnceBeforeDraw() override {
         this->setBGColor(0xFFA0DDA0);
     }
 
-protected:
-    virtual SkString name() { return SkString("ComplexClip"); }
+    SkString name() override { return SkString("ComplexClip"); }
 
-    virtual void onDrawContent(SkCanvas* canvas) {
+    void onDrawContent(SkCanvas* canvas) override {
         SkPath path;
         path.moveTo(SkIntToScalar(0),   SkIntToScalar(50));
         path.quadTo(SkIntToScalar(0),   SkIntToScalar(0),   SkIntToScalar(50),  SkIntToScalar(0));
@@ -137,11 +135,6 @@
         }
         canvas->restore();
     }
-
-private:
-    typedef Sample INHERITED;
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
 DEF_SAMPLE( return new ComplexClipView(); )
diff --git a/samplecode/SampleCowboy.cpp b/samplecode/SampleCowboy.cpp
index db60229..6ba3177 100644
--- a/samplecode/SampleCowboy.cpp
+++ b/samplecode/SampleCowboy.cpp
@@ -20,37 +20,36 @@
 #include "tools/Resources.h"
 
 namespace {
-
-class CowboyView : public Sample {
-public:
-    CowboyView()
-        : fLabel("SampleCowboy")
-        , fState(kZoomIn)
-        , fAnimationLoop(kAnimationIterations)
-        , fDelta(1) {}
-    ~CowboyView() override = default;
-
-protected:
+class AnimatedSVGSample : public Sample {
     static constexpr auto kAnimationIterations = 5;
-
     enum State {
         kZoomIn,
         kScroll,
         kZoomOut
     };
+    sk_sp<SkSVGDOM> fDom;
+    const char*     fResource = nullptr;
+    const char*     fName = nullptr;
+    State           fState = kZoomIn;
+    int             fAnimationLoop = kAnimationIterations;
+    SkScalar        fDelta = 1;
 
+public:
+    AnimatedSVGSample(const char* r, const char* n) : fResource(r), fName(n) {}
+
+private:
     void onOnceBeforeDraw() override {
-        constexpr char path[] = "Cowboy.svg";
-        auto data = GetResourceAsData(path);
+        SkASSERT(fResource);
+        auto data = GetResourceAsData(fResource);
         if (!data) {
-            SkDebugf("file not found: \"%s\"\n", path);
+            SkDebugf("Resource not found: \"%s\"\n", fResource);
             return;
         }
         SkMemoryStream svgStream(std::move(data));
 
         SkDOM xmlDom;
         if (!xmlDom.build(svgStream)) {
-            SkDebugf("XML parsing failed: \"path\"\n", fPath.c_str());
+            SkDebugf("XML parsing failed: \"%s\"\n", fResource);
             return;
         }
 
@@ -92,11 +91,9 @@
         if (fDom) {
             fDom->setContainerSize(SkSize::Make(this->width(), this->height()));
         }
-
-        this->INHERITED::onSizeChange();
     }
 
-    SkString name() override { return fLabel; }
+    SkString name() override { return SkASSERT(fName), SkString(fName); }
 
     bool onAnimate(double nanos) override {
         if (!fDom) {
@@ -123,20 +120,9 @@
         }
         return true;
     }
-
-private:
-    sk_sp<SkSVGDOM> fDom;
-    SkString        fPath;
-    SkString        fLabel;
-    State           fState;
-    int             fAnimationLoop;
-    SkScalar        fDelta;
-
-    typedef Sample INHERITED;
 };
+} // namespace
 
-} // anonymous namespace
-
-DEF_SAMPLE( return new CowboyView(); )
+DEF_SAMPLE( return new AnimatedSVGSample("Cowboy.svg", "SampleCowboy"); )
 
 #endif  // SK_XML