Mercurial > pyntnclick
annotate gamelib/widgets.py @ 324:3476e8f3b100
Fixed mouse and cursor handling.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 28 Aug 2010 13:30:44 +0200 |
parents | 40dd77f71e11 |
children | 837728b3cbf4 |
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 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
4 """Custom Albow widgets""" |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
5 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
6 import textwrap |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
7 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
8 import albow.controls |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
9 from albow.resource import get_font |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
10 from pygame.color import Color |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
11 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
12 from cursor import CursorWidget |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
13 |
79
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
14 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
15 class BoomLabel(albow.controls.Label): |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
16 |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
17 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
|
18 """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
|
19 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
|
20 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
|
21 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
|
22 self.margin = margin |
d7c0a702a0b4
Factor label width setting method out into a custom class (BoomLabel).
Simon Cross <hodgestar+bzr@gmail.com>
parents:
diff
changeset
|
23 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
|
24 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
25 def draw_all(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
26 bg_color = self.bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
27 self.bg_color = None |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
28 if bg_color is not None: |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
29 new_surface = surface.convert_alpha() |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
30 new_surface.fill(bg_color) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
31 surface.blit(new_surface, surface.get_rect()) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
32 albow.controls.Label.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
33 self._draw_all_no_bg(surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
34 self.bg_color = bg_color |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
35 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
36 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
37 pass |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
38 |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
39 class BoomButton(BoomLabel): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
40 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
41 def __init__(self, text, action, screen): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
42 super(BoomLabel, self).__init__(text, font=get_font(20, 'Vera.ttf')) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
43 self.bg_color = (0, 0, 0) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
44 self.action = action |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
45 self.screen = screen |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
46 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
47 def mouse_down(self, event): |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
48 self.action() |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
49 self.screen.state_widget.mouse_move(event) |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
50 |
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
51 def mouse_move(self, event): |
324
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
313
diff
changeset
|
52 self.screen.state.highlight_override = True |
217
146cec58ddd8
Highlight detailed view close button
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
53 |
124 | 54 |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
55 class MessageDialog(BoomLabel, CursorWidget): |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
56 |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
57 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
|
58 CursorWidget.__init__(self, screen) |
313
40dd77f71e11
Computer typeface for JIM.
Jeremy Thurgood <firxen@gmail.com>
parents:
264
diff
changeset
|
59 self.set_style(style) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
60 paras = text.split("\n\n") |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
61 text = "\n".join([textwrap.fill(para, wrap_width) for para in paras]) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
62 albow.controls.Label.__init__(self, text, **kwds) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
63 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
64 def set_style(self, style): |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
65 self.set_margin(5) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
66 self.border_width = 1 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
67 self.border_color = (0, 0, 0) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
68 self.bg_color = (127, 127, 127) |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
69 self.fg_color = (0, 0, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
70 if style == "JIM": |
313
40dd77f71e11
Computer typeface for JIM.
Jeremy Thurgood <firxen@gmail.com>
parents:
264
diff
changeset
|
71 self.set(font=get_font(20, "chintzy.ttf")) |
213
20998c650ce1
Fixed rect_drawer tool and adjusted JIM message background.
Jeremy Thurgood <firxen@gmail.com>
parents:
210
diff
changeset
|
72 self.bg_color = Color(255, 127, 127, 207) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
73 self.fg_color = (0, 0, 0) |
213
20998c650ce1
Fixed rect_drawer tool and adjusted JIM message background.
Jeremy Thurgood <firxen@gmail.com>
parents:
210
diff
changeset
|
74 self.border_color = (127, 0, 0) |
210
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
75 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
76 def draw_all(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
77 BoomLabel.draw_all(self, surface) |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
78 |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
79 def _draw_all_no_bg(self, surface): |
eb101b6fb3dd
Transparent message dialogs.
Jeremy Thurgood <firxen@gmail.com>
parents:
187
diff
changeset
|
80 CursorWidget.draw_all(self, surface) |
122
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
81 |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
82 def mouse_down(self, event): |
d2f84f22def0
Move MessageDialog to widgets
Neil Muller <neil@dip.sun.ac.za>
parents:
79
diff
changeset
|
83 self.dismiss() |
324
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
313
diff
changeset
|
84 |
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
313
diff
changeset
|
85 def cursor_highlight(self): |
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
313
diff
changeset
|
86 return False |