blob: 6fd2624c18b0e5e97f9f3ff69b5abfe716f6cbce [file] [log] [blame]
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +00001/*
2 * Copyright 2013 Google Inc.
3 *
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 *
8 */
9
sglez@google.com43f2b2c2013-07-24 17:48:03 +000010#include "SkExample.h"
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000011
12#include "SkApplication.h"
13#include "SkDraw.h"
14#include "SkGradientShader.h"
15#include "SkGraphics.h"
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000016
sglez@google.com43f2b2c2013-07-24 17:48:03 +000017class HelloSkia : public SkExample {
18public:
19 HelloSkia(SkExampleWindow* window) : SkExample(window) {
20 fName = "HelloSkia";
21 fBGColor = SK_ColorWHITE;
22 fRotationAngle = SkIntToScalar(0);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000023
sglez@google.com43f2b2c2013-07-24 17:48:03 +000024 fWindow->setupBackend(SkExampleWindow::kGPU_DeviceType);
25 // Another option is software rendering:
commit-bot@chromium.orgab9d30c2013-10-10 02:53:30 +000026 // fWindow->setupBackend(SkExampleWindow::kRaster_DeviceType);
sglez@google.com43f2b2c2013-07-24 17:48:03 +000027 }
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000028
sglez@google.com43f2b2c2013-07-24 17:48:03 +000029protected:
30 void draw(SkCanvas* canvas) {
31 // Clear background
32 canvas->drawColor(fBGColor);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000033
sglez@google.com43f2b2c2013-07-24 17:48:03 +000034 SkPaint paint;
35 paint.setColor(SK_ColorRED);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000036
sglez@google.com43f2b2c2013-07-24 17:48:03 +000037 // Draw a rectangle with blue paint
38 SkRect rect = {
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000039 SkIntToScalar(10), SkIntToScalar(10),
40 SkIntToScalar(128), SkIntToScalar(128)
sglez@google.com43f2b2c2013-07-24 17:48:03 +000041 };
42 canvas->drawRect(rect, paint);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000043
sglez@google.com43f2b2c2013-07-24 17:48:03 +000044 // Set up a linear gradient and draw a circle
45 {
46 SkPoint linearPoints[] = {
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000047 {SkIntToScalar(0), SkIntToScalar(0)},
48 {SkIntToScalar(300), SkIntToScalar(300)}
sglez@google.com43f2b2c2013-07-24 17:48:03 +000049 };
50 SkColor linearColors[] = {SK_ColorGREEN, SK_ColorBLACK};
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000051
sglez@google.com43f2b2c2013-07-24 17:48:03 +000052 SkShader* shader = SkGradientShader::CreateLinear(
53 linearPoints, linearColors, NULL, 2,
commit-bot@chromium.org4b8f8022014-05-21 19:56:46 +000054 SkShader::kMirror_TileMode);
sglez@google.com43f2b2c2013-07-24 17:48:03 +000055 SkAutoUnref shader_deleter(shader);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000056
sglez@google.com43f2b2c2013-07-24 17:48:03 +000057 paint.setShader(shader);
58 paint.setFlags(SkPaint::kAntiAlias_Flag);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000059
sglez@google.com43f2b2c2013-07-24 17:48:03 +000060 canvas->drawCircle(SkIntToScalar(200), SkIntToScalar(200),
61 SkIntToScalar(64), paint);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000062
sglez@google.com43f2b2c2013-07-24 17:48:03 +000063 // Detach shader
64 paint.setShader(NULL);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000065 }
66
sglez@google.com43f2b2c2013-07-24 17:48:03 +000067 // Draw a message with a nice black paint.
68 paint.setFlags(
69 SkPaint::kAntiAlias_Flag |
70 SkPaint::kSubpixelText_Flag | // ... avoid waggly text when rotating.
71 SkPaint::kUnderlineText_Flag);
72 paint.setColor(SK_ColorBLACK);
73 paint.setTextSize(SkIntToScalar(20));
74
75 canvas->save();
76
77 static const char message[] = "Hello Skia!!!";
78
79 // Translate and rotate
80 canvas->translate(SkIntToScalar(300), SkIntToScalar(300));
81 fRotationAngle += SkDoubleToScalar(0.2);
82 if (fRotationAngle > SkDoubleToScalar(360.0)) {
83 fRotationAngle -= SkDoubleToScalar(360.0);
84 }
85 canvas->rotate(fRotationAngle);
86
87 // Draw the text:
88 canvas->drawText(message, strlen(message), SkIntToScalar(0), SkIntToScalar(0), paint);
89
90 canvas->restore();
91
92 // Invalidate the window to force a redraw. Poor man's animation mechanism.
93 this->fWindow->inval(NULL);
94 }
95
96private:
97 SkScalar fRotationAngle;
98 SkColor fBGColor;
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +000099};
100
sglez@google.com43f2b2c2013-07-24 17:48:03 +0000101static SkExample* MyFactory(SkExampleWindow* window) {
102 return new HelloSkia(window);
commit-bot@chromium.org7fa22f32013-06-18 15:37:27 +0000103}
sglez@google.com43f2b2c2013-07-24 17:48:03 +0000104
105// Register this class as a Skia Example.
106SkExample::Registry registry(MyFactory);