diff options
author | Walter Bender <walter.bender@gmail.com> | 2011-11-30 17:09:45 (GMT) |
---|---|---|
committer | Walter Bender <walter.bender@gmail.com> | 2011-11-30 17:09:45 (GMT) |
commit | 5bfe0c61cb7789560e1b2c06bdf336b32771fba5 (patch) | |
tree | 6691a57a4f1d83f51e251afbb569e04ce48c11b4 | |
parent | ace399d842504a776000a559f71ab6b6836d8e9b (diff) |
adding direct cairo-surface writing
-rw-r--r-- | sprites.py | 22 |
1 files changed, 13 insertions, 9 deletions
@@ -187,7 +187,8 @@ class Sprite: self._dy.append(0) self._dx[i] = dx self._dy[i] = dy - if isinstance(image, gtk.gdk.Pixbuf): + if isinstance(image, gtk.gdk.Pixbuf) or \ + isinstance(image, cairo.ImageSurface): w = image.get_width() h = image.get_height() else: @@ -200,14 +201,17 @@ class Sprite: self.rect.width = w + dx if h + dy > self.rect.height: self.rect.height = h + dy - surface = cairo.ImageSurface( - cairo.FORMAT_ARGB32, self.rect.width, self.rect.height) - context = cairo.Context(surface) - context = gtk.gdk.CairoContext(context) - context.set_source_pixbuf(image, 0, 0) - context.rectangle(0, 0, self.rect.width, self.rect.height) - context.fill() - self.cached_surfaces[i] = surface + if isinstance(image, cairo.ImageSurface): + self.cached_surfaces[i] = image + else: # Convert to Cairo surface + surface = cairo.ImageSurface( + cairo.FORMAT_ARGB32, self.rect.width, self.rect.height) + context = cairo.Context(surface) + context = gtk.gdk.CairoContext(context) + context.set_source_pixbuf(image, 0, 0) + context.rectangle(0, 0, self.rect.width, self.rect.height) + context.fill() + self.cached_surfaces[i] = surface def move(self, pos): ''' Move to new (x, y) position ''' |