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