Mercurial > skaapsteker
changeset 183:691d2795ae3c
Add text shadow
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Wed, 06 Apr 2011 20:20:21 +0200 |
parents | c9a7ab87e0d4 |
children | e7413a565421 |
files | skaapsteker/cutscene.py skaapsteker/levelscene.py skaapsteker/widgets/text.py |
diffstat | 3 files changed, 22 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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:
--- 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):