# HG changeset patch # User Stefano Rivera # Date 1302114021 -7200 # Node ID 691d2795ae3cee534e74abcd4b0bdf582b14b434 # Parent c9a7ab87e0d42f6cf87600e5bb42ebc02421efb5 Add text shadow diff -r c9a7ab87e0d4 -r 691d2795ae3c skaapsteker/cutscene.py --- a/skaapsteker/cutscene.py Wed Apr 06 16:38:26 2011 +0200 +++ b/skaapsteker/cutscene.py Wed Apr 06 20:20:21 2011 +0200 @@ -13,7 +13,7 @@ super(CutScene, self).__init__(game_state) self.text = text self.text_widget = Text(text, pygame.Rect(20, 20, 800-40, 600-40), - size=24, wrap=True) + size=24, shadow='gray', wrap=True) self.background = data.load_image('backgrounds/' + background) self.start_time = pygame.time.get_ticks() self.run_time = 60000 # ms diff -r c9a7ab87e0d4 -r 691d2795ae3c skaapsteker/levelscene.py --- a/skaapsteker/levelscene.py Wed Apr 06 16:38:26 2011 +0200 +++ b/skaapsteker/levelscene.py Wed Apr 06 20:20:21 2011 +0200 @@ -95,7 +95,7 @@ self._world.draw(self._level_surface) fps_text_pos = self._clip_rect.left + 10, self._clip_rect.top + 10 - fps_text = Text('FPS: %.1f' % engine.get_fps(), fps_text_pos) + fps_text = Text('FPS: %.1f' % engine.get_fps(), fps_text_pos, shadow='white') fps_text.draw(self._level_surface) if self._paused: diff -r c9a7ab87e0d4 -r 691d2795ae3c skaapsteker/widgets/text.py --- a/skaapsteker/widgets/text.py Wed Apr 06 16:38:26 2011 +0200 +++ b/skaapsteker/widgets/text.py Wed Apr 06 20:20:21 2011 +0200 @@ -38,7 +38,7 @@ class Text(Widget): def __init__(self, text, pos, font='sans', size=16, color='black', - wrap=False): + shadow=None, wrap=False): self.text = text if isinstance(pos, pygame.Rect): self.rect = pos @@ -46,16 +46,28 @@ self.rect = pygame.Rect(pos, (0, 0)) self.font = load_font(font, size) self.color = pygame.Color(color) + self.shadow = None + if shadow: + self.shadow = pygame.Color(shadow) if wrap: if not isinstance(pos, pygame.Rect): raise Exception("Cannot wrap without dimensions") self._wrap() - self.surfaces = [self.font.render(line, True, self.color) - for line in self.text.split('\n')] - self.rect.width = max(line.get_width() for line in self.surfaces) - self.rect.height = self.font.get_linesize() * len(self.surfaces) - + self._lines = [] + offset = (0, 0) + for line in self.text.split('\n'): + if shadow is not None: + self._lines.append(((offset[0] + 1, offset[1] + 1), + self.font.render(line, True, self.shadow))) + self._lines.append((offset, + self.font.render(line, True, self.color))) + offset = (offset[0], offset[1] + self.font.get_linesize()) + self.rect.width = max(line[1].get_width() for line in self._lines) + self.rect.height = self.font.get_linesize() * len(self._lines) + if shadow is not None: + self.rect.width += 1 + self.rect.height += 1 def _wrap(self): unwrapped = [para.replace('\n', ' ') @@ -83,9 +95,8 @@ def draw(self, surface): pos = self.rect - for line in self.surfaces: - surface.blit(line, pos) - pos = pos.move(0, self.font.get_linesize()) + for offset, line in self._lines: + surface.blit(line, pos.move(offset)) class TextChoice(Widget):