comparison tools/rect_drawer.py @ 162:225e3a4b1e85

Start of a tool to help construct interact rectangles
author Neil Muller <neil@dip.sun.ac.za>
date Wed, 25 Aug 2010 08:42:29 +0200
parents
children 9b3bba5e65f3
comparison
equal deleted inserted replaced
161:5184d30669b5 162:225e3a4b1e85
1 # 10 minute to help working out interactive regions in Suspended Sentence
2
3 import sys
4
5 from albow.root import RootWidget
6 from albow.utils import frame_rect
7 from albow.controls import Image, Button
8 from albow.palette_view import PaletteView
9 from pygame.locals import SWSURFACE
10 import pygame
11 from pygame.colordict import THECOLORS
12
13 class AppImage(Image):
14
15 def __init__(self, filename):
16 image = pygame.image.load(filename)
17 super(AppImage, self).__init__(image)
18 self.mode = 'draw'
19 self.rects = []
20 self.start_pos = None
21 self.end_pos = None
22 self.draw_color = pygame.color.Color('white')
23 self.rect_color = pygame.color.Color('red')
24
25 def draw_mode(self):
26 self.mode = 'draw'
27
28 def del_mode(self):
29 self.mode = 'del'
30 self.start_pos = None
31 self.end_pos = None
32
33 def draw(self, surface):
34 super(AppImage, self).draw(surface)
35 if self.mode == 'draw' and self.start_pos:
36 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1],
37 self.end_pos[0] - self.start_pos[0],
38 self.end_pos[1] - self.start_pos[1])
39 frame_rect(surface, self.draw_color, rect, 2)
40 for (col, rect) in self.rects:
41 frame_rect(surface, col, rect, 1)
42
43 def print_rects(self):
44 for (col, rect) in self.rects:
45 print col, rect
46
47 def mouse_down(self, e):
48 if self.mode == 'del':
49 pos = e.pos
50 cand = None
51 for (col, rect) in self.rects:
52 if rect.collidepoint(pos):
53 cand = (col, rect)
54 break
55 if cand:
56 self.rects.remove(cand)
57 self.invalidate()
58 elif self.mode == 'draw':
59 self.start_pos = e.pos
60 self.end_pos = e.pos
61
62 def mouse_up(self, e):
63 if self.mode == 'draw':
64 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1],
65 self.end_pos[0] - self.start_pos[0],
66 self.end_pos[1] - self.start_pos[1])
67 rect.normalize()
68 self.rects.append((self.rect_color, rect))
69 self.start_pos = self.end_pos = None
70
71 def mouse_drag(self, e):
72 if self.mode == 'draw':
73 self.end_pos = e.pos
74 self.invalidate()
75
76
77 if __name__ == "__main__":
78 pygame.display.init()
79 pygame.font.init()
80 display = pygame.display.set_mode((1000, 600))
81 filename = sys.argv[1]
82 app = RootWidget(display)
83 image = AppImage(filename)
84 app.add(image)
85 draw = Button('Draw Rect', action=image.draw_mode)
86 app.add(draw)
87 draw.rect.move_ip(810, 0)
88 delete = Button('Del Rect', action=image.del_mode)
89 app.add(delete)
90 delete.rect.move_ip(810, 50)
91 print_rects = Button("Print rects", action=image.print_rects)
92 app.add(print_rects)
93 print_rects.rect.move_ip(810, 100)
94 quit_but = Button("Quit", action=app.quit)
95 app.add(quit_but)
96 quit_but.rect.move_ip(810, 500)
97 app.run()