1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 from libavg import avg
24
29
31 self._startPos = self._pos
32
34 return self._pos - self._startPos
35
38
41
43 self._pos = newPos
44 if not self._startPos:
45 self._startPos = self._pos
46
49 x = property(getX)
50
53 y = property(getY)
54
57
63
68
71
73 return self.__cursorid
74
76 """Keep track of cursors pressed on a Node"""
77 - def __init__(self,
78 node,
79 source,
80 onDown = lambda x: None,
81 onUp = lambda x: None,
82 onMotion = lambda x: None,
83 resetMotion = lambda: None,
84 maxEvents = None,
85 captureEvents = True):
86
87 self.__node = node
88 self.__source = source
89 self.__callback = {
90 'onDown': onDown,
91 'onUp': onUp,
92 'onMotion': onMotion,
93 'resetMotion': resetMotion,
94 }
95
96 self.__maxEvents = maxEvents
97 self.__captureEvents = captureEvents
98
99 self.__capturedCursors = []
100 self.__node.setEventHandler (avg.CURSORDOWN, self.__source, self.__onDown)
101 self.__node.setEventHandler (avg.CURSORUP, self.__source, self.__onUp)
102 self.__node.setEventHandler (avg.CURSORMOTION, self.__source, self.__onMotion)
103
104 self.__eventCursors = []
105
108
117
120
122 found = filter (lambda ec: ec.getCursorID() == event.cursorid, self.__eventCursors)
123 return found[0] if found else None
124
128
130 def __removeCursor (cursor):
131 def __releaseCapture (cursorid):
132 if cursorid in self.__capturedCursors:
133 try:
134 self.__node.releaseEventCapture (cursorid)
135 self.__capturedCursors.remove (cursorid)
136 except RuntimeError:
137 print "warning: could not release event capture for cursor %u" % cursorid
138
139 __releaseCapture (cursor.getCursorID())
140 self.__eventCursors.remove (cursor)
141 self.__resetMotion ()
142 ec = self.__findEventCursor (event)
143 if ec:
144 ec.update (event)
145 __removeCursor (ec)
146 self.__callback['onUp'](ec)
147
149 if self.__maxEvents and len(self.__eventCursors) >= self.__maxEvents:
150 return
151
152 if self.__captureEvents:
153 try:
154 self.__node.setEventCapture(event.cursorid)
155 self.__capturedCursors.append(event.cursorid)
156 except RuntimeError:
157 print "warning: could capture events for cursor %u" % event.cursorid
158
159 ec = EventCursor (event)
160 self.__eventCursors.append (ec)
161 self.__resetMotion ()
162 self.__callback['onDown'](ec)
163
165 ec = self.__findEventCursor (event)
166 if ec:
167 ec.update (event)
168 self.__callback['onMotion'](ec)
169
171 return self.__eventCursors
172
174 return len(self.__eventCursors)
175