# HG changeset patch # User Neil Muller # Date 1282727970 -7200 # Node ID 9b3bba5e65f3b0852fec3c2e4410d5691dda7cae # Parent b317cdd638c2e084de2b68c06add35dfb759354f add some features to rect helper. now vaguely useful diff -r b317cdd638c2 -r 9b3bba5e65f3 tools/rect_drawer.py --- a/tools/rect_drawer.py Wed Aug 25 10:59:09 2010 +0200 +++ b/tools/rect_drawer.py Wed Aug 25 11:19:30 2010 +0200 @@ -1,4 +1,5 @@ -# 10 minute to help working out interactive regions in Suspended Sentence +# Quickly hacked together helper for working out +# interactive regions in Suspended Sentence import sys @@ -10,17 +11,52 @@ import pygame from pygame.colordict import THECOLORS + +class AppPalette(PaletteView): + + sel_width = 5 + + colors = [ + 'red', 'maroon1', 'palevioletred1', 'moccasin', 'orange', + 'honeydew', 'yellow', 'gold', 'goldenrod', 'brown', + 'blue', 'purple', 'darkorchid4', 'thistle', 'skyblue1', + 'green', 'palegreen1', 'darkgreen', 'aquamarine', 'darkolivegreen', + ] + + def __init__(self, app_image): + self.image = app_image + super(AppPalette, self).__init__((35, 35), 5, 5, margin=2) + self.selection = 0 + self.image.rect_color = pygame.color.Color(self.colors[self.selection]) + + def num_items(self): + return len(self.colors) + + def draw_item(self, surface, item_no, rect): + d = -2 * self.sel_width + r = rect.inflate(d, d) + surface.fill(pygame.color.Color(self.colors[item_no]), r) + + def click_item(self, item_no, event): + self.selection = item_no + self.image.rect_color = pygame.color.Color(self.colors[item_no]) + + def item_is_selected(self, item_no): + return self.selection == item_no + + + class AppImage(Image): def __init__(self, filename): - image = pygame.image.load(filename) - super(AppImage, self).__init__(image) + draw_image = pygame.image.load(filename) + super(AppImage, self).__init__(draw_image) self.mode = 'draw' self.rects = [] self.start_pos = None self.end_pos = None self.draw_color = pygame.color.Color('white') - self.rect_color = pygame.color.Color('red') + self.rect_color = pygame.color.Color('white') def draw_mode(self): self.mode = 'draw' @@ -40,9 +76,20 @@ for (col, rect) in self.rects: frame_rect(surface, col, rect, 1) + def _make_dict(self): + d = {} + for col, rect in self.rects: + d.setdefault(col, []) + d[col].append(rect) + return d + def print_rects(self): - for (col, rect) in self.rects: - print col, rect + d = self._make_dict() + for (num, col) in enumerate(d): + print 'Rect %d : ' % num + for r in d[col]: + print ' (%d, %d, %d, %d)' % (r.x, r.y, r.w, r.h) + print def mouse_down(self, e): if self.mode == 'del': @@ -75,12 +122,14 @@ if __name__ == "__main__": + # FIXME: should load an actual scene with current things, not just a + # background image pygame.display.init() pygame.font.init() display = pygame.display.set_mode((1000, 600)) - filename = sys.argv[1] + imagefile = sys.argv[1] app = RootWidget(display) - image = AppImage(filename) + image = AppImage(imagefile) app.add(image) draw = Button('Draw Rect', action=image.draw_mode) app.add(draw) @@ -88,9 +137,12 @@ delete = Button('Del Rect', action=image.del_mode) app.add(delete) delete.rect.move_ip(810, 50) + palette = AppPalette(image) + palette.rect.move_ip(810, 100) + app.add(palette) print_rects = Button("Print rects", action=image.print_rects) app.add(print_rects) - print_rects.rect.move_ip(810, 100) + print_rects.rect.move_ip(810, 300) quit_but = Button("Quit", action=app.quit) app.add(quit_but) quit_but.rect.move_ip(810, 500)