def _on_touch(self, event, etype, touch_info): stack = [] obj = self._find_by_id(event.id) if obj is not None: obj._get_interactive_object_stack(stack) if stack: obj = stack[0] stack.reverse() local = obj.globalToLocal(Point(event.x, event.y)) evt = TouchEvent._create(etype, event, local, obj, event.sx, event.sy) evt.touchPointID = event.value evt.isPrimaryTouchPoint = \ bool(event.flags & TouchEvent.efPrimaryTouch) self._check_in_outs(evt, stack, touch_info) obj._fire_event(evt) if evt.isPrimaryTouchPoint and etype == TouchEvent.TOUCH_MOVE: if self._drag_object: self._drag(Point(event.x, event.y)) evt = MouseEvent._create(MouseEvent.MOUSE_MOVE, event, local, obj) obj._fire_event(evt) else: evt = TouchEvent._create(etype, event, Point(event.x, event.y), None, event.sx, event.sy) evt.touchPointID = event.value evt.isPrimaryTouchPoint = \ bool(event.flags & TouchEvent.efPrimaryTouch) self._check_in_outs(evt, stack, touch_info)
def _on_mouse(self, event, event_type, from_mouse): etype = event_type button = event.value if not from_mouse: button = 0 wheel = 0 if event_type == MouseEvent.MOUSE_DOWN: if button > 2: return etype = Stage._S_DOWN_EVENTS[button] elif event_type == MouseEvent.MOUSE_UP: if button > 2: etype = MouseEvent.MOUSE_WHEEL wheel = 1 if button == 3 else -1 else: etype = Stage._S_UP_EVENTS[button] if self._drag_object != None: self._drag(Point(event.x, event.y)) stack = [] obj = self._find_by_id(event.id) if obj is not None: obj._get_interactive_object_stack(stack) local = None if stack: obj = stack[0] stack.reverse() local = obj.globalToLocal(Point(event.x, event.y)) evt = MouseEvent._create(etype, event, local, obj) evt.delta = wheel if from_mouse: self._check_in_outs(evt, stack) obj._fire_event(evt) else: local = Point(event.x, event.y) evt = MouseEvent._create(etype, event, local, None) evt.delta = wheel if from_mouse: self._check_in_outs(evt, stack) click_obj = stack[-1] if len(stack) else self if event_type == MouseEvent.MOUSE_DOWN and button < 3: self._last_down[button] = click_obj elif event_type == MouseEvent.MOUSE_UP and button < 3: if click_obj == self._last_down[button]: evt = MouseEvent._create(Stage._S_CLICK_EVENTS[button], event, local, click_obj) click_obj._fire_event(evt) if button == 0 and click_obj.doubleClickEnabled: now = time.time() diff = now - self._last_click_time if diff <= self.DOUBLE_CLICK_INTERVAL: evt = MouseEvent._create(MouseEvent.DOUBLE_CLICK, event, local, click_obj) click_obj._fire_event(evt) self._last_click_time = now self._last_down[button] = None