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) 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.