/usr/share/sugar/activities/Physics.activity/olpcgames/svgsprite.py is in sugar-physics-activity 7+dfsg-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 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
|