Explorar o código

Added 'unbind' method and moved screen_size to a separate file to prevent cyclic imports.

Taddeus Kroes %!s(int64=13) %!d(string=hai) anos
pai
achega
530c6a5f26
Modificáronse 2 ficheiros con 31 adicións e 13 borrados
  1. 11 0
      src/screen.py
  2. 20 13
      src/touch.py

+ 11 - 0
src/screen.py

@@ -0,0 +1,11 @@
+import pygame.display
+
+
+__all__ = ['screen_size']
+
+
+# get screen resolution
+pygame.display.init()
+info = pygame.display.Info()
+screen_size = info.current_w, info.current_h
+pygame.display.quit()

+ 20 - 13
src/touch.py

@@ -1,22 +1,16 @@
 #!/usr/bin/env python
 from __future__ import division
 import time
-import pygame.display
 from math import atan2, pi
 from threading import Thread
 
+from screen import screen_size
 from tuio_server import TuioServer2D
 from logger import Logger
 from events import Event, DownEvent, UpEvent, MoveEvent, Tap, \
         SingleTap, DoubleTap, Flick, Rotate, Pinch, \
         Pan
 
-# get screen resolution
-pygame.display.init()
-info = pygame.display.Info()
-screen_size = info.current_w, info.current_h
-pygame.display.quit()
-
 # Heuristic constants
 # TODO: Encapsulate screen resolution in distance heuristics
 SUPPORTED_EVENTS = ('down', 'up', 'move', 'tap', 'single_tap', 'double_tap',
@@ -401,17 +395,30 @@ class MultitouchServer(Logger):
         except SystemExit:
             self.stop()
 
-    def bind(self, gesture, handler, *args, **kwargs):
+    def bind(self, name, handler, *args, **kwargs):
         """
         Bind a handler to an event or gesture.
         """
-        if gesture not in SUPPORTED_EVENTS:
-            raise ValueError('Unsupported gesture "%s".' % gesture)
+        if name not in SUPPORTED_EVENTS:
+            raise ValueError('Unsupported event name "%s".' % name)
+
+        if name not in self.handlers:
+            self.handlers[name] = []
+
+        self.handlers[name].append((handler, args, kwargs))
 
-        if gesture not in self.handlers:
-            self.handlers[gesture] = []
+    def unbind(self, name, handler=None):
+        """
+        Remove one or all handlers that are bound to an event name.
+        """
+        if name not in self.handlers:
+            raise KeyError('No handlers are bound to event name "%s".' % name)
 
-        self.handlers[gesture].append((handler, args, kwargs))
+        if handler:
+            self.handlers[name] = [h for h in self.handlers[name]
+                                   if h[0] != handler]
+        else:
+            del self.handlers[name]
 
     def trigger(self, event):
         """