From 581b778f2cd394222074960148372cb0d3681389 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Fri, 16 Jul 2010 02:26:52 +0000 Subject: added intersection handling on expose event --- diff --git a/sprites.py b/sprites.py index 5c64b09..5577b4e 100644 --- a/sprites.py +++ b/sprites.py @@ -78,6 +78,7 @@ import gtk import gobject import pango + # # A class for the list of sprites and everything they share in common # @@ -125,9 +126,15 @@ class Sprites: if spr.hit(pos): return spr return None - def redraw_sprites(self): + def redraw_sprites(self, area=None): for spr in self.list: - spr.draw() + if area == None: + spr.draw() + else: + intersection = spr.rect.intersect(area) + if intersection.width > 0 or intersection.height > 0: + spr.draw() + # # A class for the individual sprites @@ -153,10 +160,15 @@ class Sprite: self.images = [] self._dx = [] # image offsets self._dy = [] + self.rect = None self.set_image(image) if self._sprites is not None: self._sprites.append_to_list(self) + def set_rect(self): + self.rect = gtk.gdk.Rectangle(self._x, self._y, self._width, + self._height) + def set_image(self, image, i=0, dx=0, dy=0): while len(self.images) < i+1: self.images.append(None) @@ -178,16 +190,21 @@ class Sprite: self._width = _w + dx if _h + dy > self._height: self._height = _h + dy + self.set_rect() def move(self, pos): self.inval() self._x,self._y = int(pos[0]),int(pos[1]) + self.rect.x = self._x + self.rect.y = self._y self.inval() def move_relative(self, pos): self.inval() self._x += int(pos[0]) self._y += int(pos[1]) + self.rect.x = self._x + self.rect.y = self._y self.inval() def get_xy(self): diff --git a/tawindow.py b/tawindow.py index 8bfdf72..81fe232 100644 --- a/tawindow.py +++ b/tawindow.py @@ -260,7 +260,9 @@ class TurtleArtWindow(): def _expose_cb(self, win, event): """ Repaint """ - self.sprite_list.redraw_sprites() + # TODO: send event GDK_EXPOSE area to redraw + # print event.area + self.sprite_list.redraw_sprites(event.area) # self.canvas.cr_expose(event) return True -- cgit v0.9.1