Shapes, Animations and Iteractivity

libShiva is a C++ vector graphics drawing library and GUI toolkit. It uses persistant objects to create a parent-child hierachy of shapes to be drawn.

Each shape can have event listeners attached to grab user input from mouse and keyboard related to that object.

Any shape can be animated in terms of position, rotation, scale and color using descriptive animation objects. Animations can be linearly interpolated or accelerated at the beginning, end or both.

Additionally, some common GUI widgets with tipical behavior and functionality are available. Their appearance can be defined / customized with any group of vector shapes.

Import SVG

Specific functions are implemented to read SVG files and transform them into libShiva shapes, gradients and other objects. This creates an effective link between GUI programming and design.

Interface elements can be exported straight out of a drawing application like Inkscape and then used by a libShiva application to add functionality to them.

GPU accelerated drawing

All the vector shapes are drawn through an OpenGL engine, which means drawing is fast and frames-per-second rate for animations is high. The OpenGL context for libShiva window is created automatically with no need for the programmer to take care of.


libShiva targets Linux, Windows and MacOS platforms. libOpenCC is used, to provide a base set of classes for Strings, Lists, Xml parsing Smart Pointers, File System etc.

Programs written with libShiva compile on all three platforms without any changes to the code itself.

Smart Pointers

libShiva uses Smart Pointers (provided by libOpenCC) to target reference-counted shapes and other objects. This makes its use simple and much similar to memory-managed programming languages like C#.