Mercurial > sypikslang
annotate gamelib/gui.py @ 266:381fa22d217b
Fix width / height confusion buglet
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 15 Dec 2013 11:43:17 +0200 |
parents | 69941f04f1c0 |
children |
rev | line source |
---|---|
150
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
1 import pygame |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
2 |
37 | 3 from gamelib import data |
143
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
4 from gamelib.gui_base import Drawable, TextButton, font_auto, ToggleButton |
37 | 5 |
6 | |
7 class ImageDrawable(Drawable): | |
38 | 8 |
9 def __init__(self, rect, image): | |
10 super(ImageDrawable, self).__init__(rect) | |
11 self.image = image | |
12 | |
13 def draw(self, surface): | |
14 surface.blit(self.image, (self.rect[0], self.rect[1])) | |
15 | |
37 | 16 |
38 | 17 class BigButton(TextButton): |
18 WIDTH = 128 | |
19 HEIGHT = 64 | |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
20 BG_IMAGE_NORMAL = data.load_image('images/button_normal.png') |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
21 BG_IMAGE_DOWN = data.load_image('images/button_down.png') |
38 | 22 |
110
ff7c953502d5
Auto-downsize fonts on BigButtons that are too large.
Simon Cross <hodgestar@gmail.com>
parents:
74
diff
changeset
|
23 def __init__(self, pos, text, font=font_auto, shadow=True): |
38 | 24 rect1 = (0, 0, self.WIDTH, self.HEIGHT) |
25 n = ImageDrawable(rect1, self.BG_IMAGE_NORMAL) | |
26 d = ImageDrawable(rect1, self.BG_IMAGE_DOWN) | |
27 rect2 = (pos[0], pos[1], self.WIDTH, self.HEIGHT) | |
62
38f41d046c6f
Make button font a parameter. Tweak indication of points to be spent
Neil Muller <drnlmuller@gmail.com>
parents:
39
diff
changeset
|
28 super(BigButton, self).__init__(rect2, n, d, text, font, shadow) |
140
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
29 |
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
30 |
143
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
31 class IconButton(ToggleButton): |
140
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
32 WIDTH = 64 |
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
33 HEIGHT = 64 |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
34 BG_IMAGE_NORMAL = data.load_image('images/research_normal.png') |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
35 BG_IMAGE_DOWN = data.load_image('images/research_down.png') |
142 | 36 |
140
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
37 def __init__(self, pos, name): |
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
38 rect = (pos[0], pos[1], self.WIDTH, self.HEIGHT) |
150
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
39 try: |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
40 n_icon = data.load_image('images/icons/%s_normal.png' % name) |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
41 d_icon = data.load_image('images/icons/%s_down.png' % name) |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
42 except: |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
43 n_icon = pygame.Surface((64, 64), pygame.SRCALPHA) |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
44 d_icon = pygame.Surface((64, 64), pygame.SRCALPHA) |
140
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
45 n = ImageDrawable(rect, self.BG_IMAGE_NORMAL.copy()) |
142 | 46 n.image.blit(n_icon, (0, 0)) |
140
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
47 d = ImageDrawable(rect, self.BG_IMAGE_DOWN.copy()) |
142 | 48 d.image.blit(d_icon, (0, 0)) |
140
abbceec3cc8b
added examples of nodes in main menu
Rizmari Versfeld <rizziepit@gmail.com>
parents:
110
diff
changeset
|
49 rect2 = (pos[0], pos[1], self.WIDTH, self.HEIGHT) |
142 | 50 super(IconButton, self).__init__(rect2, n, d) |
143
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
51 |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
52 |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
53 class IconTextButton(TextButton): |
217 | 54 WIDTH = 198 |
222 | 55 HEIGHT = 73 |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
56 |
222 | 57 TEXT_OFFSET = (0, 58) |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
58 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
59 def __init__(self, pos, name, text, font=font_auto, shadow=True): |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
60 rect = (pos[0], pos[1], self.WIDTH, self.HEIGHT) |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
61 n = self._mk_image(name, 'normal') |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
62 d = self._mk_image(name, 'down') |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
63 text_rect = (self.TEXT_OFFSET, |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
64 (self.WIDTH - self.TEXT_OFFSET[0], |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
65 self.HEIGHT - self.TEXT_OFFSET[1])) |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
66 super(IconTextButton, self).__init__( |
212 | 67 rect, n, d, text, font, shadow, text_rect, |
68 (255, 255, 255), (128, 128, 128)) | |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
69 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
70 def _mk_image(self, name, suffix): |
212 | 71 bg = data.load_image('images/research_%s.png' % (suffix,)) |
150
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
72 try: |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
73 icon = data.load_image('images/icons/%s_%s.png' % (name, suffix)) |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
74 except pygame.error: |
213
2d72e84a765b
Add debugging print to fallback path
Neil Muller <drnlmuller@gmail.com>
parents:
212
diff
changeset
|
75 print('Unable to load %s' % |
2d72e84a765b
Add debugging print to fallback path
Neil Muller <drnlmuller@gmail.com>
parents:
212
diff
changeset
|
76 data.filepath('images/icons/%s_%s.png' % (name, suffix))) |
150
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
77 icon = pygame.Surface((64, 64), pygame.SRCALPHA) |
212 | 78 base = pygame.Surface((self.WIDTH, self.HEIGHT), pygame.SRCALPHA) |
79 base.blit(bg, (self.WIDTH / 2 - 32, 0)) | |
80 drawable = ImageDrawable((0, 0, self.WIDTH, self.HEIGHT), base) | |
81 # Centre icon | |
82 drawable.image.blit(icon, (self.WIDTH / 2 - 32, 0)) | |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
83 return drawable |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
84 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
85 |
143
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
86 class RadioButton(IconButton): |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
87 SELECTED_BUTTON = None |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
88 |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
89 def on_click(self): |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
90 print(RadioButton.CHECK) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
91 super(RadioButton, self).on_click() |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
92 if self.toggled: |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
93 if RadioButton.SELECTED_BUTTON: |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
94 RadioButton.SELECTED_BUTTON.on_click() |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
95 RadioButton.SELECTED_BUTTON = self |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
96 print("I am selected") |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
97 else: |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
98 RadioButton.SELECTED_BUTTON = None |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
99 print("I am deselected") |