Thor Vector Graphics is a lightweight portable library used for drawing vector-based scenes and animations including SVG and Lottie. It can be freely utilized across various software platforms and applications to visualize graphical contents.
Find a file
JunsuChoi 77ccbcc6fe
tvgSvgLoader: Add points copy of missing polygon/polyline
When using <use> node, do atrribute copy.
At that time, when target(url) is polygon or polyline,
points array is not copied, causing a problem in output.
So, add missing array copy.
2020-10-13 13:45:40 +09:00
.github Add PULL_REQUEST_TEMPLATE.md (#92) 2020-10-07 16:27:50 +09:00
inc common canvas: revise clear method. 2020-10-08 12:07:27 +09:00
packaging replace license from Apache 2.0 to MIT 2020-08-13 16:53:38 +09:00
pc renamed project name tizenvg => thorvg 2020-06-25 13:57:41 +09:00
res Added thorvg logo svg resources, 2020-10-13 12:07:47 +09:00
src tvgSvgLoader: Add points copy of missing polygon/polyline 2020-10-13 13:45:40 +09:00
.gitignore updated .gitignore 2020-10-06 14:03:07 +09:00
.travis.yml Travis-CI: Add build options 2020-10-08 12:40:26 +09:00
AUTHORS updated AUTHORS 2020-09-11 11:15:00 +09:00
LICENSE replace license from Apache 2.0 to MIT 2020-08-13 16:53:38 +09:00
meson.build examples: move tests to src/examples 2020-09-19 00:39:25 +09:00
meson_options.txt examples: move tests to src/examples 2020-09-19 00:39:25 +09:00
README.md Update README.md 2020-09-19 01:04:34 +09:00
thorvg.manifest renamed project name tizenvg => thorvg 2020-06-25 13:57:41 +09:00

Build Status Gitter

ThorVG

ThorVG is a platform independent lightweight standalone C++ library for drawing vector-based shapes and SVG.

Contents


Building ThorVG

Basically, ThorVG supports meson build system.

Meson Build

Install meson and ninja if not already installed.

Run meson to configure ThorVG.

meson build

Run ninja to build & install ThorVG.

ninja -C build install

Back to contents

Quick Start

ThorVG renders vector shapes on a given canvas buffer. Here shows quick start to learn basic API usages.

First, You can initialize ThorVG engine.

tvg::Initializer::init(tvg::CanvasEngine::Sw, 0);   //engine method, thread count

You can prepare a empty canvas for drawing on it.

static uint32_t buffer[WIDTH * HEIGHT];          //canvas target buffer

auto canvas = tvg::SwCanvas::gen();              //generate a canvas
canvas->target(buffer, WIDTH, WIDTH, HEIGHT);    //stride, w, h

Next you can draw multiple shapes onto the canvas.

auto rect = tvg::Shape::gen();               //generate a round rectangle
rect->appendRect(50, 50, 200, 200, 20, 20);  //round geometry(x, y, w, h, rx, ry)
rect->fill(100, 100, 0, 255);                //round rectangle color (r, g, b, a)
canvas->push(move(rect));                    //push round rectangle drawing command

auto circle = tvg::Shape::gen();             //generate a circle
circle->appendCircle(400, 400, 100, 100);    //circle geometry(cx, cy, radiusW, radiusH)

auto fill = tvg::RadialGradient::gen();      //generate radial gradient for circle fill
fill->radial(400, 400, 150);                 //radial fill info(cx, cy, radius)

tvg::Fill::ColorStop colorStops[2];          //gradient color info
colorStops[0] = {0, 255, 255, 255, 255};     //index, r, g, b, a (1st color value)
colorStops[1] = {1, 0, 0, 0, 255};           //index, r, g, b, a (2nd color value)
fill.colorStops(colorStop, 2);               //set fil with gradient color info

circle->fill(move(fill));                    //circle color
canvas->push(move(circle));                  //push circle drawing command

This code result looks like this.

Or you can draw pathes with dash stroking.

auto path = tvg::Shape::gen();               //generate a path
path->moveTo(199, 34);                       //set sequential path coordinates
path->lineTo(253, 143);
path->lineTo(374, 160);
path->lineTo(287, 244);
path->lineTo(307, 365);
path->lineTo(199, 309);
path->lineTo(97, 365);
path->lineTo(112, 245);
path->lineTo(26, 161);
path->lineTo(146, 143);
path->close();

path->fill(150, 150, 255, 255);              //path color

path->stroke(3);                             //stroke width
path->stroke(0, 0, 255, 255);                //stroke color
path->stroke(tvg::StrokeJoin::Round);        //stroke join style
path->stroke(tvg::StrokeCap::Round);         //stroke cap style

float pattern[2] = {10, 10};
path->stroke(pattern, 2);                    //stroke dash pattern (line, gap)

canvas->push(move(path));                    //push path drawing command

This path drawing result shows like this.

Next, this code snippet shows you how to draw SVG image.

auto picture = tvg::Picture::gen();         //generate a picture
picture->load("tiger.svg");                 //Load SVG file.
canvas->push(move(picture));                //push picture drawing command

And here is the result.

Begin rendering & finish it at a particular time.

canvas->draw();
canvas->sync();

Now you can acquire the rendered image from the buffer memory.

Lastly, terminate the engine after usage.

tvg::Initializer::term(tvg::CanvasEngine::Sw);

Back to contents

Examples

There are various examples to understand ThorVG APIs, Please check sample code in thorvg/src/examples

To execute examples, you can build them with this meson option.

meson -Dexamples=true . build

Note that these examples are required EFL elementary package for launching. If you're using Linux-based OS, you could easily install its package from your OS distribution server. Otherwise, please visit the official EFL page for more information.

Back to contents

Tools

SVG to PNG

ThorVG provides an executable svg2png converter which generate a PNG file from a SVG file.

To use svg2png, you must turn on its feature in the build option.

meson -Dtools=svg2png . build

Alternatively, you can add svg2png value to tools option in meson_option.txt. Build output will be located in {builddir}/src/bin/svg2png/

For more information, see svg2png usages:

Usage: 
   svg2png [svgFileName] [Resolution] [bgColor]

Examples: 
    $ svg2png input.svg
    $ svg2png input.svg 200x200
    $ svg2png input.svg 200x200 ff00ff

Back to contents

API Bindings

Our main development APIs are written in C++ but ThorVG also provides API bindings such as: C.

Back to contents

Issues or Feature Requests?

For immediate assistant or support please reach us in Gitter