Mercurial > boomslang
annotate tools/rect_drawer.py @ 275:d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Fri, 27 Aug 2010 21:57:13 +0200 |
parents | e4ea9def56b2 |
children | 75f4ee46ac58 |
rev | line source |
---|---|
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
1 # Quickly hacked together helper for working out |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
2 # interactive regions in Suspended Sentence |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
3 |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
4 import sys |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
5 import os.path |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
6 |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
7 script_path = os.path.realpath(os.path.dirname(os.path.dirname(__file__))) |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
8 sys.path.append(script_path) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
9 |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
10 from albow.root import RootWidget |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
11 from albow.utils import frame_rect |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
12 from albow.widget import Widget |
200 | 13 from albow.controls import Button, Image |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
14 from albow.palette_view import PaletteView |
199 | 15 from albow.file_dialogs import request_old_filename |
243
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
16 from albow.resource import get_font |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
17 from pygame.locals import SWSURFACE |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
18 import pygame |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
19 from pygame.colordict import THECOLORS |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
20 |
250 | 21 from gamelib import constants |
22 constants.DEBUG = True | |
23 | |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
24 from gamelib.state import initial_state |
243
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
25 from gamelib.widgets import BoomLabel |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
26 |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
27 |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
28 |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
29 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
30 class AppPalette(PaletteView): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
31 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
32 sel_width = 5 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
33 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
34 colors = [ |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
35 'red', 'maroon1', 'palevioletred1', 'moccasin', 'orange', |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
36 'honeydew', 'yellow', 'gold', 'goldenrod', 'brown', |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
37 'blue', 'purple', 'darkorchid4', 'thistle', 'skyblue1', |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
38 'green', 'palegreen1', 'darkgreen', 'aquamarine', 'darkolivegreen', |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
39 ] |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
40 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
41 def __init__(self, app_image): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
42 self.image = app_image |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
43 super(AppPalette, self).__init__((35, 35), 5, 5, margin=2) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
44 self.selection = 0 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
45 self.image.rect_color = pygame.color.Color(self.colors[self.selection]) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
46 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
47 def num_items(self): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
48 return len(self.colors) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
49 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
50 def draw_item(self, surface, item_no, rect): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
51 d = -2 * self.sel_width |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
52 r = rect.inflate(d, d) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
53 surface.fill(pygame.color.Color(self.colors[item_no]), r) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
54 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
55 def click_item(self, item_no, event): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
56 self.selection = item_no |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
57 self.image.rect_color = pygame.color.Color(self.colors[item_no]) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
58 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
59 def item_is_selected(self, item_no): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
60 return self.selection == item_no |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
61 |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
62 |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
63 class AppImage(Widget): |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
64 |
181
f98bc17f5e67
Add attributes for drawing rects
Neil Muller <neil@dip.sun.ac.za>
parents:
179
diff
changeset
|
65 rect_thick = 3 |
f98bc17f5e67
Add attributes for drawing rects
Neil Muller <neil@dip.sun.ac.za>
parents:
179
diff
changeset
|
66 draw_thick = 1 |
f98bc17f5e67
Add attributes for drawing rects
Neil Muller <neil@dip.sun.ac.za>
parents:
179
diff
changeset
|
67 |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
68 def __init__(self, state): |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
69 self.state = state |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
70 super(AppImage, self).__init__(pygame.rect.Rect(0, 0, 800, 600)) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
71 self.mode = 'draw' |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
72 self.rects = [] |
200 | 73 self.images = [] |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
74 self.start_pos = None |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
75 self.end_pos = None |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
76 self.draw_color = pygame.color.Color('white') |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
77 self.rect_color = pygame.color.Color('white') |
200 | 78 self.current_image = None |
199 | 79 self.place_image_menu = None |
243
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
80 self.close_button = BoomLabel('Close', font=get_font(20, 'Vera.ttf')) |
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
81 self.close_button.fg_color = (0, 0, 0) |
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
82 self.close_button.bg_color = (0, 0, 0) |
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
83 if self.state.current_detail: |
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
84 w, h = self.state.current_detail.get_detail_size() |
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
85 rect = pygame.rect.Rect(0, 0, w, h) |
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
86 self.close_button.rect.midbottom = rect.midbottom |
0ea4661d134c
Show close button area in helper
Neil Muller <neil@dip.sun.ac.za>
parents:
238
diff
changeset
|
87 self.add(self.close_button) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
88 |
268
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
89 self.draw_rects = True |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
90 self.draw_things = True |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
91 self.draw_images = True |
275
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
92 self.draw_toolbar = True |
268
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
93 |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
94 def toggle_things(self): |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
95 self.draw_things = not self.draw_things |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
96 |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
97 def toggle_images(self): |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
98 self.draw_images = not self.draw_images |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
99 |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
100 def toggle_rects(self): |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
101 self.draw_rects = not self.draw_rects |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
102 |
275
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
103 def toggle_toolbar(self): |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
104 self.draw_toolbar = not self.draw_toolbar |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
105 |
268
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
106 |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
107 def draw_mode(self): |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
108 self.mode = 'draw' |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
109 |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
110 def del_mode(self): |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
111 self.mode = 'del' |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
112 self.start_pos = None |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
113 self.end_pos = None |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
114 |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
115 def draw(self, surface): |
238
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
116 if self.state.current_detail: |
268
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
117 if self.draw_things: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
118 self.state.draw_detail(surface, None) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
119 else: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
120 self.state.current_detail.draw_background(surface) |
238
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
121 else: |
268
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
122 if self.draw_things: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
123 self.state.draw(surface, None) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
124 else: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
125 self.state.current_scene.draw_background(surface) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
126 if self.mode == 'draw' and self.start_pos and self.draw_rects: |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
127 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1], |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
128 self.end_pos[0] - self.start_pos[0], |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
129 self.end_pos[1] - self.start_pos[1]) |
181
f98bc17f5e67
Add attributes for drawing rects
Neil Muller <neil@dip.sun.ac.za>
parents:
179
diff
changeset
|
130 frame_rect(surface, self.draw_color, rect, self.draw_thick) |
268
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
131 if self.draw_rects: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
132 for (col, rect) in self.rects: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
133 frame_rect(surface, col, rect, self.rect_thick) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
134 if self.draw_images: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
135 for image in self.images: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
136 if image.rect.colliderect(surface.get_rect()): |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
137 cropped_rect = image.rect.clip(surface.get_rect()) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
138 sub = surface.subsurface(cropped_rect) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
139 image.draw(sub) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
140 else: |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
141 print 'image outside surface', image |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
142 if self.current_image and self.mode == 'image': |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
143 if self.current_image.rect.colliderect(surface.get_rect()): |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
144 cropped_rect = self.current_image.rect.clip(surface.get_rect()) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
145 sub = surface.subsurface(cropped_rect) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
146 self.current_image.draw(sub) |
275
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
147 if self.draw_toolbar: |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
148 toolbar_rect = pygame.rect.Rect(0, 550, 800, 50) |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
149 tb_surf = surface.subsurface(0, 550, 800, 50).convert_alpha() |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
150 tb_surf.fill(Color(127, 0, 0, 127)) |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
151 surface.blit(tb_surf) |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
152 frame_rect(surface, (127, 0, 0), toolbar_rect, 5) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
153 |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
154 def _make_dict(self): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
155 d = {} |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
156 for col, rect in self.rects: |
213
20998c650ce1
Fixed rect_drawer tool and adjusted JIM message background.
Jeremy Thurgood <firxen@gmail.com>
parents:
200
diff
changeset
|
157 col = (col.r, col.g, col.b) |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
158 d.setdefault(col, []) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
159 d[col].append(rect) |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
160 return d |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
161 |
198
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
162 def print_objs(self): |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
163 d = self._make_dict() |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
164 for (num, col) in enumerate(d): |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
165 print 'Rect %d : ' % num |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
166 for r in d[col]: |
179
39f75faf16cb
Add trailing , for copy-n-paste
Neil Muller <neil@dip.sun.ac.za>
parents:
174
diff
changeset
|
167 print ' (%d, %d, %d, %d),' % (r.x, r.y, r.w, r.h) |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
168 print |
200 | 169 for i, image in enumerate(self.images): |
170 print 'Image %d' % i | |
171 r = image.rect | |
172 print ' (%d, %d, %d, %d),' % (r.x, r.y, r.w, r.h) | |
173 print | |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
174 |
199 | 175 def image_load(self): |
176 image_path= '%s/Resources/images/%s' % (script_path, self.state.current_scene.FOLDER) | |
177 imagename = request_old_filename(directory=image_path) | |
178 try: | |
200 | 179 image_data = pygame.image.load(imagename) |
180 self.current_image = Image(image_data) | |
199 | 181 self.place_image_menu.enabled = True |
200 | 182 # ensure we're off screen to start |
183 self.current_image.rect = image_data.get_rect().move(1000, 600) | |
199 | 184 except pygame.error, e: |
185 print 'Unable to load image %s' % e | |
198
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
186 |
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
187 def image_mode(self): |
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
188 self.mode = 'image' |
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
189 self.start_pos = None |
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
190 self.end_pos = None |
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
191 |
200 | 192 def mouse_move(self, e): |
193 if self.mode == 'image' and self.current_image: | |
194 self.current_image.rect.topleft = e.pos | |
195 self.invalidate() | |
196 | |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
197 def mouse_down(self, e): |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
198 if self.mode == 'del': |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
199 pos = e.pos |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
200 cand = None |
200 | 201 # Images are drawn above rectangles, so search those first |
202 for image in self.images: | |
203 if image.rect.collidepoint(pos): | |
204 cand = image | |
205 break | |
206 if cand: | |
207 self.images.remove(cand) | |
208 self.invalidate() | |
209 return | |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
210 for (col, rect) in self.rects: |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
211 if rect.collidepoint(pos): |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
212 cand = (col, rect) |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
213 break |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
214 if cand: |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
215 self.rects.remove(cand) |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
216 self.invalidate() |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
217 elif self.mode == 'draw': |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
218 self.start_pos = e.pos |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
219 self.end_pos = e.pos |
200 | 220 elif self.mode == 'image': |
221 if self.current_image: | |
222 self.images.append(self.current_image) | |
223 self.current_image = None | |
224 self.invalidate() | |
225 else: | |
226 cand = None | |
227 for image in self.images: | |
228 if image.rect.collidepoint(e.pos): | |
229 cand = image | |
230 break | |
231 if cand: | |
232 self.images.remove(cand) | |
233 self.current_image = cand | |
234 self.invalidate() | |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
235 |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
236 def mouse_up(self, e): |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
237 if self.mode == 'draw': |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
238 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1], |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
239 self.end_pos[0] - self.start_pos[0], |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
240 self.end_pos[1] - self.start_pos[1]) |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
241 rect.normalize() |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
242 self.rects.append((self.rect_color, rect)) |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
243 self.start_pos = self.end_pos = None |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
244 |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
245 def mouse_drag(self, e): |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
246 if self.mode == 'draw': |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
247 self.end_pos = e.pos |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
248 self.invalidate() |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
249 |
197 | 250 def make_button(text, action, ypos): |
251 button = Button(text, action=action) | |
252 button.align = 'l' | |
253 button.rect = pygame.rect.Rect(0, 0, 200, 40) | |
254 button.rect.move_ip(805, ypos) | |
255 return button | |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
256 |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
257 if __name__ == "__main__": |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
258 # FIXME: should load an actual scene with current things, not just a |
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
259 # background image |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
260 if len(sys.argv) < 2: |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
261 print 'Please provide a scene name' |
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
262 sys.exit(0) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
263 pygame.display.init() |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
264 pygame.font.init() |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
265 display = pygame.display.set_mode((1000, 600)) |
196 | 266 state = initial_state() |
238
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
267 if len(sys.argv) < 3: |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
268 try: |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
269 state.set_current_scene(sys.argv[1]) |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
270 state.do_check = None |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
271 except KeyError: |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
272 print 'Invalid scene name' |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
273 sys.exit(1) |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
274 else: |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
275 try: |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
276 state.set_current_scene(sys.argv[1]) |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
277 state.set_current_detail(sys.argv[2]) |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
278 state.do_check = None |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
279 except KeyError: |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
280 print 'Invalid scene name' |
2510e0b0e901
Add detail view support to helper
Neil Muller <neil@dip.sun.ac.za>
parents:
213
diff
changeset
|
281 sys.exit(1) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
282 app = RootWidget(display) |
174
a2d041e0ab83
Make tool use scenes, not images
Neil Muller <neil@dip.sun.ac.za>
parents:
165
diff
changeset
|
283 image = AppImage(state) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
284 app.add(image) |
197 | 285 draw = make_button('Draw Rect', image.draw_mode, 0) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
286 app.add(draw) |
198
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
287 load_image = make_button("Load image", image.image_load, 40) |
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
288 app.add(load_image) |
200 | 289 add_image = make_button("Place/Move images", image.image_mode, 80) |
199 | 290 add_image.enabled = False |
198
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
291 app.add(add_image) |
199 | 292 image.place_image_menu = add_image |
198
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
293 delete = make_button('Delete Objects', image.del_mode, 120) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
294 app.add(delete) |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
295 palette = AppPalette(image) |
198
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
296 palette.rect.move_ip(810, 160) |
165
9b3bba5e65f3
add some features to rect helper. now vaguely useful
Neil Muller <neil@dip.sun.ac.za>
parents:
162
diff
changeset
|
297 app.add(palette) |
198
e73d78d6dd83
Stubs for ftuture functionality
Neil Muller <neil@dip.sun.ac.za>
parents:
197
diff
changeset
|
298 print_rects = make_button("Print objects", image.print_objs, 320) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
299 app.add(print_rects) |
268
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
300 toggle_things = make_button("Toggle Things", image.toggle_things, 360) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
301 app.add(toggle_things) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
302 toggle_images = make_button("Toggle Images", image.toggle_images, 400) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
303 app.add(toggle_images) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
304 toggle_rects = make_button("Toggle Rects", image.toggle_rects, 440) |
e4ea9def56b2
Add some toggle options to helper script
Neil Muller <neil@dip.sun.ac.za>
parents:
250
diff
changeset
|
305 app.add(toggle_rects) |
275
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
306 toggle_toolbar = make_button("Toggle Toolbar", image.toggle_toolbar, 480) |
d78ce15bccc8
Crew quarters background and toolbar on the rect tool.
Jeremy Thurgood <firxen@gmail.com>
parents:
268
diff
changeset
|
307 app.add(toggle_toolbar) |
197 | 308 quit_but = make_button("Quit", app.quit, 560) |
162
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
309 app.add(quit_but) |
225e3a4b1e85
Start of a tool to help construct interact rectangles
Neil Muller <neil@dip.sun.ac.za>
parents:
diff
changeset
|
310 app.run() |