This tutorial will guide you through the steps to create a Hello World Desktop application in Skia.
This will be useful to you if you want to create a window that can receive events and to which you can draw with Skia.
Follow the instructions for: Linux, Mac OS X or Windows. The framework that we will be using does not currently support other platforms.
Once you have a working development environment, we can move on to the next step.
We will be using the “SkiaExamples” framework. You can find it in the experimental/SkiaExamples directory. There is an included HelloWorld example, and we will start by building it before we go ahead and create our own.
Run GYP_GENERATORS="ninja" ./gyp_skia This will generate a ninja target, and ninja -C out/Debug SkiaExamples will create SkiaExamples.app
Run GYP_GENERATORS="ninja" ./gyp_skia
Build the SkiaExamples target:
ninja -C out/Release SkiaExamples
The SkiaExamples binary should be in out/Release/SkiaExamples
Run ./gyp_skia
There should be a Visual Studio project out/gyp/SkiaExamples.vcproj with which you can build the SkiaExamples binary.
You should see a window open displaying rotating text and some geometry.
Create a file experimental/SkiaExamples/Tutorial.cpp within the Skia tree. Copy the following code:
#include "SkExample.h"
#include "SkDevice.h"
class HelloTutorial : public SkExample {
public:
HelloTutorial(SkExampleWindow* window)
: SkExample(window)
{
fName = "Tutorial"; // This is how Skia will find your example.
fWindow->setupBackend(SkExampleWindow::kGPU_DeviceType);
// Another option is the CPU backend: fWindow->setupBackend(kRaster_DeviceType);
}
protected:
void draw(SkCanvas* canvas) SK_OVERRIDE {
// Clear background
canvas->drawColor(SK_ColorWHITE);
SkPaint paint;
// Draw a message with a nice black paint.
paint.setFlags(SkPaint::kAntiAlias_Flag);
paint.setColor(SK_ColorBLACK);
paint.setTextSize(SkIntToScalar(20));
static const char message[] = "Hello World!";
// Translate and draw the text:
canvas->save();
canvas->translate(SkIntToScalar(50), SkIntToScalar(100));
canvas->drawText(message, strlen(message), SkIntToScalar(0), SkIntToScalar(0), paint);
canvas->restore();
// If you ever want to do animation. Use the inval method to trigger a redraw.
this->fWindow->inval(NULL);
}
};
static SkExample* MyFactory(SkExampleWindow* window) {
return new HelloTutorial(window);
}
static SkExample::Registry registry(MyFactory);
Here is what you have to do to compile your example. There will be functionality to make this easier, but for now, this is what you have to do:
Open gyp/experimental.gyp and look for the SkiaExamples target.
In the ‘sources’ section of the SkiaExampels target, add ../experimental/SkiaExamples/Tutorial.cpp to the list of sources.
Repeat Step 2 to update our gyp targets and build our example.
Run the SkiaExamples, specifying the name of our new example:
$> out/Release/SkiaExamples --match Tutorial
If you did not specify an example with the --match flag, or if your match string matches more than one example, you can use the n key to iterate through all of the examples registered.