Activity Team/Sugar-sprites
Sugar sprites library
While not yet an official part of Sugar, there is a simple sprites library, sprites.py, that is used by many activities, including Turtle Art, Visual Match, Slideruler, Cardsort, Erikos, etc.
sprites.py is a simple sprites library for managing graphics objects, 'sprites', on a canvas. It manages multiple sprites with methods such as move, hide, set_layer, etc.
There are two classes:
- class Sprites maintains a collection of sprites.
- class Sprite manages individual sprites within the collection.
Example usage
The basic work flow is to first create a Sprites instance to manage the sprite collection. Then create and use individual sprites.
# Import the classes into your program. from sprites import Sprites, Sprite
# Create a new sprite collection for a gtk Drawing Area. my_drawing_area = gtk.DrawingArea() self.sprite_list = Sprites(my_drawing_area)
# Create a "pixbuf" (in this example, from SVG). my_pixbuf = svg_str_to_pixbuf("<svg>...some svg code...</svg>")
# Create a sprite at position x1, y1. my_sprite = sprites.Sprite(self.sprite_list, x1, y1, my_pixbuf)
# Move the sprite to a new position. my_sprite.move((x1+dx, y1+dy))
# Create another "pixbuf". your_pixbuf = svg_str_to_pixbuf("<svg>...some svg code...</svg>")
# Create a sprite at position x2, y2. your_sprite = sprites.Sprite(self.sprite_list, x2, y2, my_pixbuf)
# Assign the sprites to layers. # In this example, your_sprite will be on top of my_sprite. my_sprite.set_layer(100) your_sprite.set_layer(200)
# Now put my_sprite on top of your_sprite. my_sprite.set_layer(300)
# method for converting SVG to a gtk pixbuf def svg_str_to_pixbuf(svg_string): pl = gtk.gdk.PixbufLoader('svg') pl.write(svg_string) pl.close() pixbuf = pl.get_pixbuf() return pixbuf
The Sprites Class
class Sprites
methods:
def __init__(self, canvas, area=None, gc=None) self.canvas self.area self.gc self.cm self.list = []
def get_sprite(self, i)
def length_of_list(self)
def append_to_list(self, spr)
def insert_in_list(self, spr, i)
def remove_from_list(self, spr):
def find_sprite(self, pos):
def redraw_sprites(self):
The Sprite Class
class Sprite
methods:
def __init__(self, sprites, x, y, image): self.layer = 100 self.labels = [] self.images = []
def set_image(self, image, i=0, dx=0, dy=0):
def move(self, pos):
def move_relative(self, pos):
def get_xy(self):
def get_dimensions(self):
def get_layer(self):
def set_shape(self, image, i=0):
def set_layer(self, layer):
def set_label(self, new_label, i=0):
def set_margins(self, l=0, t=0, r=0, b=0):
def set_font(self, font):t)
def set_label_color(self, rgb):
def set_label_attributes(self, scale, rescale=True, horiz_align="center", vert_align="middle", i=0):
def hide(self):
def inval(self):
def draw(self):
def hit(self, pos):
def draw_label(self):
def label_width(self):
def label_safe_width(self): def label_safe_height(self): def label_left_top(self):
def get_pixel(self, pos, i=0):