Mercurial > boomslang
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 |