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

Unified 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: Fix speed hiccups in Windows 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 side-by-side diff with in-line comments
Download patch
Index: experimental/SkiaExamples/HelloSkiaExample.cpp
diff --git a/experimental/SkiaExamples/HelloSkiaExample.cpp b/experimental/SkiaExamples/HelloSkiaExample.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d651e8808baff3390800cffcb76d6b921db05689
--- /dev/null
+++ b/experimental/SkiaExamples/HelloSkiaExample.cpp
@@ -0,0 +1,104 @@
+/*
+ * 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);
caryclark 2013/06/17 15:08:39 add comment that caller can also use kRaster_Devic
+ }
caryclark 2013/06/17 15:08:39 add a blank line
+ protected:
+ virtual void draw(SkCanvas* canvas) SK_OVERRIDE {
+ // Clear background
+ canvas->drawColor(fBGColor);
+
+ SkPaint paint;
+ paint.setColor(SK_ColorRED); // SkColor is ARGB
caryclark 2013/06/17 15:08:39 not sure the comment clarifies
+
+ // Draw a rectangle with blue paint
+ SkRect rect = {SkIntToScalar(10), SkIntToScalar(10), SkIntToScalar(128), SkIntToScalar(128)};
caryclark 2013/06/17 15:08:39 too wide (rewrap to fit in 100 cols)
+ 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);
caryclark 2013/06/17 15:08:39 too wide (rewrap to fit in 100 cols)
+ SkAutoUnref shader_deleter(shader);
+
+ paint.setShader(shader);
+ paint.setFlags(SkPaint::kAntiAlias_Flag);
+
+ canvas->drawCircle(SkIntToScalar(200), SkIntToScalar(200), SkIntToScalar(64), paint);
caryclark 2013/06/17 15:08:39 too wide (rewrap to fit in 100 cols)
+
+ // 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);
caryclark 2013/06/17 15:08:39 sizeof(message) - 1 would also work
sglez 2013/06/17 18:04:35 Is that a suggestion or just a note? strlen seems
+
+ canvas->restore();
+
+ // Invalidate the window to force a redraw. Poor man's animation mechanism.
+ this->inval(NULL);
+ canvas->flush();
caryclark 2013/06/17 15:08:39 Do you need this? It shouldn't normally be require
+
+ INHERITED::draw(canvas);
+ }
+
+ private:
+ SkScalar fRotationAngle;
+ SkColor fBGColor;
+ typedef BaseExample INHERITED;
+};
+
+SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
caryclark 2013/06/17 15:08:39 It would be great if I could switch between multip
sglez 2013/06/17 18:04:35 Perhaps do this on a new CL after this one is subm
+ return new HelloSkia(hwnd, argc, argv);
+}
+

Powered by Google App Engine
This is Rietveld 408576698