comparison pyntnclick/tools/rect_drawer.py @ 689:929b63589c96 pyntnclick

Further fixes
author Neil Muller <neil@dip.sun.ac.za>
date Mon, 13 Feb 2012 18:24:08 +0200
parents 48f68ae7d454
children 4a933444c99b
comparison
equal deleted inserted replaced
688:6892d36dad75 689:929b63589c96
1 # Quickly hacked together helper for working out 1 # Quickly hacked together helper for working out
2 # interactive regions in Suspended Sentence 2 # interactive regions in Suspended Sentence
3 3
4 frame_rect = None 4 def frame_rect(*args):
5 pass
6
5 Image = object 7 Image = object
6 request_old_filename = None 8 request_old_filename = None
7 9
8 from pygame.locals import (K_LEFT, K_RIGHT, K_UP, K_DOWN, 10 from pygame.locals import (K_LEFT, K_RIGHT, K_UP, K_DOWN,
9 K_a, K_t, K_d, K_i, K_r, K_o, K_b, K_z, 11 K_a, K_t, K_d, K_i, K_r, K_o, K_b, K_z,
10 BLEND_RGBA_MIN, SRCALPHA, QUIT) 12 BLEND_RGBA_MIN, SRCALPHA, QUIT,
13 MOUSEBUTTONDOWN, MOUSEMOTION,
14 MOUSEBUTTONUP)
11 import pygame 15 import pygame
12 16
13 import pyntnclick.constants 17 import pyntnclick.constants
14 from pyntnclick.widgets.text import LabelWidget, TextButton 18 from pyntnclick.widgets.text import LabelWidget, TextButton
15 from pyntnclick.widgets.base import Container 19 from pyntnclick.widgets.base import Container
96 self.offset = (0, 0) 100 self.offset = (0, 0)
97 else: 101 else:
98 self.offset = (-self.state.current_scene.OFFSET[0], 102 self.offset = (-self.state.current_scene.OFFSET[0],
99 -self.state.current_scene.OFFSET[1]) 103 -self.state.current_scene.OFFSET[1])
100 self.find_existing_intersects() 104 self.find_existing_intersects()
105 self.add_callback(MOUSEBUTTONDOWN, self.mouse_down)
106 self.add_callback(MOUSEBUTTONUP, self.mouse_down)
107 self.add_callback(MOUSEMOTION, self.mouse_move)
101 108
102 def _get_scene(self): 109 def _get_scene(self):
103 if self.state.current_detail: 110 if self.state.current_detail:
104 return self.state.current_detail 111 return self.state.current_detail
105 else: 112 else:
302 col = (col.r, col.g, col.b) 309 col = (col.r, col.g, col.b)
303 d.setdefault(col, []) 310 d.setdefault(col, [])
304 d[col].append(rect) 311 d[col].append(rect)
305 return d 312 return d
306 313
307 def print_objs(self): 314 def print_objs(self, ev, widget):
308 d = self._make_dict() 315 d = self._make_dict()
309 self.find_intersecting_rects(d) 316 self.find_intersecting_rects(d)
310 for (num, col) in enumerate(d): 317 for (num, col) in enumerate(d):
311 print 'Rect %d : ' % num 318 print 'Rect %d : ' % num
312 for rect in d[col]: 319 for rect in d[col]:
377 offset[0] += constants.zoom_step * x 384 offset[0] += constants.zoom_step * x
378 offset[1] += constants.zoom_step * y 385 offset[1] += constants.zoom_step * y
379 self._check_limits(offset) 386 self._check_limits(offset)
380 self.zoom_offset = tuple(offset) 387 self.zoom_offset = tuple(offset)
381 388
382 def do_mouse_move(self, e): 389 def do_mouse_move(self, ev, widget):
383 pos = self._conv_pos(e.pos) 390 pos = self._conv_pos(ev.pos)
384 if not self.zoom_display: 391 if not self.zoom_display:
385 # Construct zoom offset from mouse pos 392 # Construct zoom offset from mouse pos
386 self._make_zoom_offset(e.pos) 393 self._make_zoom_offset(e.pos)
387 if self.mode == 'image' and self.current_image: 394 if self.mode == 'image' and self.current_image:
388 if self.old_mouse_pos: 395 if self.old_mouse_pos:
433 elif e.key == K_z: 440 elif e.key == K_z:
434 self.toggle_zoom(None, None) 441 self.toggle_zoom(None, None)
435 elif e.key == K_a: 442 elif e.key == K_a:
436 self.toggle_anim(None, None) 443 self.toggle_anim(None, None)
437 444
438 def mouse_down(self, e): 445 def mouse_down(self, ev, widget):
439 pos = self._conv_pos(e.pos) 446 pos = self._conv_pos(ev.pos)
440 if self.mode == 'del': 447 if self.mode == 'del':
441 cand = None 448 cand = None
442 # Images are drawn above rectangles, so search those first 449 # Images are drawn above rectangles, so search those first
443 for image in self.images: 450 for image in self.images:
444 if image.rect.collidepoint(pos): 451 if image.rect.collidepoint(pos):
492 self.current_image = cand 499 self.current_image = cand
493 # We want to move relative to the current mouse pos, so 500 # We want to move relative to the current mouse pos, so
494 self.old_mouse_pos = pos 501 self.old_mouse_pos = pos
495 self.invalidate() 502 self.invalidate()
496 503
497 def mouse_up(self, e): 504 def mouse_up(self, ev, widget):
498 if self.mode == 'draw': 505 if self.mode == 'draw':
499 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1], 506 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1],
500 self.end_pos[0] - self.start_pos[0], 507 self.end_pos[0] - self.start_pos[0],
501 self.end_pos[1] - self.start_pos[1]) 508 self.end_pos[1] - self.start_pos[1])
502 rect.normalize() 509 rect.normalize()
503 self.rects.append((self.rect_color, rect)) 510 self.rects.append((self.rect_color, rect))
504 self.start_pos = self.end_pos = None 511 self.start_pos = self.end_pos = None
505 512
506 def mouse_drag(self, e): 513 def mouse_move(self, ev, widget):
514 # We're only interested in this if left mouse button is down
515 if ev.buttons[0] != 1:
516 return False
507 if self.mode == 'draw': 517 if self.mode == 'draw':
508 self.end_pos = self._conv_pos(e.pos) 518 self.end_pos = self._conv_pos(ev.pos)
509 self.invalidate() 519 return True
510 520
511 def animate(self): 521 def animate(self):
512 if self.draw_anim: 522 if self.draw_anim:
513 self.state.animate() 523 self.state.animate()
514 524