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):