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

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: 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 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..1da5992a9bf6727f39b5971988b7230deba14cfc
--- /dev/null
+++ b/experimental/SkiaExamples/HelloSkiaExample.cpp
@@ -0,0 +1,99 @@
+#include "HelloSkiaExample.h"
+
+#include "SkDraw.h"
+#include "SkGradientShader.h"
+#include "SkGraphics.h"
+#include "SkUnitMappers.h"
+
+// The following three methods need to be defined so that your example
+// runs on Linux and Mac.
sglez 2013/06/05 16:15:32 Running buildbots on linux, mac and windows is nex
+SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
+ return new HelloSkia(hwnd, argc, argv);
+}
+
+void application_init() {
+ SkGraphics::Init();
+ SkEvent::Init();
+}
+
+void application_term() {
+ SkEvent::Term();
+ SkGraphics::Term();
+}
+
+HelloSkia::HelloSkia(void* hWnd, int argc, char** argv)
+ : INHERITED(hWnd, argc, argv)
+{
+ fBGColor = SK_ColorWHITE;
+ fRotationAngle = SkIntToScalar(0);
+
+ setupBackend(kGPU_DeviceType);
+}
+
+void HelloSkia::draw(SkCanvas* canvas) {
+ // Clear background
+ canvas->drawColor(fBGColor);
+
+ SkPaint paint;
+ paint.setColor(SK_ColorRED); // SkColor is ARGB
+
+ // Draw a rectangle with blue paint
+ SkRect rect = {10, 10, 128, 128};
+ canvas->drawRect(rect, paint);
+
+ // Set up a linear gradient and draw a circle
+ {
+ SkPoint linearPoints[] = {{0, 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);
+ SkAutoUnref shader_deleter(shader);
+
+ paint.setShader(shader);
+ paint.setFlags(SkPaint::kAntiAlias_Flag);
+
+ canvas->drawCircle(200, 200, 64, paint);
+
+ // 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(300, 300);
+ fRotationAngle += SkFloatToScalar(0.2);
+ if (fRotationAngle > SkFloatToScalar(360.0)) {
+ fRotationAngle -= SkFloatToScalar(360.0);
+ }
+ canvas->rotate(fRotationAngle);
+
+ // Draw the text:
+ canvas->drawText(message, strlen(message), 0, 0, paint);
+
+ canvas->restore();
+
+ // Invalidate the window to force a redraw. Poor man's animation mechanism.
+ this->inval(NULL);
+ canvas->flush();
+
+ if (getDeviceType() == kGPU_DeviceType) {
+ present();
+ }
+}
+

Powered by Google App Engine
This is Rietveld 408576698