Mercurial > boomslang
comparison pyntnclick/tools/rect_drawer.py @ 712:f33dd2093f77 pyntnclick
Hook up image drawing code again
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sun, 05 Aug 2012 14:55:48 +0200 |
parents | 9b6d68ba627e |
children | 62f4f948ff01 |
comparison
equal
deleted
inserted
replaced
711:e9265818a96c | 712:f33dd2093f77 |
---|---|
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 | |
4 Image = object | |
5 | 3 |
6 from pygame.locals import (K_LEFT, K_RIGHT, K_UP, K_DOWN, | 4 from pygame.locals import (K_LEFT, K_RIGHT, K_UP, K_DOWN, |
7 K_a, K_t, K_d, K_i, K_r, K_o, K_b, K_z, | 5 K_a, K_t, K_d, K_i, K_r, K_o, K_b, K_z, |
8 BLEND_RGBA_MIN, SRCALPHA, QUIT, | 6 BLEND_RGBA_MIN, SRCALPHA, QUIT, |
9 MOUSEBUTTONDOWN, MOUSEMOTION, | 7 MOUSEBUTTONDOWN, MOUSEMOTION, |
10 MOUSEBUTTONUP, KEYDOWN) | 8 MOUSEBUTTONUP, KEYDOWN) |
11 import pygame | 9 import pygame |
10 import os | |
12 | 11 |
13 import pyntnclick.constants | 12 import pyntnclick.constants |
14 from pyntnclick.widgets.text import LabelWidget, TextButton | 13 from pyntnclick.widgets.text import LabelWidget, TextButton |
15 from pyntnclick.widgets.base import Container, Button | 14 from pyntnclick.widgets.base import Container, Button, Image |
16 from pyntnclick.widgets.filechooser import FileChooser | 15 from pyntnclick.widgets.filechooser import FileChooser |
17 from pyntnclick.tools.utils import draw_rect_image | 16 from pyntnclick.tools.utils import draw_rect_image |
18 | 17 |
19 | 18 |
20 class RectDrawerError(Exception): | 19 class RectDrawerError(Exception): |
266 """Tweaked image drawing to avoid albow's centring the image in the | 265 """Tweaked image drawing to avoid albow's centring the image in the |
267 subsurface""" | 266 subsurface""" |
268 surf = pygame.surface.Surface((cropped_rect.w, cropped_rect.h), | 267 surf = pygame.surface.Surface((cropped_rect.w, cropped_rect.h), |
269 SRCALPHA).convert_alpha() | 268 SRCALPHA).convert_alpha() |
270 frame = surf.get_rect() | 269 frame = surf.get_rect() |
271 imsurf = image.get_image().convert_alpha() | 270 imsurf = image.image.convert_alpha() |
272 r = imsurf.get_rect() | 271 r = imsurf.get_rect() |
273 r.topleft = frame.topleft | 272 r.topleft = frame.topleft |
274 if self.trans_images: | 273 if self.trans_images: |
275 surf.fill(pygame.color.Color(255, 255, 255, 96)) | 274 surf.fill(pygame.color.Color(255, 255, 255, 96)) |
276 surf.blit(imsurf, r, None, BLEND_RGBA_MIN) | 275 surf.blit(imsurf, r, None, BLEND_RGBA_MIN) |
363 print ' (%d, %d, %d, %d),' % (r.x, r.y, r.w, r.h) | 362 print ' (%d, %d, %d, %d),' % (r.x, r.y, r.w, r.h) |
364 print | 363 print |
365 print | 364 print |
366 | 365 |
367 def image_load(self, ev, widget): | 366 def image_load(self, ev, widget): |
368 image_path = '.' | 367 filechooser = FileChooser((0, 0), self.gd, os.curdir, |
369 filechooser = FileChooser((0, 0), self.gd, image_path) | 368 self.do_load_image) |
370 self._parent.add(filechooser) | 369 self._parent.add(filechooser) |
371 self._parent.modal = True | 370 |
372 #try: | 371 def do_load_image(self, filename): |
373 # image_data = pygame.image.load(imagename) | 372 try: |
374 # self.current_image = Image(image_data) | 373 self.current_image = Image((0, 0), self.gd, |
375 # self.place_image_menu.enabled = True | 374 pygame.image.load(filename)) |
376 # # ensure we're off screen to start | 375 self.place_image_menu.enabled = True |
377 # self.current_image.rect = image_data.get_rect() \ | 376 self.current_image.rect = self.current_image.rect.move( |
378 # .move(constants.screen[0] + constants.menu_width, | 377 constants.screen[0] + constants.menu_width, |
379 # constants.screen[1]) | 378 constants.screen[1]) |
380 #except pygame.error, e: | 379 self.image_mode(None, None) |
381 # print 'Unable to load image %s' % e | 380 except pygame.error, e: |
381 print 'Unable to load image %s (reason %s)' % (filename, e) | |
382 | 382 |
383 def image_mode(self, ev, widget): | 383 def image_mode(self, ev, widget): |
384 self.mode = 'image' | 384 self.mode = 'image' |
385 self.start_pos = None | 385 self.start_pos = None |
386 self.end_pos = None | 386 self.end_pos = None |
420 offset = list(self.zoom_offset) | 420 offset = list(self.zoom_offset) |
421 offset[0] += constants.zoom_step * x | 421 offset[0] += constants.zoom_step * x |
422 offset[1] += constants.zoom_step * y | 422 offset[1] += constants.zoom_step * y |
423 self._check_limits(offset) | 423 self._check_limits(offset) |
424 self.zoom_offset = tuple(offset) | 424 self.zoom_offset = tuple(offset) |
425 | |
426 def do_mouse_move(self, ev, widget): | |
427 pos = self._conv_pos(ev.pos) | |
428 if not self.zoom_display: | |
429 # Construct zoom offset from mouse pos | |
430 self._make_zoom_offset(ev.pos) | |
431 if self.mode == 'image' and self.current_image: | |
432 if self.old_mouse_pos: | |
433 delta = (pos[0] - self.old_mouse_pos[0], | |
434 pos[1] - self.old_mouse_pos[1]) | |
435 self.current_image.rect.center = ( | |
436 self.current_image.rect.center[0] + delta[0], | |
437 self.current_image.rect.center[1] + delta[1]) | |
438 else: | |
439 self.current_image.rect.center = pos | |
440 self.invalidate() | |
441 self.old_mouse_pos = pos | |
442 | 425 |
443 def key_down(self, ev, widget): | 426 def key_down(self, ev, widget): |
444 if self.mode == 'image' and self.current_image: | 427 if self.mode == 'image' and self.current_image: |
445 # Move the image by 1 pixel | 428 # Move the image by 1 pixel |
446 cur_pos = self.current_image.rect.center | 429 cur_pos = self.current_image.rect.center |
546 rect.normalize() | 529 rect.normalize() |
547 self.rects.append((self.rect_color, rect)) | 530 self.rects.append((self.rect_color, rect)) |
548 self.start_pos = self.end_pos = None | 531 self.start_pos = self.end_pos = None |
549 | 532 |
550 def mouse_move(self, ev, widget): | 533 def mouse_move(self, ev, widget): |
551 # We're only interested in this if left mouse button is down | 534 # We're only interested in this if left mouse button is down or we've |
552 if ev.buttons[0] != 1: | 535 # got and image |
553 return False | 536 if self.mode == 'image' and self.current_image: |
554 if self.mode == 'draw': | 537 pos = self._conv_pos(ev.pos) |
538 if self.old_mouse_pos: | |
539 delta = (pos[0] - self.old_mouse_pos[0], | |
540 pos[1] - self.old_mouse_pos[1]) | |
541 self.current_image.rect.center = ( | |
542 self.current_image.rect.center[0] + delta[0], | |
543 self.current_image.rect.center[1] + delta[1]) | |
544 else: | |
545 self.current_image.rect.center = pos | |
546 self.invalidate() | |
547 self.old_mouse_pos = pos | |
548 return True | |
549 elif ev.buttons[0] == 1 and self.mode == 'draw': | |
555 self.end_pos = self._conv_pos(ev.pos) | 550 self.end_pos = self._conv_pos(ev.pos) |
556 return True | 551 return True |
552 return False | |
557 | 553 |
558 def animate(self): | 554 def animate(self): |
559 if self.draw_anim: | 555 if self.draw_anim: |
560 self.state.animate() | 556 self.state.animate() |
561 | 557 |