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()