# HG changeset patch # User Stefano Rivera # Date 1378044556 -7200 # Node ID 58505d3482b613561a004fb8c1dd83e251147a85 # Parent c03982fe3c70367a25a664718a4350dcaa7f4abc Text on the menu screen diff -r c03982fe3c70 -r 58505d3482b6 data/fonts/DejaVuSans.ttf Binary file data/fonts/DejaVuSans.ttf has changed diff -r c03982fe3c70 -r 58505d3482b6 nagslang/constants.py --- 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, diff -r c03982fe3c70 -r 58505d3482b6 nagslang/screens/menu.py --- 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) diff -r c03982fe3c70 -r 58505d3482b6 nagslang/utils.py --- /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() diff -r c03982fe3c70 -r 58505d3482b6 nagslang/widgets/__init__.py diff -r c03982fe3c70 -r 58505d3482b6 nagslang/widgets/base.py --- /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 diff -r c03982fe3c70 -r 58505d3482b6 nagslang/widgets/text.py --- /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)