SkiaExamples improvements.

Make it possible for a client to write a Hello World in less than 50 lines.

R=caryclark@google.com

Review URL: https://codereview.chromium.org/18574002

git-svn-id: http://skia.googlecode.com/svn/trunk@10319 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/SkiaExamples/HelloSkiaExample.cpp b/experimental/SkiaExamples/HelloSkiaExample.cpp
index f25cd76..2424b76 100644
--- a/experimental/SkiaExamples/HelloSkiaExample.cpp
+++ b/experimental/SkiaExamples/HelloSkiaExample.cpp
@@ -7,7 +7,7 @@
  *
  */
 
-#include "BaseExample.h"
+#include "SkExample.h"
 
 #include "SkApplication.h"
 #include "SkDraw.h"
@@ -15,98 +15,96 @@
 #include "SkGraphics.h"
 #include "SkUnitMappers.h"
 
-class HelloSkia : public BaseExample {
-    public:
-        HelloSkia(void* hWnd, int argc, char** argv)
-            : INHERITED(hWnd, argc, argv)
-        {
-            fBGColor = SK_ColorWHITE;
-            fRotationAngle = SkIntToScalar(0);
+class HelloSkia : public SkExample {
+public:
+    HelloSkia(SkExampleWindow* window) : SkExample(window) {
+        fName = "HelloSkia";
+        fBGColor = SK_ColorWHITE;
+        fRotationAngle = SkIntToScalar(0);
 
-            setupBackend(kGPU_DeviceType);
-            // Another option is software rendering:
-            // setupBackend(kRaster_DeviceType);
-        }
+        fWindow->setupBackend(SkExampleWindow::kGPU_DeviceType);
+        // Another option is software rendering:
+        // setupBackend(SkExampleWindow::kRaster_DeviceType);
+    }
 
-    protected:
-        virtual void draw(SkCanvas* canvas) SK_OVERRIDE {
-            // Clear background
-            canvas->drawColor(fBGColor);
+protected:
+    void draw(SkCanvas* canvas) {
+        // Clear background
+        canvas->drawColor(fBGColor);
 
-            SkPaint paint;
-            paint.setColor(SK_ColorRED);
+        SkPaint paint;
+        paint.setColor(SK_ColorRED);
 
-            // Draw a rectangle with blue paint
-            SkRect rect = {
+        // Draw a rectangle with blue paint
+        SkRect rect = {
                 SkIntToScalar(10), SkIntToScalar(10),
                 SkIntToScalar(128), SkIntToScalar(128)
-            };
-            canvas->drawRect(rect, paint);
+        };
+        canvas->drawRect(rect, paint);
 
-            // Set up a linear gradient and draw a circle
-            {
-                SkPoint linearPoints[] = {
+        // Set up a linear gradient and draw a circle
+        {
+            SkPoint linearPoints[] = {
                     {SkIntToScalar(0), SkIntToScalar(0)},
                     {SkIntToScalar(300), SkIntToScalar(300)}
-                };
-                SkColor linearColors[] = {SK_ColorGREEN, SK_ColorBLACK};
+            };
+            SkColor linearColors[] = {SK_ColorGREEN, SK_ColorBLACK};
 
-                SkUnitMapper* linearMapper = new SkDiscreteMapper(100);
-                SkAutoUnref lm_deleter(linearMapper);
+            SkUnitMapper* linearMapper = new SkDiscreteMapper(100);
+            SkAutoUnref lm_deleter(linearMapper);
 
-                SkShader* shader = SkGradientShader::CreateLinear(
-                        linearPoints, linearColors, NULL, 2,
-                        SkShader::kMirror_TileMode, linearMapper);
-                SkAutoUnref shader_deleter(shader);
+            SkShader* shader = SkGradientShader::CreateLinear(
+                    linearPoints, linearColors, NULL, 2,
+                    SkShader::kMirror_TileMode, linearMapper);
+            SkAutoUnref shader_deleter(shader);
 
-                paint.setShader(shader);
-                paint.setFlags(SkPaint::kAntiAlias_Flag);
+            paint.setShader(shader);
+            paint.setFlags(SkPaint::kAntiAlias_Flag);
 
-                canvas->drawCircle(SkIntToScalar(200), SkIntToScalar(200),
-                                   SkIntToScalar(64), paint);
+            canvas->drawCircle(SkIntToScalar(200), SkIntToScalar(200),
+                    SkIntToScalar(64), paint);
 
-                // Detach shader
-                paint.setShader(NULL);
-            }
-
-
-            // Draw a message with a nice black paint.
-            paint.setFlags(
-                    SkPaint::kAntiAlias_Flag |
-                    SkPaint::kSubpixelText_Flag |  // ... avoid waggly text when rotating.
-                    SkPaint::kUnderlineText_Flag);
-            paint.setColor(SK_ColorBLACK);
-            paint.setTextSize(SkIntToScalar(20));
-
-            canvas->save();
-
-            static const char message[] = "Hello Skia!!!";
-
-            // Translate and rotate
-            canvas->translate(SkIntToScalar(300), SkIntToScalar(300));
-            fRotationAngle += SkDoubleToScalar(0.2);
-            if (fRotationAngle > SkDoubleToScalar(360.0)) {
-                fRotationAngle -= SkDoubleToScalar(360.0);
-            }
-            canvas->rotate(fRotationAngle);
-
-            // Draw the text:
-            canvas->drawText(message, strlen(message), SkIntToScalar(0), SkIntToScalar(0), paint);
-
-            canvas->restore();
-
-            // Invalidate the window to force a redraw. Poor man's animation mechanism.
-            this->inval(NULL);
-
-            INHERITED::draw(canvas);
+            // Detach shader
+            paint.setShader(NULL);
         }
 
-    private:
-        SkScalar fRotationAngle;
-        SkColor fBGColor;
-        typedef BaseExample INHERITED;
+        // Draw a message with a nice black paint.
+        paint.setFlags(
+                SkPaint::kAntiAlias_Flag |
+                SkPaint::kSubpixelText_Flag |  // ... avoid waggly text when rotating.
+                SkPaint::kUnderlineText_Flag);
+        paint.setColor(SK_ColorBLACK);
+        paint.setTextSize(SkIntToScalar(20));
+
+        canvas->save();
+
+        static const char message[] = "Hello Skia!!!";
+
+        // Translate and rotate
+        canvas->translate(SkIntToScalar(300), SkIntToScalar(300));
+        fRotationAngle += SkDoubleToScalar(0.2);
+        if (fRotationAngle > SkDoubleToScalar(360.0)) {
+            fRotationAngle -= SkDoubleToScalar(360.0);
+        }
+        canvas->rotate(fRotationAngle);
+
+        // Draw the text:
+        canvas->drawText(message, strlen(message), SkIntToScalar(0), SkIntToScalar(0), paint);
+
+        canvas->restore();
+
+        // Invalidate the window to force a redraw. Poor man's animation mechanism.
+        this->fWindow->inval(NULL);
+    }
+
+private:
+    SkScalar fRotationAngle;
+    SkColor fBGColor;
 };
 
-SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
-    return new HelloSkia(hwnd, argc, argv);
+static SkExample* MyFactory(SkExampleWindow* window) {
+    return new HelloSkia(window);
 }
+
+// Register this class as a Skia Example.
+SkExample::Registry registry(MyFactory);