Skip to content

A fork of the Squirtle library with support for per-pixel gradients and some bug fixes

License

Notifications You must be signed in to change notification settings

fathat/squirtle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Squirtle SVG mini-library version 0.2.4
=======================================


Squirtle is a mini-library for rendering SVGs from Python, using the Pyglet
multimedia library. It is designed to have a very simple interface, which allows
it to integrate easily into existing applications.

Example usage:
    import squirtle

    squirtle.setup_gl()

    my_svg = squirtle.SVG('filename.svg', anchor_x='center', anchor_y='center')
    my_svg.draw(100, 200, angle=15, scale=3)

Setting up
----------

To set up Squirtle, simply import the module and, once an OpenGL context has 
been created, call squirtle.setup_gl(). Usually in Pyglet this means something
like:

    import pyglet
    import squirtle

    win = pyglet.window.Window()
    squirtle.setup_gl()

If you are working with raw OpenGL calls as part of your application, you may
wish to incorporate the code from squirtle.setup_gl() into your own setup 
function. See the source code for further details.

Creating an SVG
---------------

SVG objects are instantiated simply by calling

    my_svg = squirtle.SVG(filename)

The filename argument can point to either an SVG or gzipped SVG (SVGZ) file.

There are also a collection of optional keyword arguments which can be used to
control the SVG created. For example:

    my_svg = squirtle.SVG('image.svg', anchor_x='center', anchor_y='center')

The anchor_x and anchor_y properties determine which point on the SVG is
considered to be the 'origin' when transforming and drawing. They default to the
bottom left corner. Anchor positions can be specified either numerically (in
pixels) or as symbolic names such as 'top', 'center', 'bottom', 'left' or 
'right'. They can also be modified after creation like so:

    my_svg = squirtle.SVG('image.svg')
    my_svg.anchor_x = my_svg.width * .75
    my_svg.anchor_y = 20

Note that the coordinate system used by Pyglet and the native SVG coordinate
system are flipped with respect to each other. All coordinates used in Squirtle
are in Pyglet-style (y increases upward) coordinates.

Two other options control the degree of subdivision used when rendering curves.
For example:

    my_svg = squirtle.SVG(filename, bezier_points=5, circle_points=12)

The bezier_points and circle_points options control the degree of subdivision
used on Bezier splines and elliptical arcs respectively. They default to 10 and
24. These properties cannot be changed after creation.

Drawing an SVG
--------------

At its most basic, rendering an SVG is as simple as:

    my_svg.draw(x, y)

This will render the given SVG, such that its (anchor_x, anchor_y) position is 
at screen coordinates (x, y). There are, of course, options which can be used to
modify the behaviour of this rendering. For example:

    my_svg.draw(x, y, z=-1)

This will draw the given SVG at a z-coordinate of -1, i.e. behind any other 
images which have been rendered. Note that using this to full effect requires
enabling OpenGL depth testing, and that SVGs with transparency may not render
correctly in this way.

The main advantages of SVG come from being able to freely rotate and scale
without loss of quality:

    my_svg.draw(x, y, angle=15, scale=3)

The angle and scale options control, rather obviously, the angle and scale at
which the SVG is rendered. Both options work around the pivot point given by
(anchor_x, anchor_y). Rotation is given in degrees counter-clockwise, and scale
is a simple multiplicative factor. It is also possible to give a 2-tuple of
scale values in order to scale anisotropically. For example, in order to flip
an SVG horizontally:

    my_svg.draw(x, y, scale=(-1, 1))

Limitations
-----------

Squirtle is at present quite limited in the SVG which it can render. Basic
geometric shapes, paths, polygons, etc work fine. Solid fills work, as do both
linear and radial gradients. Note that gradients may render slightly oddly due
to vertex colouring.

Significant aspects of the SVG specification which have not been implemented
include patterned fills, variable line widths, text and the symbol system.

Patches to improve on any of these limitations are greatly welcomed.

Changes since 0.2
-----------------

Fix errors in arc calculation.
Fix default winding rule for complex curves.
Fix support for SVGs created by Intaglio and some versions of Inkscape.
Improve efficiency when tesselating.
Fix crash bug on Win32 systems.

Changes since 0.1 (initial release)
-----------------------------------

Triangulation now uses the GLU tesselator functions, rather than the Python
code used previously. This should result in increased performance, as well as
allowing for more complex shapes.

Bugfixes for empty style definitions, and for radial gradients with inherited
properties.

Colophon
--------
Squirtle is released under a BSD license, which can be found in the accompanying
file LICENSE.txt

Bug reports, patches, etc, welcome to martin@supereffective.org

About

A fork of the Squirtle library with support for per-pixel gradients and some bug fixes

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages