annotate mamba/widgets/text.py @ 91:ebd8f46cc553

Text Button
author Stefano Rivera <stefano@rivera.za.net>
date Sun, 11 Sep 2011 19:05:20 +0200
parents ac6688820528
children d5aa5f805f00
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
771db7d6e862 Basic widget layout (won't work
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 import pygame
771db7d6e862 Basic widget layout (won't work
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
2
23
d0e8940df703 Widgets -> base
Stefano Rivera <stefano@rivera.za.net>
parents: 18
diff changeset
3 from mamba.widgets.base import Widget
10
771db7d6e862 Basic widget layout (won't work
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
4 from mamba.data import filepath
75
ac6688820528 Move font name to constants, for future configurablity
Neil Muller <drnlmuller@gmail.com>
parents: 41
diff changeset
5 from mamba.constants import DEFAULT_FONT
10
771db7d6e862 Basic widget layout (won't work
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6
38
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
7 class TextWidget(Widget):
10
771db7d6e862 Basic widget layout (won't work
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 fontcache = {}
38
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
9
18
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
10 def __init__(self, rect, text, fontsize=16, color='black'):
38
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
11 super(TextWidget, self).__init__(rect)
10
771db7d6e862 Basic widget layout (won't work
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 self.text = text
18
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
13 self.fontsize = fontsize
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
14 self.color = color
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
15 self.prepare()
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
16
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
17 def prepare(self):
75
ac6688820528 Move font name to constants, for future configurablity
Neil Muller <drnlmuller@gmail.com>
parents: 41
diff changeset
18 self.fontname = DEFAULT_FONT
18
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
19 font = (self.fontname, self.fontsize)
38
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
20 if font not in TextWidget.fontcache:
18
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
21 fontfn = filepath('fonts/' + self.fontname)
38
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
22 TextWidget.fontcache[font] = pygame.font.Font(fontfn, self.fontsize)
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
23 self.font = TextWidget.fontcache[font]
18
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
24 if not isinstance(self.color, pygame.Color):
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
25 self.color = pygame.Color(self.color)
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
26 self.surface = self.font.render(self.text, True, self.color)
41
3f44c30a1c39 Correct Text placement
Stefano Rivera <stefano@rivera.za.net>
parents: 38
diff changeset
27 self.rect.width, self.rect.height = self.surface.get_rect().size
18
a0604a61762e More widget API
Stefano Rivera <stefano@rivera.za.net>
parents: 10
diff changeset
28
38
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
29 def draw(self, surface):
047273a63054 Main menu says hello
Stefano Rivera <stefano@rivera.za.net>
parents: 23
diff changeset
30 surface.blit(self.surface, self.rect)
91
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
31
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
32
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
33 class TextButton(TextWidget):
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
34 def __init__(self, *args, **kwargs):
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
35 self.focus_color = kwargs.pop('focus_color', 'red')
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
36 self.padding = kwargs.pop('padding', 10)
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
37 self.border = kwargs.pop('border', 3)
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
38 super(TextButton, self).__init__(*args, **kwargs)
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
39 if not isinstance(self.focus_color, pygame.Color):
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
40 self.focus_color = pygame.Color(self.focus_color)
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
41 self.focussable = True
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
42
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
43 def prepare(self):
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
44 super(TextButton, self).prepare()
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
45 text = self.surface
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
46 text_rect = text.get_rect()
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
47 self._focussed = self.focussed
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
48 color = self.focus_color if self.focussed else self.color
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
49
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
50 self.rect.width = text_rect.width + self.padding * 2
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
51 self.rect.height = text_rect.height + self.padding * 2
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
52 self.surface = pygame.Surface(self.rect.size)
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
53 self.surface.blit(text, text.get_rect().move(self.padding,
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
54 self.padding))
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
55 pygame.draw.rect(self.surface, color, self.surface.get_rect(),
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
56 self.border)
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
57
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
58 def draw(self, surface):
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
59 if self._focussed != self.focussed:
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
60 self.prepare()
ebd8f46cc553 Text Button
Stefano Rivera <stefano@rivera.za.net>
parents: 75
diff changeset
61 super(TextButton, self).draw(surface)