Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
HelloWorld.cpp
Go to the documentation of this file.
1/*
2* Copyright 2017 Google Inc.
3*
4* Use of this source code is governed by a BSD-style license that can be
5* found in the LICENSE file.
6*/
7
9
12#include "include/core/SkFont.h"
17#include "include/core/SkRect.h"
25
26#include <string.h>
27
28using namespace sk_app;
30
31Application* Application::Create(int argc, char** argv, void* platformData) {
32 return new HelloWorld(argc, argv, platformData);
33}
34
35HelloWorld::HelloWorld(int argc, char** argv, void* platformData)
36#if defined(SK_GL)
37 : fBackendType(Window::kNativeGL_BackendType),
38#elif defined(SK_VULKAN)
39 : fBackendType(Window::kVulkan_BackendType),
40#else
41 : fBackendType(Window::kRaster_BackendType),
42#endif
43 fRotationAngle(0) {
45
46 fWindow = Window::CreateNativeWindow(platformData);
47 fWindow->setRequestedDisplayParams(DisplayParams());
48
49 // register callbacks
50 fWindow->pushLayer(this);
51
52 fWindow->attach(fBackendType);
53
54 fTypeface = ToolUtils::CreateTypefaceFromResource("fonts/Roboto-Regular.ttf");
55 if (!fTypeface) {
57 }
58}
59
61 fWindow->detach();
62 delete fWindow;
63}
64
65void HelloWorld::updateTitle() {
66 if (!fWindow) {
67 return;
68 }
69
70 SkString title("Hello World ");
71 if (Window::kRaster_BackendType == fBackendType) {
72 title.append("Raster");
73 } else {
74#if defined(SK_GL)
75 title.append("GL");
76#elif defined(SK_VULKAN)
77 title.append("Vulkan");
78#elif defined(SK_DAWN)
79 title.append("Dawn");
80#else
81 title.append("Unknown GPU backend");
82#endif
83 }
84
85 fWindow->setTitle(title.c_str());
86}
87
89 this->updateTitle();
90 fWindow->show();
91 fWindow->inval();
92}
93
95 auto canvas = surface->getCanvas();
96
97 // Clear background
98 canvas->clear(SK_ColorWHITE);
99
101 paint.setColor(SK_ColorRED);
102
103 // Draw a rectangle with red paint
104 SkRect rect = SkRect::MakeXYWH(10, 10, 128, 128);
105 canvas->drawRect(rect, paint);
106
107 // Set up a linear gradient and draw a circle
108 {
109 SkPoint linearPoints[] = { { 0, 0 }, { 300, 300 } };
110 SkColor linearColors[] = { SK_ColorGREEN, SK_ColorBLACK };
111 paint.setShader(SkGradientShader::MakeLinear(linearPoints, linearColors, nullptr, 2,
113 paint.setAntiAlias(true);
114
115 canvas->drawCircle(200, 200, 64, paint);
116
117 // Detach shader
118 paint.setShader(nullptr);
119 }
120
121 // Draw a message with a nice black paint
122 SkFont font(fTypeface, 20);
123 font.setSubpixel(true);
124 paint.setColor(SK_ColorBLACK);
125
126 canvas->save();
127 static const char message[] = "Hello World ";
128
129 // Translate and rotate
130 canvas->translate(300, 300);
131 fRotationAngle += 0.2f;
132 if (fRotationAngle > 360) {
133 fRotationAngle -= 360;
134 }
135 canvas->rotate(fRotationAngle);
136
137 // Draw the text
138 canvas->drawSimpleText(message, strlen(message), SkTextEncoding::kUTF8, 0, 0, font, paint);
139
140 canvas->restore();
141}
142
144 // Just re-paint continuously
145 fWindow->inval();
146}
147
149 if (' ' == c) {
150 if (Window::kRaster_BackendType == fBackendType) {
151#if defined(SK_GL)
152 fBackendType = Window::kNativeGL_BackendType;
153#elif defined(SK_VULKAN)
154 fBackendType = Window::kVulkan_BackendType;
155#else
156 SkDebugf("No GPU backend configured\n");
157 return true;
158#endif
159 } else {
160 fBackendType = Window::kRaster_BackendType;
161 }
162 fWindow->detach();
163 fWindow->attach(fBackendType);
164 }
165 return true;
166}
uint32_t SkColor
Definition SkColor.h:37
constexpr SkColor SK_ColorRED
Definition SkColor.h:126
constexpr SkColor SK_ColorBLACK
Definition SkColor.h:103
constexpr SkColor SK_ColorGREEN
Definition SkColor.h:131
constexpr SkColor SK_ColorWHITE
Definition SkColor.h:122
void SK_SPI SkDebugf(const char format[],...) SK_PRINTF_LIKE(1
@ kUTF8
uses bytes to represent UTF-8 or ASCII
int32_t SkUnichar
Definition SkTypes.h:175
void onIdle() override
~HelloWorld() override
void onPaint(SkSurface *) override
void onBackendCreated() override
bool onChar(SkUnichar c, skui::ModifierKey modifiers) override
HelloWorld(int argc, char **argv, void *platformData)
static sk_sp< SkShader > MakeLinear(const SkPoint pts[2], const SkColor colors[], const SkScalar pos[], int count, SkTileMode mode, uint32_t flags=0, const SkMatrix *localMatrix=nullptr)
static void Init()
static Window * CreateNativeWindow(void *platformData)
@ kRaster_BackendType
Definition Window.h:90
const Paint & paint
VkSurfaceKHR surface
Definition main.cc:49
Win32Message message
char ** argv
Definition library.h:9
sk_sp< SkTypeface > DefaultPortableTypeface()
sk_sp< SkTypeface > CreateTypefaceFromResource(const char *resource, int ttcIndex)
ModifierKey
Definition ModifierKey.h:9
static constexpr SkRect MakeXYWH(float x, float y, float w, float h)
Definition SkRect.h:659