Kaynağa Gözat

Started debugging test draw program.

Taddeus Kroes 14 yıl önce
ebeveyn
işleme
8277b925e2
1 değiştirilmiş dosya ile 17 ekleme ve 26 silme
  1. 17 26
      src/draw.py

+ 17 - 26
src/draw.py

@@ -3,7 +3,7 @@ import pygame, sys, time
 from touch import add, MultiTouchListener
 from math import degrees, cos, sin
 
-from events import RotateEvent
+from events import Rotate
 
 pygame.init()
 
@@ -16,16 +16,12 @@ BG_COLOR = 0, 0, 0
 LINE_COLOR = 128, 128, 128
 CIRCLE_COLOR = 255, 255, 255
 RECT_COLOR = 0, 200, 0
-RECT_SIZE = 150, 100
 RECT_POS = W / 2, H / 2
+RECT_SIZE = W / 6., H / 6.
 
 
 # Create canvas GUI in the current thread
 screen = pygame.display.set_mode((W, H))
-rotations = [RotateEvent(W / 2, H / 2, 70, 2)]
-#rotations = []
-#x, y, w, h = RECT_SIZE
-#rect = [(x, y), (x, y + h), (x + w, y + h), (x + w, y)]
 
 
 def rotate_point(point, axis, angle):
@@ -44,27 +40,21 @@ def coord(x, y):
 # Rotated rectangle
 angle = 0
 scale = 1
-w, h = W, H
+
 
 def update():
-    global rotations, w, h, scale
     cx, cy = coord(*listener.centroid)
 
     # Clear previous frame
     screen.fill(BG_COLOR)
 
-    # Apply rotation to rectangle canvas
-    canvas = pygame.Surface((w, h))
-    canvas.fill(BG_COLOR)
-    pygame.draw.rect(canvas, RECT_COLOR, RECT_POS + RECT_SIZE)
-    w, h = int(round(scale * w)), int(round(scale * h))
-    scale = 1
-
-    scaled_canvas = pygame.transform.scale(canvas, (w, h))
-    rotated_canvas = pygame.transform.rotate(scaled_canvas, degrees(angle))
-    rect = rotated_canvas.get_rect()
+    # Apply scale and rotation to a fixed-size rectangle canvas
+    canvas = pygame.Surface(RECT_SIZE)
+    canvas.fill(RECT_COLOR)
+    transformed = pygame.transform.rotozoom(canvas, degrees(angle), scale * 2)
+    rect = transformed.get_rect()
     rect.center = W / 2, H / 2
-    screen.blit(rotated_canvas, rect)
+    screen.blit(transformed, rect)
 
     # Draw touch points
     for p in listener.points:
@@ -76,19 +66,24 @@ def update():
         # Draw outlined circle around touch point
         pygame.draw.circle(screen, CIRCLE_COLOR, (x, y), FINGER_RADIUS, 1)
 
+        # Fill outlined circle with background color
+        pygame.draw.circle(screen, BG_COLOR, (x, y), FINGER_RADIUS - 1, 0)
+
     # Draw filled circle around centroid
     pygame.draw.circle(screen, CIRCLE_COLOR, (cx, cy), CENTROID_RADIUS)
 
     # Update canvas
     pygame.display.flip()
 
+
 def rotate(event):
     global angle
     angle += event.angle
 
+
 def pinch(event):
     global scale
-    scale = event.amount
+    scale += event.amount
 
 
 # Start touch event listener in separate thread
@@ -99,13 +94,9 @@ listener.start(threaded=True)
 
 # Start GUI event loop
 try:
-    while True:
-        for event in pygame.event.get():
-            if event.type == pygame.QUIT:
-                sys.exit()
-
+    while not filter(lambda e: e.type == pygame.QUIT, pygame.event.get()):
         update()
 except KeyboardInterrupt:
     pass
 finally:
-    print 'Stopping program...'
+    listener.stop()