Mercurial > sypikslang
annotate gamelib/gui.py @ 211:ba7c0953853b
lotsa schematics icons
author | Rizmari Versfeld <rizziepit@gmail.com> |
---|---|
date | Sat, 12 May 2012 20:20:26 +0200 |
parents | 0090ecf08544 |
children | 16ce5ed563c9 |
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): |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
54 WIDTH = 128 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
55 HEIGHT = 64 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
56 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
57 TEXT_OFFSET = (50, 0) |
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__( |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
67 rect, n, d, text, font, shadow, text_rect) |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
68 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
69 def _mk_image(self, name, suffix): |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
70 bg = data.load_image('images/button_%s.png' % (suffix,)) |
150
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
71 try: |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
72 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
|
73 except pygame.error: |
0090ecf08544
Use blank placeholder for missing images
Neil Muller <drnlmuller@gmail.com>
parents:
145
diff
changeset
|
74 icon = pygame.Surface((64, 64), pygame.SRCALPHA) |
145
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
75 drawable = ImageDrawable((0, 0, self.WIDTH, self.HEIGHT), bg.copy()) |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
76 drawable.image.blit(icon, (0, 0)) |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
77 return drawable |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
78 |
53277724645b
Science button juggling.
Jeremy Thurgood <firxen@gmail.com>
parents:
143
diff
changeset
|
79 |
143
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
80 class RadioButton(IconButton): |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
81 SELECTED_BUTTON = None |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
82 |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
83 def on_click(self): |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
84 print(RadioButton.CHECK) |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
85 super(RadioButton, self).on_click() |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
86 if self.toggled: |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
87 if RadioButton.SELECTED_BUTTON: |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
88 RadioButton.SELECTED_BUTTON.on_click() |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
89 RadioButton.SELECTED_BUTTON = self |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
90 print("I am selected") |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
91 else: |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
92 RadioButton.SELECTED_BUTTON = None |
821ecb98e888
some icons and toggle button
Rizmari Versfeld <rizziepit@gmail.com>
parents:
142
diff
changeset
|
93 print("I am deselected") |