changeset 29:58505d3482b6

Text on the menu screen
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 01 Sep 2013 16:09:16 +0200
parents c03982fe3c70
children 9d17bf13f800
files data/fonts/DejaVuSans.ttf nagslang/constants.py nagslang/screens/menu.py nagslang/utils.py nagslang/widgets/__init__.py nagslang/widgets/base.py nagslang/widgets/text.py
diffstat 6 files changed, 76 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
Binary file data/fonts/DejaVuSans.ttf has changed
--- a/nagslang/constants.py	Sun Sep 01 16:07:39 2013 +0200
+++ b/nagslang/constants.py	Sun Sep 01 16:09:16 2013 +0200
@@ -1,5 +1,8 @@
 SCREEN = (800, 600)
 FPS = 40
+FONT = 'DejaVuSans.ttf'
+FONT_SIZE = 16
+
 DEFAULTS = dict(
     debug=False,
     sound=True,
--- a/nagslang/screens/menu.py	Sun Sep 01 16:07:39 2013 +0200
+++ b/nagslang/screens/menu.py	Sun Sep 01 16:09:16 2013 +0200
@@ -4,6 +4,7 @@
 
 from nagslang.screens.base import Screen
 from nagslang.events import QuitEvent, ScreenChange
+from nagslang.widgets.text import TextWidget
 
 
 class MenuScreen(Screen):
@@ -16,7 +17,6 @@
                 ScreenChange.post('level1')
 
     def render(self, surface):
-        surface.fill(pygame.color.Color(0, 0, 0))
-        color = pygame.color.Color(255, 0, 0)
-        rect = pygame.rect.Rect(10, 10, 200, 200)
-        surface.fill(color, rect)
+        surface.fill(pygame.color.Color(255, 255, 255))
+        TextWidget((10, 10), 'Menu').draw(surface)
+        TextWidget((10, 30), 'Press 1 to start').draw(surface)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/utils.py	Sun Sep 01 16:09:16 2013 +0200
@@ -0,0 +1,11 @@
+import pygame
+
+
+def convert_colour(colour):
+    if isinstance(colour, pygame.Color):
+        return colour
+    if isinstance(colour, tuple):
+        return pygame.Color(*colour)
+    if isinstance(colour, basestring):
+        return pygame.Color(colour)
+    raise ValueError()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/widgets/base.py	Sun Sep 01 16:09:16 2013 +0200
@@ -0,0 +1,21 @@
+import pygame
+
+
+class Widget(object):
+    def __init__(self, pos, size):
+        self.pos = pos
+        self.size = size
+        self.rect = pygame.Rect(pos, size if size else (0, 0))
+        self.visible = True
+        self.is_prepared = False
+
+    def draw(self, surface):
+        raise NotImplemented()
+
+    def prepare(self):
+        raise NotImplemented()
+
+    def do_prepare(self):
+        if not self.is_prepared:
+            self.prepare()
+            self.is_prepared = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/nagslang/widgets/text.py	Sun Sep 01 16:09:16 2013 +0200
@@ -0,0 +1,37 @@
+import pygame
+
+from nagslang.constants import FONT, FONT_SIZE
+from nagslang.data import filepath
+from nagslang.widgets.base import Widget
+from nagslang.utils import convert_colour
+
+
+class TextWidget(Widget):
+    fonts = {}
+
+    def __init__(self, pos, text, size=None, fontname=None, fontsize=None,
+                 colour=None):
+        super(TextWidget, self).__init__(pos, size)
+
+        self.text = text
+        self.fontname = fontname or FONT
+        self.fontsize = fontsize or FONT_SIZE
+        self.colour = convert_colour(colour or (0, 0, 0))
+
+        self.prepare()
+
+    def prepare(self):
+        font = (self.fontname, self.fontsize)
+        if font not in TextWidget.fonts:
+            fn = filepath('fonts/' + self.fontname)
+            TextWidget.fonts[font] = pygame.font.Font(fn, self.fontsize)
+        self.font = TextWidget.fonts[font]
+        self.surface = self.font.render(self.text, True, self.colour)
+        self.text_rect = self.surface.get_rect()
+        if not self.size:
+            self.rect.size = self.text_rect.size
+
+    def draw(self, surface):
+        if self.visible:
+            self.do_prepare()
+            surface.blit(self.surface, self.rect)