annotate gamelib/gui_base.py @ 243:05afa7ae5df3

Standardise image loading to use data.load_image
author Neil Muller <drnlmuller@gmail.com>
date Sun, 13 May 2012 00:38:48 +0200
parents ce1e23ea46e5
children 330a63dc176e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
1 import pygame
70
442a1bf9b14e fucking pep8
Rizmari Versfeld <rizziepit@gmail.com>
parents: 69
diff changeset
2 from pygame.locals import SRCALPHA
39
d82d3e54a4ef fixed more pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 38
diff changeset
3 from pygame import Surface, Rect
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
4 from pygame.font import Font
236
ce1e23ea46e5 added generic background for all windows
Rizmari Versfeld <rizziepit@gmail.com>
parents: 212
diff changeset
5 from pygame import image
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
6
243
05afa7ae5df3 Standardise image loading to use data.load_image
Neil Muller <drnlmuller@gmail.com>
parents: 236
diff changeset
7 from gamelib.data import filepath, load_image
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
8
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
9
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
10 # different font sizes
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
11 pygame.font.init()
243
05afa7ae5df3 Standardise image loading to use data.load_image
Neil Muller <drnlmuller@gmail.com>
parents: 236
diff changeset
12 font_small = Font(filepath('fonts/DejaVuSans.ttf'), 10)
05afa7ae5df3 Standardise image loading to use data.load_image
Neil Muller <drnlmuller@gmail.com>
parents: 236
diff changeset
13 font_medium = Font(filepath('fonts/DejaVuSans.ttf'), 14)
05afa7ae5df3 Standardise image loading to use data.load_image
Neil Muller <drnlmuller@gmail.com>
parents: 236
diff changeset
14 font_large = Font(filepath('fonts/DejaVuSans.ttf'), 18)
110
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
15 font_auto = None
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
16
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
17
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
18 class Drawable(object):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
19
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
20 def __init__(self, rect):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
21 if isinstance(rect, Rect):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
22 self.rect = rect
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
23 else:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
24 self.rect = Rect(rect[0], rect[1], rect[2], rect[3])
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
25
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
26 def draw(self, surface):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
27 pass
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
28
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
29
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
30 class Clickable(object):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
31
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
32 def on_mouse_down(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
33 pass
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
34
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
35 def on_mouse_up(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
36 pass
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
37
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
38 def on_mouse_move(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
39 pass
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
40
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
41 def on_mouse_cancel(self):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
42 pass
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
43
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
44 def on_click(self):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
45 pass
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
46
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
47
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
48 class ContainerView(Drawable):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
49
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
50 def __init__(self):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
51 self.children = []
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
52
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
53 def add_child(self, child):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
54 self.children.append(child)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
55
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
56 def remove_child(self, child):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
57 self.children.remove(child)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
58
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
59 def get_child_by_pos(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
60 for child in self.children:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
61 if child.rect.collidepoint(pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
62 if isinstance(child, ContainerView):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
63 # calculates position relative to child
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
64 x = pos[0] - child.rect[0]
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
65 y = pos[1] - child.rect[1]
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
66 return child.get_child_by_pos((x, y))
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
67 else:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
68 return child
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
69
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
70 def draw_children(self, surface):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
71 for child in self.children:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
72 child.draw(surface)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
73
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
74
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
75 class Window(Clickable, ContainerView):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
76
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
77 def __init__(self, screen):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
78 super(Window, self).__init__()
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
79 self.surface = Surface((screen.get_width(), screen.get_height()))
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
80 self.background_colour = None
243
05afa7ae5df3 Standardise image loading to use data.load_image
Neil Muller <drnlmuller@gmail.com>
parents: 236
diff changeset
81 self.background_image = load_image('images/background.jpg')
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
82 self.pressed_child = None
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
83
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
84 def on_mouse_down(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
85 child = self.get_child_by_pos(pos)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
86 if isinstance(child, Clickable):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
87 # calculates position relative to child
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
88 x = pos[0] - child.rect[0]
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
89 y = pos[1] - child.rect[1]
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
90 child.on_mouse_down((x, y))
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
91 self.pressed_child = child
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
92
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
93 def on_mouse_up(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
94 if self.pressed_child:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
95 child = self.pressed_child
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
96 x = pos[0] - child.rect[0]
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
97 y = pos[1] - child.rect[1]
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
98 child.on_mouse_up((x, y))
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
99 self.pressed_child = None
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
100
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
101 def on_mouse_move(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
102 if self.pressed_child:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
103 if self.pressed_child != self.get_child_by_pos(pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
104 self.pressed_child.on_mouse_cancel()
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
105 self.pressed_child = None
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
106
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
107 def draw(self, screen):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
108 if self.background_colour:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
109 self.surface.fill(self.background_colour)
68
7309392d9ca9 fixed widget drawing bugs
Rizmari Versfeld <rizziepit@gmail.com>
parents: 64
diff changeset
110 else:
7309392d9ca9 fixed widget drawing bugs
Rizmari Versfeld <rizziepit@gmail.com>
parents: 64
diff changeset
111 self.surface.fill((0, 0, 0, 255))
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
112 if self.background_image:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
113 self.surface.blit(self.background_image, (0, 0))
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
114 self.draw_children(self.surface)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
115 screen.blit(self.surface, (0, 0))
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
116
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
117
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
118 class StateDrawable(Drawable):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
119
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
120 def __init__(self, rect):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
121 super(StateDrawable, self).__init__(rect)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
122 self.state = -1
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
123 self.states = {}
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
124 self.drawables = []
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
125
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
126 def draw(self, surface):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
127 if self.state != -1 and self.drawables[self.state]:
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
128 self.drawables[self.state].draw(surface)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
129
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
130 def add_state(self, state_name, drawable):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
131 self.states[state_name] = len(self.drawables)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
132 self.drawables.append(drawable)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
133
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
134 def set_state(self, state_name):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
135 self.state = self.states[state_name]
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
136
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
137
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
138 class Button(Clickable, StateDrawable):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
139
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
140 def __init__(self, rect, normal_drawable, down_drawable):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
141 super(Button, self).__init__(rect)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
142 self.add_state('NORMAL', normal_drawable)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
143 self.add_state('DOWN', down_drawable)
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
144 self.set_state('NORMAL')
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
145
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
146 def on_mouse_down(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
147 self.set_state('DOWN')
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
148
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
149 def on_mouse_up(self, pos):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
150 self.set_state('NORMAL')
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
151 self.on_click()
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
152
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
153 def on_mouse_cancel(self):
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
154 self.set_state('NORMAL')
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
155
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
156
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
157 class TextButton(Button):
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
158
62
38f41d046c6f Make button font a parameter. Tweak indication of points to be spent
Neil Muller <drnlmuller@gmail.com>
parents: 55
diff changeset
159 def __init__(self, rect, normal_drawable, down_drawable, text, font,
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
160 shadow, text_rect=None, color=(0, 0, 0),
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
161 shadow_color=(128, 128, 128)):
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
162 super(TextButton, self).__init__(rect, normal_drawable, down_drawable)
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
163 self.text_rect = Rect((0, 0), self.rect.size)
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
164 if text_rect is not None:
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
165 self.text_rect = Rect(*text_rect)
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
166 self.text = text
110
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
167 if font is font_auto:
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
168 font = self._auto_font()
62
38f41d046c6f Make button font a parameter. Tweak indication of points to be spent
Neil Muller <drnlmuller@gmail.com>
parents: 55
diff changeset
169 self.font = font
38f41d046c6f Make button font a parameter. Tweak indication of points to be spent
Neil Muller <drnlmuller@gmail.com>
parents: 55
diff changeset
170 self.shadow = shadow
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
171 self.shadow_color = shadow_color
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
172 self.color = color
55
86d83dcb7d42 Make text drawing easier to poke at for subclasses
Neil Muller <drnlmuller@gmail.com>
parents: 39
diff changeset
173 self._draw_text()
86d83dcb7d42 Make text drawing easier to poke at for subclasses
Neil Muller <drnlmuller@gmail.com>
parents: 39
diff changeset
174
110
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
175 def _auto_font(self):
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
176 for font in (font_large, font_medium):
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
177 h, w = font.size(self.text)
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
178 if w < self.text_rect.width and h < self.text_rect.height:
110
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
179 return font
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
180 return font_small
ff7c953502d5 Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents: 74
diff changeset
181
55
86d83dcb7d42 Make text drawing easier to poke at for subclasses
Neil Muller <drnlmuller@gmail.com>
parents: 39
diff changeset
182 def _draw_text(self):
62
38f41d046c6f Make button font a parameter. Tweak indication of points to be spent
Neil Muller <drnlmuller@gmail.com>
parents: 55
diff changeset
183 self.font.set_bold(True)
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
184 self.text_surface = self.font.render(self.text, True, self.color)
69
626b1eaec13c fucking pep8
Rizmari Versfeld <rizziepit@gmail.com>
parents: 68
diff changeset
185 size = self.font.size(self.text)
62
38f41d046c6f Make button font a parameter. Tweak indication of points to be spent
Neil Muller <drnlmuller@gmail.com>
parents: 55
diff changeset
186 if self.shadow:
212
16ce5ed563c9 Change science buttons
Neil Muller <drnlmuller@gmail.com>
parents: 145
diff changeset
187 s = self.font.render(self.text, True, self.shadow_color)
74
22b65c943712 prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents: 71
diff changeset
188 temp = Surface((s.get_width() + 1, s.get_width() + 1), SRCALPHA)
71
20b01d100ff5 fucking pep8
Rizmari Versfeld <rizziepit@gmail.com>
parents: 70
diff changeset
189 temp.fill((255, 255, 255, 0))
74
22b65c943712 prettified main menu - temp background
Rizmari Versfeld <rizziepit@gmail.com>
parents: 71
diff changeset
190 temp.blit(s, (1, 1))
71
20b01d100ff5 fucking pep8
Rizmari Versfeld <rizziepit@gmail.com>
parents: 70
diff changeset
191 temp.blit(self.text_surface, (0, 0))
20b01d100ff5 fucking pep8
Rizmari Versfeld <rizziepit@gmail.com>
parents: 70
diff changeset
192 self.text_surface = temp
68
7309392d9ca9 fixed widget drawing bugs
Rizmari Versfeld <rizziepit@gmail.com>
parents: 64
diff changeset
193 size = [s + 2 for s in size]
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
194 self.text_offset = Rect((0, 0), size)
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
195 self.text_offset.center = self.text_rect.center
68
7309392d9ca9 fixed widget drawing bugs
Rizmari Versfeld <rizziepit@gmail.com>
parents: 64
diff changeset
196 self.font.set_bold(False)
37
9c4bf1f15431 gui stuff
Rizmari Versfeld <rizziepit@gmail.com>
parents:
diff changeset
197
38
7e18a67995f6 fixed pep8 issues
Rizmari Versfeld <rizziepit@gmail.com>
parents: 37
diff changeset
198 def draw(self, surface):
145
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
199 temp_surface = Surface(self.rect.size, SRCALPHA)
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
200 super(TextButton, self).draw(temp_surface)
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
201 temp_surface.blit(self.text_surface, self.text_offset)
53277724645b Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents: 143
diff changeset
202 surface.blit(temp_surface, self.rect)
64
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
203
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
204
143
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
205 class ToggleButton(Button):
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
206
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
207 def __init__(self, rect, normal_drwble, down_drwble):
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
208 super(ToggleButton, self).__init__(rect, normal_drwble, down_drwble)
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
209 self.toggled = False
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
210
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
211 def on_click(self):
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
212 self.toggled = not self.toggled
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
213 if self.toggled:
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
214 self.set_state('DOWN')
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
215 else:
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
216 self.set_state('NORMAL')
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
217
821ecb98e888 some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents: 119
diff changeset
218
64
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
219 class TextLabel(Drawable):
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
220
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
221 def __init__(self, rect, text, font, color):
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
222 super(TextLabel, self).__init__(rect)
68
7309392d9ca9 fixed widget drawing bugs
Rizmari Versfeld <rizziepit@gmail.com>
parents: 64
diff changeset
223 self.surface = Surface((rect[2], rect[3]), pygame.SRCALPHA)
64
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
224 self.text = text
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
225 self.font = font
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
226 self.color = color
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
227 self._draw_text()
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
228
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
229 def _draw_text(self):
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
230 self.text_surface = self.font.render(self.text, True, self.color)
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
231 size = self.font.size(self.text)
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
232 # We centre vertically, but start at left edge
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
233 self.text_offset = (0, (self.rect[3] - size[1]) / 2)
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
234
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
235 def draw(self, surface):
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
236 self.surface.fill((0, 0, 0, 0))
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
237 super(TextLabel, self).draw(self.surface)
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
238 self.surface.blit(self.text_surface, self.text_offset)
24f0707695b4 Add text label
Neil Muller <drnlmuller@gmail.com>
parents: 62
diff changeset
239 surface.blit(self.surface, self.rect)
113
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
240
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
241
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
242 class TextBox(TextLabel):
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
243
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
244 def _draw_text(self):
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
245 self.text_surface = Surface((self.rect[2], self.rect[3]),
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
246 pygame.SRCALPHA)
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
247 current_height = 0
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
248 current_str = ''
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
249 size = None
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
250 for word in self.text.split(' '):
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
251 size = self.font.size(current_str + word)
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
252 if size[0] < self.rect.width:
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
253 current_str += word + ' '
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
254 else:
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
255 s = self.font.render(current_str[0:-1], True, self.color)
119
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
256 self._resize_text_surface(current_height + size[1])
113
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
257 self.text_surface.blit(s, (0, current_height))
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
258 current_height += size[1]
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
259 current_str = word + ' '
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
260 if current_str[-1] == ' ':
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
261 current_str = current_str[0:-1]
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
262 s = self.font.render(current_str, True, self.color)
119
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
263 self._resize_text_surface(current_height + size[1])
113
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
264 self.text_surface.blit(s, (0, current_height))
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
265 self.text_offset = (0, 0)
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
266 self.rect.height = current_height + size[1]
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
267 self.surface = Surface((self.rect.width, self.rect.height),
93ba0f1b4e06 added textbox
Rizmari Versfeld <rizziepit@gmail.com>
parents: 74
diff changeset
268 pygame.SRCALPHA)
119
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
269
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
270 def _resize_text_surface(self, new_height):
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
271 """Resize the text surface if needed"""
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
272 if new_height > self.text_surface.get_rect().height:
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
273 old_text = self.text_surface
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
274 self.text_surface = Surface((self.rect[2], new_height),
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
275 pygame.SRCALPHA)
9a30162f2a9c Add more logic around resizing surfaces
Neil Muller <drnlmuller@gmail.com>
parents: 114
diff changeset
276 self.text_surface.blit(old_text, (0, 0))