Mercurial > pyntnclick
comparison tools/rect_drawer.py @ 482:2bef605a0ef2
Refactor to add support for key movement of images
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sun, 29 Aug 2010 14:09:34 +0200 |
parents | 0630a37cb371 |
children | f53aaba58273 |
comparison
equal
deleted
inserted
replaced
477:51055400a9a8 | 482:2bef605a0ef2 |
---|---|
12 from albow.widget import Widget | 12 from albow.widget import Widget |
13 from albow.controls import Button, Image | 13 from albow.controls import Button, Image |
14 from albow.palette_view import PaletteView | 14 from albow.palette_view import PaletteView |
15 from albow.file_dialogs import request_old_filename | 15 from albow.file_dialogs import request_old_filename |
16 from albow.resource import get_font | 16 from albow.resource import get_font |
17 from pygame.locals import SWSURFACE | 17 from pygame.locals import SWSURFACE, K_LEFT, K_RIGHT, K_UP, K_DOWN |
18 import pygame | 18 import pygame |
19 from pygame.colordict import THECOLORS | 19 from pygame.colordict import THECOLORS |
20 | 20 |
21 from gamelib import constants | 21 from gamelib import constants |
22 constants.DEBUG = True | 22 constants.DEBUG = True |
283 def mouse_move(self, e): | 283 def mouse_move(self, e): |
284 if self.mode == 'image' and self.current_image: | 284 if self.mode == 'image' and self.current_image: |
285 self.current_image.rect.topleft = e.pos | 285 self.current_image.rect.topleft = e.pos |
286 self.invalidate() | 286 self.invalidate() |
287 | 287 |
288 def key_down(self, e): | |
289 if self.mode == 'image' and self.current_image: | |
290 # Move the image by 1 pixel | |
291 cur_pos = self.current_image.rect.topleft | |
292 if e.key == K_LEFT: | |
293 self.current_image.rect.topleft = (cur_pos[0] - 1, cur_pos[1]) | |
294 elif e.key == K_RIGHT: | |
295 self.current_image.rect.topleft = (cur_pos[0] + 1, cur_pos[1]) | |
296 elif e.key == K_UP: | |
297 self.current_image.rect.topleft = (cur_pos[0], cur_pos[1] - 1) | |
298 elif e.key == K_DOWN: | |
299 self.current_image.rect.topleft = (cur_pos[0], cur_pos[1] + 1) | |
300 | |
288 def mouse_down(self, e): | 301 def mouse_down(self, e): |
289 if self.mode == 'del': | 302 if self.mode == 'del': |
290 pos = e.pos | 303 pos = e.pos |
291 cand = None | 304 cand = None |
292 # Images are drawn above rectangles, so search those first | 305 # Images are drawn above rectangles, so search those first |
320 cand = image | 333 cand = image |
321 break | 334 break |
322 if cand: | 335 if cand: |
323 self.images.remove(cand) | 336 self.images.remove(cand) |
324 self.current_image = cand | 337 self.current_image = cand |
338 self.current_image.topleft = e.pos | |
325 self.invalidate() | 339 self.invalidate() |
326 | 340 |
327 def mouse_up(self, e): | 341 def mouse_up(self, e): |
328 if self.mode == 'draw': | 342 if self.mode == 'draw': |
329 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1], | 343 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1], |
343 button.align = 'l' | 357 button.align = 'l' |
344 button.rect = pygame.rect.Rect(0, 0, 200, 35) | 358 button.rect = pygame.rect.Rect(0, 0, 200, 35) |
345 button.rect.move_ip(805, ypos) | 359 button.rect.move_ip(805, ypos) |
346 return button | 360 return button |
347 | 361 |
362 class RectApp(RootWidget): | |
363 """Handle the app stuff for the rect drawer""" | |
364 | |
365 def __init__(self, display): | |
366 super(RectApp, self).__init__(display) | |
367 self.image = AppImage(state) | |
368 self.add(self.image) | |
369 draw = make_button('Draw Rect', self.image.draw_mode, 0) | |
370 self.add(draw) | |
371 load_image = make_button("Load image", self.image.image_load, 35) | |
372 self.add(load_image) | |
373 add_image = make_button("Place/Move images", self.image.image_mode, 70) | |
374 add_image.enabled = False | |
375 self.add(add_image) | |
376 self.image.place_image_menu = add_image | |
377 delete = make_button('Delete Objects', self.image.del_mode, 105) | |
378 self.add(delete) | |
379 palette = AppPalette(self.image) | |
380 palette.rect.move_ip(810, 140) | |
381 self.add(palette) | |
382 print_rects = make_button("Print objects", self.image.print_objs, 300) | |
383 self.add(print_rects) | |
384 toggle_things = make_button("Toggle Things", self.image.toggle_things, 335) | |
385 self.add(toggle_things) | |
386 toggle_thing_rects = make_button("Toggle Thing Rects", self.image.toggle_thing_rects, 370) | |
387 self.add(toggle_thing_rects) | |
388 toggle_images = make_button("Toggle Images", self.image.toggle_images, 405) | |
389 self.add(toggle_images) | |
390 toggle_rects = make_button("Toggle Rects", self.image.toggle_rects, 440) | |
391 self.add(toggle_rects) | |
392 toggle_toolbar = make_button("Toggle Toolbar", self.image.toggle_toolbar, 475) | |
393 self.add(toggle_toolbar) | |
394 quit_but = make_button("Quit", self.quit, 565) | |
395 self.add(quit_but) | |
396 | |
397 def key_down(self, event): | |
398 # Dispatch to image widget | |
399 self.image.key_down(event) | |
400 | |
401 | |
348 if __name__ == "__main__": | 402 if __name__ == "__main__": |
349 # FIXME: should load an actual scene with current things, not just a | 403 # FIXME: should load an actual scene with current things, not just a |
350 # background image | 404 # background image |
351 if len(sys.argv) < 2: | 405 if len(sys.argv) < 2: |
352 print 'Please provide a scene name' | 406 print 'Please provide a scene name' |
353 sys.exit(0) | 407 sys.exit(0) |
354 pygame.display.init() | 408 pygame.display.init() |
355 pygame.font.init() | 409 pygame.font.init() |
410 # enable key repeating | |
411 pygame.key.set_repeat(200, 100) | |
356 display = pygame.display.set_mode((1000, 600)) | 412 display = pygame.display.set_mode((1000, 600)) |
357 state = state.initial_state() | 413 state = state.initial_state() |
358 if len(sys.argv) < 3: | 414 if len(sys.argv) < 3: |
359 try: | 415 try: |
360 state.set_current_scene(sys.argv[1]) | 416 state.set_current_scene(sys.argv[1]) |
368 state.set_current_detail(sys.argv[2]) | 424 state.set_current_detail(sys.argv[2]) |
369 state.do_check = None | 425 state.do_check = None |
370 except KeyError: | 426 except KeyError: |
371 print 'Invalid scene name' | 427 print 'Invalid scene name' |
372 sys.exit(1) | 428 sys.exit(1) |
373 app = RootWidget(display) | 429 app = RectApp(display) |
374 image = AppImage(state) | |
375 app.add(image) | |
376 draw = make_button('Draw Rect', image.draw_mode, 0) | |
377 app.add(draw) | |
378 load_image = make_button("Load image", image.image_load, 35) | |
379 app.add(load_image) | |
380 add_image = make_button("Place/Move images", image.image_mode, 70) | |
381 add_image.enabled = False | |
382 app.add(add_image) | |
383 image.place_image_menu = add_image | |
384 delete = make_button('Delete Objects', image.del_mode, 105) | |
385 app.add(delete) | |
386 palette = AppPalette(image) | |
387 palette.rect.move_ip(810, 140) | |
388 app.add(palette) | |
389 print_rects = make_button("Print objects", image.print_objs, 300) | |
390 app.add(print_rects) | |
391 toggle_things = make_button("Toggle Things", image.toggle_things, 335) | |
392 app.add(toggle_things) | |
393 toggle_thing_rects = make_button("Toggle Thing Rects", image.toggle_thing_rects, 370) | |
394 app.add(toggle_thing_rects) | |
395 toggle_images = make_button("Toggle Images", image.toggle_images, 405) | |
396 app.add(toggle_images) | |
397 toggle_rects = make_button("Toggle Rects", image.toggle_rects, 440) | |
398 app.add(toggle_rects) | |
399 toggle_toolbar = make_button("Toggle Toolbar", image.toggle_toolbar, 475) | |
400 app.add(toggle_toolbar) | |
401 quit_but = make_button("Quit", app.quit, 565) | |
402 app.add(quit_but) | |
403 app.run() | 430 app.run() |