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