From 392a0c5a4d19da8f06b3ccab8b9d7fdcd558e64d Mon Sep 17 00:00:00 2001 From: Brian Jordan Date: Fri, 27 Jun 2008 18:17:45 +0000 Subject: Initial commit --- (limited to 'olpcgames/svgsprite.py') diff --git a/olpcgames/svgsprite.py b/olpcgames/svgsprite.py new file mode 100755 index 0000000..e47eed2 --- /dev/null +++ b/olpcgames/svgsprite.py @@ -0,0 +1,52 @@ +"""RSVG/Cairo-based rendering of SVG into Pygame Images""" +from pygame import sprite, Rect +from olpcgames import svg + +class SVGSprite( sprite.Sprite ): + """Sprite class which renders SVG source-code as a Pygame image + + Note: + + Currently this sprite class is a bit over-engineered, it gets in the way + if you want to, e.g. animate among a number of SVG drawings, as it + assumes that setSVG will always set a single SVG file for rendering. + """ + rect = image = None + resolution = None + def __init__( + self, svg=None, size=None, *args + ): + """Initialise the svg sprite + + svg -- svg source text (i.e. content of an svg file) + size -- optional, to constrain size, (width,height), leaving one + as None or 0 causes proportional scaling, leaving both + as None or 0 causes natural scaling (screen resolution) + args -- if present, groups to which to automatically add + """ + self.size = size + super( SVGSprite, self ).__init__( *args ) + if svg: + self.setSVG( svg ) + def setSVG( self, svg ): + """Set our SVG source""" + self.svg = svg + # XXX could delay this until actually asked to display... + if self.size: + width,height = self.size + else: + width,height = None,None + self.image = svg.render( self.svg, (width,height) ).convert_alpha() + rect = self.image.get_rect() + if self.rect: + rect.move( self.rect ) # should let something higher-level do that... + self.rect = rect + def copy( self ): + """Create a copy of this sprite without reloading the svg image""" + result = self.__class__( + size = self.size + ) + result.image = self.image + result.rect = Rect(self.rect) + result.resolution = self.resolution + return result -- cgit v0.9.1