Esempio n. 1
0
    private void PointerInput(int pointerIndex, bool touching, bool pointerDown, bool pointerUp, bool dragging, Vector3 position, int fingerId, FocusData focus, Pointer pointer)
    {
        Widget widget = this.RayCast(position);

        pointer.touching    = touching;
        pointer.down        = pointerDown;
        pointer.up          = pointerUp;
        pointer.dragging    = dragging;
        pointer.position    = position;
        pointer.fingerId    = fingerId;
        pointer.onWidget    = (widget != null);
        pointer.widget      = widget;
        pointer.doubleClick = false;
        if (widget && pointerDown)
        {
            pointer.touchUsed = true;
        }
        else if (pointerUp || !touching)
        {
            pointer.touchUsed = false;
        }
        if (widget != null && focus != null && !focus.primary && !widget.AllowMultitouch())
        {
            widget = null;
        }
        if (pointerDown)
        {
            if (widget)
            {
                focus.target = widget;
                focus.target.SendInput(new InputEvent(InputEvent.EventType.Press, position));
            }
            else
            {
                focus.target = null;
            }
        }
        if (pointerUp)
        {
            if (widget && widget == focus.target)
            {
                widget.SendInput(new InputEvent(InputEvent.EventType.Release, position));
            }
            focus.target = null;
        }
        if (touching)
        {
            if (widget != null && focus.mouseOver != widget && (focus.target == null || focus.target == widget))
            {
                if (focus.mouseOver != null)
                {
                    focus.mouseOver.SendInput(new InputEvent(InputEvent.EventType.MouseLeave, position));
                }
                focus.mouseOver = widget;
                widget.SendInput(new InputEvent(InputEvent.EventType.MouseEnter, position));
                if (widget == focus.target && !pointerDown)
                {
                    widget.SendInput(new InputEvent(InputEvent.EventType.MouseReturn, position));
                }
            }
            if (focus.mouseOver != null && widget != focus.mouseOver)
            {
                focus.mouseOver.SendInput(new InputEvent(InputEvent.EventType.MouseLeave, position));
                focus.mouseOver = null;
            }
        }
        if (pointerUp)
        {
            if (focus.mouseOver != null)
            {
                focus.mouseOver.SendInput(new InputEvent(InputEvent.EventType.MouseLeave, Input.mousePosition));
            }
            focus.mouseOver = null;
            focus.target    = null;
            focus.fingerId  = -1;
            focus.primary   = false;
        }
        if (focus != null && focus.target != null)
        {
            focus.target.SendInput(new InputEvent(InputEvent.EventType.Drag, position));
        }
    }