changeset 196:40f618978c00

Overlays that don't suck as much
author Stefano Rivera <stefano@rivera.za.net>
date Tue, 03 Sep 2013 22:24:38 +0200
parents b8701c0bb184
children 34c11bb5c96e f89576cec59a
files nagslang/game_object.py nagslang/widgets/text.py
diffstat 2 files changed, 29 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/nagslang/game_object.py	Tue Sep 03 22:10:38 2013 +0200
+++ b/nagslang/game_object.py	Tue Sep 03 22:24:38 2013 +0200
@@ -10,7 +10,7 @@
 from nagslang.options import options
 from nagslang.resources import resources
 from nagslang.events import DoorEvent
-from nagslang.widgets.text import TextWidget
+from nagslang.widgets.text import LabelWidget
 
 
 class PuzzleGlue(object):
@@ -335,7 +335,7 @@
 class TextOverlay(Overlay):
     def __init__(self, text):
         self.text = text
-        self.widget = TextWidget((20, 20), self.text)
+        self.widget = LabelWidget((20, 20), self.text)
 
     def render(self, surface):
         self.widget.draw(surface)
--- a/nagslang/widgets/text.py	Tue Sep 03 22:10:38 2013 +0200
+++ b/nagslang/widgets/text.py	Tue Sep 03 22:24:38 2013 +0200
@@ -1,3 +1,5 @@
+import pygame
+
 from nagslang.constants import FONT, FONT_SIZE
 from nagslang.widgets.base import Widget
 from nagslang.utils import convert_colour
@@ -27,3 +29,28 @@
         if self.visible:
             self.do_prepare()
             surface.blit(self.surface, self.rect)
+
+
+class LabelWidget(TextWidget):
+    def __init__(self, *args, **kwargs):
+        self.padding = kwargs.pop('padding', 5)
+        self.border = kwargs.pop('border', 2)
+        self.bg_colour = convert_colour(kwargs.pop('bg_colour',
+                                                   (255, 255, 255, 150)))
+        self.border_colour = convert_colour(kwargs.pop('border_colour',
+                                                       (0, 0, 0)))
+        super(LabelWidget, self).__init__(*args, **kwargs)
+
+    def prepare(self):
+        super(LabelWidget, self).prepare()
+        if not self.size:
+            self.rect.width += 2 * self.padding
+            self.rect.height += 2 * self.padding
+        surface = pygame.Surface(self.rect.size)
+        surface = surface.convert_alpha()
+        surface.fill(self.bg_colour)
+        surface.blit(self.surface, self.surface.get_rect().move(
+            (self.padding, self.padding)))
+        pygame.draw.rect(surface, self.border_colour, surface.get_rect(),
+                         self.border)
+        self.surface = surface