Mercurial > mamba
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 |
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 | 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 | 7 class TextWidget(Widget): |
10
771db7d6e862
Basic widget layout (won't work
Stefano Rivera <stefano@rivera.za.net>
parents:
diff
changeset
|
8 fontcache = {} |
38 | 9 |
18 | 10 def __init__(self, rect, text, fontsize=16, color='black'): |
38 | 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 | 13 self.fontsize = fontsize |
14 self.color = color | |
15 self.prepare() | |
16 | |
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 | 19 font = (self.fontname, self.fontsize) |
38 | 20 if font not in TextWidget.fontcache: |
18 | 21 fontfn = filepath('fonts/' + self.fontname) |
38 | 22 TextWidget.fontcache[font] = pygame.font.Font(fontfn, self.fontsize) |
23 self.font = TextWidget.fontcache[font] | |
18 | 24 if not isinstance(self.color, pygame.Color): |
25 self.color = pygame.Color(self.color) | |
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 | 28 |
38 | 29 def draw(self, surface): |
30 surface.blit(self.surface, self.rect) | |
91 | 31 |
32 | |
33 class TextButton(TextWidget): | |
34 def __init__(self, *args, **kwargs): | |
35 self.focus_color = kwargs.pop('focus_color', 'red') | |
36 self.padding = kwargs.pop('padding', 10) | |
37 self.border = kwargs.pop('border', 3) | |
38 super(TextButton, self).__init__(*args, **kwargs) | |
39 if not isinstance(self.focus_color, pygame.Color): | |
40 self.focus_color = pygame.Color(self.focus_color) | |
41 self.focussable = True | |
42 | |
43 def prepare(self): | |
44 super(TextButton, self).prepare() | |
45 text = self.surface | |
46 text_rect = text.get_rect() | |
47 self._focussed = self.focussed | |
48 color = self.focus_color if self.focussed else self.color | |
49 | |
50 self.rect.width = text_rect.width + self.padding * 2 | |
51 self.rect.height = text_rect.height + self.padding * 2 | |
52 self.surface = pygame.Surface(self.rect.size) | |
53 self.surface.blit(text, text.get_rect().move(self.padding, | |
54 self.padding)) | |
55 pygame.draw.rect(self.surface, color, self.surface.get_rect(), | |
56 self.border) | |
57 | |
58 def draw(self, surface): | |
59 if self._focussed != self.focussed: | |
60 self.prepare() | |
61 super(TextButton, self).draw(surface) |