Mercurial > pyntnclick
comparison tools/rect_drawer.py @ 165:9b3bba5e65f3
add some features to rect helper. now vaguely useful
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Wed, 25 Aug 2010 11:19:30 +0200 |
parents | 225e3a4b1e85 |
children | a2d041e0ab83 |
comparison
equal
deleted
inserted
replaced
164:b317cdd638c2 | 165:9b3bba5e65f3 |
---|---|
1 # 10 minute to help working out interactive regions in Suspended Sentence | 1 # Quickly hacked together helper for working out |
2 # interactive regions in Suspended Sentence | |
2 | 3 |
3 import sys | 4 import sys |
4 | 5 |
5 from albow.root import RootWidget | 6 from albow.root import RootWidget |
6 from albow.utils import frame_rect | 7 from albow.utils import frame_rect |
8 from albow.palette_view import PaletteView | 9 from albow.palette_view import PaletteView |
9 from pygame.locals import SWSURFACE | 10 from pygame.locals import SWSURFACE |
10 import pygame | 11 import pygame |
11 from pygame.colordict import THECOLORS | 12 from pygame.colordict import THECOLORS |
12 | 13 |
14 | |
15 class AppPalette(PaletteView): | |
16 | |
17 sel_width = 5 | |
18 | |
19 colors = [ | |
20 'red', 'maroon1', 'palevioletred1', 'moccasin', 'orange', | |
21 'honeydew', 'yellow', 'gold', 'goldenrod', 'brown', | |
22 'blue', 'purple', 'darkorchid4', 'thistle', 'skyblue1', | |
23 'green', 'palegreen1', 'darkgreen', 'aquamarine', 'darkolivegreen', | |
24 ] | |
25 | |
26 def __init__(self, app_image): | |
27 self.image = app_image | |
28 super(AppPalette, self).__init__((35, 35), 5, 5, margin=2) | |
29 self.selection = 0 | |
30 self.image.rect_color = pygame.color.Color(self.colors[self.selection]) | |
31 | |
32 def num_items(self): | |
33 return len(self.colors) | |
34 | |
35 def draw_item(self, surface, item_no, rect): | |
36 d = -2 * self.sel_width | |
37 r = rect.inflate(d, d) | |
38 surface.fill(pygame.color.Color(self.colors[item_no]), r) | |
39 | |
40 def click_item(self, item_no, event): | |
41 self.selection = item_no | |
42 self.image.rect_color = pygame.color.Color(self.colors[item_no]) | |
43 | |
44 def item_is_selected(self, item_no): | |
45 return self.selection == item_no | |
46 | |
47 | |
48 | |
13 class AppImage(Image): | 49 class AppImage(Image): |
14 | 50 |
15 def __init__(self, filename): | 51 def __init__(self, filename): |
16 image = pygame.image.load(filename) | 52 draw_image = pygame.image.load(filename) |
17 super(AppImage, self).__init__(image) | 53 super(AppImage, self).__init__(draw_image) |
18 self.mode = 'draw' | 54 self.mode = 'draw' |
19 self.rects = [] | 55 self.rects = [] |
20 self.start_pos = None | 56 self.start_pos = None |
21 self.end_pos = None | 57 self.end_pos = None |
22 self.draw_color = pygame.color.Color('white') | 58 self.draw_color = pygame.color.Color('white') |
23 self.rect_color = pygame.color.Color('red') | 59 self.rect_color = pygame.color.Color('white') |
24 | 60 |
25 def draw_mode(self): | 61 def draw_mode(self): |
26 self.mode = 'draw' | 62 self.mode = 'draw' |
27 | 63 |
28 def del_mode(self): | 64 def del_mode(self): |
38 self.end_pos[1] - self.start_pos[1]) | 74 self.end_pos[1] - self.start_pos[1]) |
39 frame_rect(surface, self.draw_color, rect, 2) | 75 frame_rect(surface, self.draw_color, rect, 2) |
40 for (col, rect) in self.rects: | 76 for (col, rect) in self.rects: |
41 frame_rect(surface, col, rect, 1) | 77 frame_rect(surface, col, rect, 1) |
42 | 78 |
79 def _make_dict(self): | |
80 d = {} | |
81 for col, rect in self.rects: | |
82 d.setdefault(col, []) | |
83 d[col].append(rect) | |
84 return d | |
85 | |
43 def print_rects(self): | 86 def print_rects(self): |
44 for (col, rect) in self.rects: | 87 d = self._make_dict() |
45 print col, rect | 88 for (num, col) in enumerate(d): |
89 print 'Rect %d : ' % num | |
90 for r in d[col]: | |
91 print ' (%d, %d, %d, %d)' % (r.x, r.y, r.w, r.h) | |
92 print | |
46 | 93 |
47 def mouse_down(self, e): | 94 def mouse_down(self, e): |
48 if self.mode == 'del': | 95 if self.mode == 'del': |
49 pos = e.pos | 96 pos = e.pos |
50 cand = None | 97 cand = None |
73 self.end_pos = e.pos | 120 self.end_pos = e.pos |
74 self.invalidate() | 121 self.invalidate() |
75 | 122 |
76 | 123 |
77 if __name__ == "__main__": | 124 if __name__ == "__main__": |
125 # FIXME: should load an actual scene with current things, not just a | |
126 # background image | |
78 pygame.display.init() | 127 pygame.display.init() |
79 pygame.font.init() | 128 pygame.font.init() |
80 display = pygame.display.set_mode((1000, 600)) | 129 display = pygame.display.set_mode((1000, 600)) |
81 filename = sys.argv[1] | 130 imagefile = sys.argv[1] |
82 app = RootWidget(display) | 131 app = RootWidget(display) |
83 image = AppImage(filename) | 132 image = AppImage(imagefile) |
84 app.add(image) | 133 app.add(image) |
85 draw = Button('Draw Rect', action=image.draw_mode) | 134 draw = Button('Draw Rect', action=image.draw_mode) |
86 app.add(draw) | 135 app.add(draw) |
87 draw.rect.move_ip(810, 0) | 136 draw.rect.move_ip(810, 0) |
88 delete = Button('Del Rect', action=image.del_mode) | 137 delete = Button('Del Rect', action=image.del_mode) |
89 app.add(delete) | 138 app.add(delete) |
90 delete.rect.move_ip(810, 50) | 139 delete.rect.move_ip(810, 50) |
140 palette = AppPalette(image) | |
141 palette.rect.move_ip(810, 100) | |
142 app.add(palette) | |
91 print_rects = Button("Print rects", action=image.print_rects) | 143 print_rects = Button("Print rects", action=image.print_rects) |
92 app.add(print_rects) | 144 app.add(print_rects) |
93 print_rects.rect.move_ip(810, 100) | 145 print_rects.rect.move_ip(810, 300) |
94 quit_but = Button("Quit", action=app.quit) | 146 quit_but = Button("Quit", action=app.quit) |
95 app.add(quit_but) | 147 app.add(quit_but) |
96 quit_but.rect.move_ip(810, 500) | 148 quit_but.rect.move_ip(810, 500) |
97 app.run() | 149 app.run() |