Mercurial > boomslang
annotate pyntnclick/widgets/__init__.py @ 673:f67bc162d69e pyntnclick
Working resume button
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Sun, 12 Feb 2012 18:44:41 +0200 |
parents | 2703924c8c70 |
children | 506568326790 |
rev | line source |
---|---|
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
1 # widgets.py |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
2 # Copyright Boomslang team, 2010 (see COPYING File) |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
3 |
555
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
551
diff
changeset
|
4 # XXX: This should be deleted when albow is gone |
c0474fe18b96
Copy in widgets from mamba (currently unused)
Stefano Rivera <stefano@rivera.za.net>
parents:
551
diff
changeset
|
5 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
6 """Custom Albow widgets""" |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
7 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
8 import textwrap |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
9 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
10 from pygame.color import Color |
358
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
11 from pygame.rect import Rect |
528
0ce08d5e2acb
pyflakes-induced cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
476
diff
changeset
|
12 from pygame.draw import lines as draw_lines |
407
c7a6846262e3
Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents:
398
diff
changeset
|
13 from pygame import mouse |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
14 |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
15 from pyntnclick.widgets.base import Widget |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
16 |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
555
diff
changeset
|
17 # XXX: Need a way to get at the constants. |
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
555
diff
changeset
|
18 from pyntnclick.constants import GameConstants |
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
555
diff
changeset
|
19 BUTTON_SIZE = GameConstants().button_size |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
20 # XXX: Needs a way to get at resource: |
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
21 from pyntnclick.resources import Resources |
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
22 get_image = Resources("Resources").get_image |
576
1b1ab71535bd
Classify constants, which involves a whole bunch of XXX comments
Stefano Rivera <stefano@rivera.za.net>
parents:
555
diff
changeset
|
23 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
24 |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
25 class BoomLabel(Widget): # WAS: albow.controls.Label): |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
26 |
374
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
27 trim_line_top = 0 |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
28 |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
29 def __init__(self, text, width=None, **kwds): |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
30 albow.controls.Label.__init__(self, text, width, **kwds) |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
31 w, h = self.size |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
32 h -= self.trim_line_top * len(self.text.split('\n')) |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
33 self.size = (w, h) |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
34 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
35 def set_margin(self, margin): |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
36 """Add a set_margin method that recalculates the label size""" |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
37 old_margin = self.margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
38 w, h = self.size |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
39 d = margin - old_margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
40 self.margin = margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
41 self.size = (w + 2 * d, h + 2 * d) |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
42 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
43 def draw_all(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
44 bg_color = self.bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
45 self.bg_color = None |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
46 if bg_color is not None: |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
47 new_surface = surface.convert_alpha() |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
48 new_surface.fill(bg_color) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
49 surface.blit(new_surface, surface.get_rect()) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
50 albow.controls.Label.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
51 self._draw_all_no_bg(surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
52 self.bg_color = bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
53 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
54 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
55 pass |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
56 |
374
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
57 def draw_with(self, surface, fg, _bg=None): |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
58 m = self.margin |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
59 align = self.align |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
60 width = surface.get_width() |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
61 y = m |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
62 lines = self.text.split("\n") |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
63 font = self.font |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
64 dy = font.get_linesize() - self.trim_line_top |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
65 for line in lines: |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
66 image = font.render(line, True, fg) |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
67 r = image.get_rect() |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
68 image = image.subsurface(r.clip(r.move(0, self.trim_line_top))) |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
69 r.top = y |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
70 if align == 'l': |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
71 r.left = m |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
72 elif align == 'r': |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
73 r.right = width - m |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
74 else: |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
75 r.centerx = width // 2 |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
76 surface.blit(image, r) |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
77 y += dy |
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
78 |
358
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
79 |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
80 class BoomButton(BoomLabel): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
81 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
82 def __init__(self, text, action, screen): |
535 | 83 super(BoomButton, self).__init__(text, font=get_font(20, 'Vera.ttf'), |
84 margin=4) | |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
85 self.bg_color = (0, 0, 0) |
465
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
86 self._frame_color = Color(50, 50, 50) |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
87 self.action = action |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
88 self.screen = screen |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
89 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
90 def mouse_down(self, event): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
91 self.action() |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
92 self.screen.state_widget.mouse_move(event) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
93 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
94 def mouse_move(self, event): |
603
3ce19d33b51f
Rename state to game to not cause confusion with the other state
Neil Muller <neil@dip.sun.ac.za>
parents:
585
diff
changeset
|
95 self.screen.game.highlight_override = True |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
96 |
465
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
97 def draw(self, surface): |
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
98 super(BoomButton, self).draw(surface) |
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
99 r = surface.get_rect() |
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
100 w = 2 |
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
101 top, bottom, left, right = r.top, r.bottom, r.left, r.right |
528
0ce08d5e2acb
pyflakes-induced cleanup.
Jeremy Thurgood <firxen@gmail.com>
parents:
476
diff
changeset
|
102 draw_lines(surface, self._frame_color, False, [ |
535 | 103 (left, bottom), (left, top), (right - w, top), (right - w, bottom) |
465
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
104 ], w) |
03dcb25d8370
Slightly prettier Close button labels.
Simon Cross <hodgestar+bzr@gmail.com>
parents:
450
diff
changeset
|
105 |
124 | 106 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
107 class MessageDialog(Widget): # WAS: BoomLabel, CursorWidget): |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
108 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
109 def __init__(self, screen, text, wrap_width, style=None, **kwds): |
187
fbfd8e748ac0
Remove screen reference from State.
Jeremy Thurgood <firxen@gmail.com>
parents:
124
diff
changeset
|
110 CursorWidget.__init__(self, screen) |
313
40dd77f71e11
Computer typeface for JIM.
Jeremy Thurgood <firxen@gmail.com>
parents:
264
diff
changeset
|
111 self.set_style(style) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
112 paras = text.split("\n\n") |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
113 text = "\n".join([textwrap.fill(para, wrap_width) for para in paras]) |
374
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
114 BoomLabel.__init__(self, text, **kwds) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
115 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
116 def set_style(self, style): |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
117 self.set_margin(5) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
118 self.border_width = 1 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
119 self.border_color = (0, 0, 0) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
120 self.bg_color = (127, 127, 127) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
121 self.fg_color = (0, 0, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
122 if style == "JIM": |
356
92cc50d7ce7a
New (Fontforge) Monospace font for JIM
Stefano Rivera <stefano@rivera.za.net>
parents:
351
diff
changeset
|
123 self.set(font=get_font(20, "Monospace.ttf")) |
374
277a7a0c2cea
Adjust labels for dodgy fonts.
Jeremy Thurgood <firxen@gmail.com>
parents:
358
diff
changeset
|
124 self.trim_line_top = 10 |
398
1555677d86f6
Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
376
diff
changeset
|
125 self.bg_color = Color(255, 175, 127, 191) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
126 self.fg_color = (0, 0, 0) |
376
41ee3fc71404
Tweaks to text and JIM background.
Jeremy Thurgood <firxen@gmail.com>
parents:
374
diff
changeset
|
127 self.border_color = (127, 15, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
128 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
129 def draw_all(self, surface): |
398
1555677d86f6
Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
376
diff
changeset
|
130 root_surface = self.get_root().surface |
1555677d86f6
Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
376
diff
changeset
|
131 overlay = root_surface.convert_alpha() |
1555677d86f6
Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
376
diff
changeset
|
132 overlay.fill(Color(0, 0, 0, 191)) |
1555677d86f6
Dim non-interactive screen regions for "modal" stuff.
Jeremy Thurgood <firxen@gmail.com>
parents:
376
diff
changeset
|
133 root_surface.blit(overlay, (0, 0)) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
134 BoomLabel.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
135 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
136 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
137 CursorWidget.draw_all(self, surface) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
138 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
139 def mouse_down(self, event): |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
140 self.dismiss() |
407
c7a6846262e3
Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents:
398
diff
changeset
|
141 self.screen.state_widget._mouse_move(mouse.get_pos()) |
c7a6846262e3
Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents:
398
diff
changeset
|
142 for widget in self.screen.state_widget.subwidgets: |
c7a6846262e3
Fix cursor handling after message dismissal.
Jeremy Thurgood <firxen@gmail.com>
parents:
398
diff
changeset
|
143 widget._mouse_move(mouse.get_pos()) |
324
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
313
diff
changeset
|
144 |
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
313
diff
changeset
|
145 def cursor_highlight(self): |
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
313
diff
changeset
|
146 return False |
358
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
147 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
148 |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
149 class HandButton(Widget): # WAS: albow.controls.Image): |
358
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
150 """The fancy hand button for the widget""" |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
151 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
152 def __init__(self, action): |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
153 this_image = get_image('items', 'hand.png') |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
154 albow.controls.Image.__init__(self, image=this_image) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
155 self.action = action |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
156 self.set_rect(Rect(0, 0, BUTTON_SIZE, BUTTON_SIZE)) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
157 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
158 def mouse_down(self, event): |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
159 self.action() |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
160 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
161 |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
162 class PopupMenuButton(Widget): # WAS: albow.controls.Button): |
358
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
163 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
164 def __init__(self, text, action): |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
165 albow.controls.Button.__init__(self, text, action) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
166 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
167 self.font = get_font(16, 'Vera.ttf') |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
168 self.set_rect(Rect(0, 0, BUTTON_SIZE, BUTTON_SIZE)) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
169 self.margin = (BUTTON_SIZE - self.font.get_linesize()) / 2 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
170 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
171 |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
172 class PopupMenu(Widget): # WAS: albow.menu.Menu, CursorWidget): |
358
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
173 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
174 def __init__(self, screen): |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
175 CursorWidget.__init__(self, screen) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
176 self.screen = screen |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
177 items = [ |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
178 ('Quit Game', 'quit'), |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
179 ('Exit to Main Menu', 'main_menu'), |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
180 ] |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
181 # albow.menu.Menu ignores title string |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
182 albow.menu.Menu.__init__(self, None, items) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
183 self.font = get_font(16, 'Vera.ttf') |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
184 |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
185 def show_menu(self): |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
186 """Call present, with the correct position""" |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
187 item_height = self.font.get_linesize() |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
188 menu_top = 600 - (len(self.items) * item_height + BUTTON_SIZE) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
189 item = self.present(self.shell, (0, menu_top)) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
190 if item > -1: |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
191 # A menu item needs to be invoked |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
192 self.invoke_item(item) |
760f6a318d2e
Moved some widgets around.
Jeremy Thurgood <firxen@gmail.com>
parents:
356
diff
changeset
|
193 |
535 | 194 |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
627
diff
changeset
|
195 class BoomImageButton(Widget): # WAS: albow.controls.Image): |
450
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
196 """The fancy image button for the screens""" |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
197 |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
198 FOLDER = None |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
199 |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
200 def __init__(self, filename, x, y, action, enable=None): |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
201 this_image = get_image(self.FOLDER, filename) |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
202 albow.controls.Image.__init__(self, image=this_image) |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
203 self.action = action |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
204 self.set_rect(Rect((x, y), this_image.get_size())) |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
205 self.enable = enable |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
206 |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
207 def draw(self, surface): |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
208 if self.is_enabled(): |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
209 surface.blit(self.get_image(), self.get_rect()) |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
210 |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
211 def mouse_down(self, event): |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
212 if self.is_enabled(): |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
213 self.action() |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
214 |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
215 def is_enabled(self): |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
216 if self.enable: |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
217 return self.enable() |
ece69836f00a
Image buttons for game over screen
Neil Muller <neil@dip.sun.ac.za>
parents:
442
diff
changeset
|
218 return True |