Smallest possible desktop application that uses Skia to render stuff.

Small Hello World smaple. Subclasses SkOSWindow.

R=caryclark@google.com

Author: sglez@google.com

Review URL: https://chromiumcodereview.appspot.com/16337012

git-svn-id: http://skia.googlecode.com/svn/trunk@9657 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/SkiaExamples/HelloSkiaExample.cpp b/experimental/SkiaExamples/HelloSkiaExample.cpp
new file mode 100644
index 0000000..8fb9ace
--- /dev/null
+++ b/experimental/SkiaExamples/HelloSkiaExample.cpp
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2013 Google Inc.
+ *
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ */
+
+#include "BaseExample.h"
+
+#include "SkApplication.h"
+#include "SkDraw.h"
+#include "SkGradientShader.h"
+#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);
+
+            setupBackend(kGPU_DeviceType);
+            // Another option is software rendering:
+            // setupBackend(kRaster_DeviceType);
+        }
+
+    protected:
+        virtual void draw(SkCanvas* canvas) SK_OVERRIDE {
+            // Clear background
+            canvas->drawColor(fBGColor);
+
+            SkPaint paint;
+            paint.setColor(SK_ColorRED);
+
+            // Draw a rectangle with blue paint
+            SkRect rect = {
+                SkIntToScalar(10), SkIntToScalar(10),
+                SkIntToScalar(128), SkIntToScalar(128)
+            };
+            canvas->drawRect(rect, paint);
+
+            // 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};
+
+                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);
+
+                paint.setShader(shader);
+                paint.setFlags(SkPaint::kAntiAlias_Flag);
+
+                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);
+        }
+
+    private:
+        SkScalar fRotationAngle;
+        SkColor fBGColor;
+        typedef BaseExample INHERITED;
+};
+
+SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
+    return new HelloSkia(hwnd, argc, argv);
+}
+