c32f1d46d4
git-svn-id: http://skia.googlecode.com/svn/trunk@9671 2bbb7eff-a529-9590-31e7-b0007b416f81
113 lines
3.5 KiB
C++
113 lines
3.5 KiB
C++
/*
|
|
* 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);
|
|
// Another option is software rendering:
|
|
// setupBackend(kRaster_DeviceType);
|
|
}
|
|
|
|
protected:
|
|
virtual void draw(SkCanvas* canvas) SK_OVERRIDE {
|
|
// Clear background
|
|
canvas->drawColor(fBGColor);
|
|
|
|
SkPaint paint;
|
|
paint.setColor(SK_ColorRED);
|
|
|
|
// Draw a rectangle with blue paint
|
|
SkRect rect = {
|
|
SkIntToScalar(10), SkIntToScalar(10),
|
|
SkIntToScalar(128), SkIntToScalar(128)
|
|
};
|
|
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);
|
|
SkAutoUnref shader_deleter(shader);
|
|
|
|
paint.setShader(shader);
|
|
paint.setFlags(SkPaint::kAntiAlias_Flag);
|
|
|
|
canvas->drawCircle(SkIntToScalar(200), SkIntToScalar(200),
|
|
SkIntToScalar(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(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);
|
|
|
|
canvas->restore();
|
|
|
|
// Invalidate the window to force a redraw. Poor man's animation mechanism.
|
|
this->inval(NULL);
|
|
|
|
INHERITED::draw(canvas);
|
|
}
|
|
|
|
private:
|
|
SkScalar fRotationAngle;
|
|
SkColor fBGColor;
|
|
typedef BaseExample INHERITED;
|
|
};
|
|
|
|
SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
|
|
return new HelloSkia(hwnd, argc, argv);
|
|
}
|