Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(79)

Side by Side Diff: experimental/SkiaExamples/HelloSkiaExample.cpp

Issue 16337012: Smallest possible desktop application that uses Skia to render stuff. (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Refactored into BaseExample class and a HelloSkia subclass Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #include "HelloSkiaExample.h"
2
3 #include "SkDraw.h"
4 #include "SkGradientShader.h"
5 #include "SkGraphics.h"
6 #include "SkUnitMappers.h"
7
8 // The following three methods need to be defined so that your example
9 // runs on Linux and Mac.
sglez 2013/06/05 16:15:32 Running buildbots on linux, mac and windows is nex
10 SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
11 return new HelloSkia(hwnd, argc, argv);
12 }
13
14 void application_init() {
15 SkGraphics::Init();
16 SkEvent::Init();
17 }
18
19 void application_term() {
20 SkEvent::Term();
21 SkGraphics::Term();
22 }
23
24 HelloSkia::HelloSkia(void* hWnd, int argc, char** argv)
25 : INHERITED(hWnd, argc, argv)
26 {
27 fBGColor = SK_ColorWHITE;
28 fRotationAngle = SkIntToScalar(0);
29
30 setupBackend(kGPU_DeviceType);
31 }
32
33 void HelloSkia::draw(SkCanvas* canvas) {
34 // Clear background
35 canvas->drawColor(fBGColor);
36
37 SkPaint paint;
38 paint.setColor(SK_ColorRED); // SkColor is ARGB
39
40 // Draw a rectangle with blue paint
41 SkRect rect = {10, 10, 128, 128};
42 canvas->drawRect(rect, paint);
43
44 // Set up a linear gradient and draw a circle
45 {
46 SkPoint linearPoints[] = {{0, 0}, {SkIntToScalar(300), SkIntToScalar(300 )}};
47 SkColor linearColors[] = {SK_ColorGREEN, SK_ColorBLACK};
48
49 SkUnitMapper* linearMapper = new SkDiscreteMapper(100);
50 SkAutoUnref lm_deleter(linearMapper);
51
52 SkShader* shader = SkGradientShader::CreateLinear(
53 linearPoints, linearColors, NULL, 2, SkShader::kMirror_TileMode, linearMapper);
54 SkAutoUnref shader_deleter(shader);
55
56 paint.setShader(shader);
57 paint.setFlags(SkPaint::kAntiAlias_Flag);
58
59 canvas->drawCircle(200, 200, 64, paint);
60
61 // Detach shader
62 paint.setShader(NULL);
63 }
64
65
66 // Draw a message with a nice black paint.
67 paint.setFlags(
68 SkPaint::kAntiAlias_Flag |
69 SkPaint::kSubpixelText_Flag | // ... avoid waggly text when rotatin g.
70 SkPaint::kUnderlineText_Flag);
71 paint.setColor(SK_ColorBLACK);
72 paint.setTextSize(SkIntToScalar(20));
73
74 canvas->save();
75
76 static const char message[] = "Hello Skia!!!";
77
78 // Translate and rotate
79 canvas->translate(300, 300);
80 fRotationAngle += SkFloatToScalar(0.2);
81 if (fRotationAngle > SkFloatToScalar(360.0)) {
82 fRotationAngle -= SkFloatToScalar(360.0);
83 }
84 canvas->rotate(fRotationAngle);
85
86 // Draw the text:
87 canvas->drawText(message, strlen(message), 0, 0, paint);
88
89 canvas->restore();
90
91 // Invalidate the window to force a redraw. Poor man's animation mechanism.
92 this->inval(NULL);
93 canvas->flush();
94
95 if (getDeviceType() == kGPU_DeviceType) {
96 present();
97 }
98 }
99
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698