예제 #1
0
파일: stage.py 프로젝트: vkolev/flappy
    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)
예제 #2
0
파일: stage.py 프로젝트: vkolev/flappy
    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