123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- /*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "example/HelloWorld.h"
- #include "include/core/SkCanvas.h"
- #include "include/core/SkFont.h"
- #include "include/core/SkGraphics.h"
- #include "include/core/SkSurface.h"
- #include "include/effects/SkGradientShader.h"
- using namespace sk_app;
- Application* Application::Create(int argc, char** argv, void* platformData) {
- return new HelloWorld(argc, argv, platformData);
- }
- HelloWorld::HelloWorld(int argc, char** argv, void* platformData)
- : fBackendType(Window::kNativeGL_BackendType)
- , fRotationAngle(0) {
- SkGraphics::Init();
- fWindow = Window::CreateNativeWindow(platformData);
- fWindow->setRequestedDisplayParams(DisplayParams());
- // register callbacks
- fWindow->pushLayer(this);
- fWindow->attach(fBackendType);
- }
- HelloWorld::~HelloWorld() {
- fWindow->detach();
- delete fWindow;
- }
- void HelloWorld::updateTitle() {
- if (!fWindow || fWindow->sampleCount() <= 1) {
- return;
- }
- SkString title("Hello World ");
- title.append(Window::kRaster_BackendType == fBackendType ? "Raster" : "OpenGL");
- fWindow->setTitle(title.c_str());
- }
- void HelloWorld::onBackendCreated() {
- this->updateTitle();
- fWindow->show();
- fWindow->inval();
- }
- void HelloWorld::onPaint(SkSurface* surface) {
- auto canvas = surface->getCanvas();
- // Clear background
- canvas->clear(SK_ColorWHITE);
- SkPaint paint;
- paint.setColor(SK_ColorRED);
- // Draw a rectangle with red paint
- SkRect rect = SkRect::MakeXYWH(10, 10, 128, 128);
- canvas->drawRect(rect, paint);
- // Set up a linear gradient and draw a circle
- {
- SkPoint linearPoints[] = { { 0, 0 }, { 300, 300 } };
- SkColor linearColors[] = { SK_ColorGREEN, SK_ColorBLACK };
- paint.setShader(SkGradientShader::MakeLinear(linearPoints, linearColors, nullptr, 2,
- SkTileMode::kMirror));
- paint.setAntiAlias(true);
- canvas->drawCircle(200, 200, 64, paint);
- // Detach shader
- paint.setShader(nullptr);
- }
- // Draw a message with a nice black paint
- SkFont font;
- font.setSubpixel(true);
- font.setSize(20);
- paint.setColor(SK_ColorBLACK);
- canvas->save();
- static const char message[] = "Hello World";
- // Translate and rotate
- canvas->translate(300, 300);
- fRotationAngle += 0.2f;
- if (fRotationAngle > 360) {
- fRotationAngle -= 360;
- }
- canvas->rotate(fRotationAngle);
- // Draw the text
- canvas->drawSimpleText(message, strlen(message), SkTextEncoding::kUTF8, 0, 0, font, paint);
- canvas->restore();
- }
- void HelloWorld::onIdle() {
- // Just re-paint continously
- fWindow->inval();
- }
- bool HelloWorld::onChar(SkUnichar c, ModifierKey modifiers) {
- if (' ' == c) {
- fBackendType = Window::kRaster_BackendType == fBackendType ? Window::kNativeGL_BackendType
- : Window::kRaster_BackendType;
- fWindow->detach();
- fWindow->attach(fBackendType);
- }
- return true;
- }
|