Переглянути джерело

Added 'threaded' keyword argument to event driver.

Taddeus Kroes 13 роки тому
батько
коміт
b3dd89c3f5
3 змінених файлів з 13 додано та 10 видалено
  1. 11 2
      src/driver.py
  2. 1 4
      tests/draw.py
  3. 1 4
      tests/testapp.py

+ 11 - 2
src/driver.py

@@ -1,3 +1,5 @@
+from threading import Thread
+
 from logger import Logger
 
 
@@ -24,14 +26,21 @@ class EventDriver(Logger):
         if self.root_area.contains_event(event):
             self.root_area.delegate_event(event)
 
-    def start(self):
+    def start(self, threaded=False):
         """
         Start the event loop. A root area is needed to be able to delegate
-        events, so check if it exists first.
+        events, so check if it exists first. The argument determines if the
+        driver should start in a new (daemon) thread.
         """
         if not self.root_area:
             raise ValueError('Cannot start event server without root area.')
 
+        if threaded:
+            thread = Thread(target=self.start)
+            thread.daemon = True
+            thread.start()
+            return thread
+
         self.start_loop()
 
     def start_loop(self):

+ 1 - 4
tests/draw.py

@@ -1,7 +1,6 @@
 #!/usr/bin/env python
 from __future__ import division
 import pygame
-from threading import Thread
 from math import degrees
 
 from src import FullscreenArea, create_driver
@@ -160,9 +159,7 @@ area.on_point_up(lambda g: points.remove(g.get_event().point))
 
 try:
     # Start touch gesture server in separate thread
-    thread = Thread(target=driver.start)
-    thread.daemon = True
-    thread.start()
+    driver.start(threaded=True)
 
     # Start GUI event loop
     def is_quit_event(e):

+ 1 - 4
tests/testapp.py

@@ -342,10 +342,7 @@ if __name__ == '__main__':
     create_context_window(800, 600, on_show)
 
     # Run multi-touch gesture server in separate thread
-    driver = mt.create_driver(screen)
-    mt_thread = Thread(target=driver.start)
-    mt_thread.daemon = True
-    mt_thread.start()
+    mt.create_driver(screen).start(threaded=True)
 
     # Flick movement is also handled in a separate thread
     flicks = FlickThread()