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