changeset 165:9b3bba5e65f3

add some features to rect helper. now vaguely useful
author Neil Muller <neil@dip.sun.ac.za>
date Wed, 25 Aug 2010 11:19:30 +0200
parents b317cdd638c2
children 0db92b3b5833
files tools/rect_drawer.py
diffstat 1 files changed, 61 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- 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)