예제 #1
0
        public EventPropagation DispatchEvent(Event e, BaseVisualElementPanel panel)
        {
            EventPropagation result;

            if (e.type == EventType.Repaint)
            {
                Debug.Log("Repaint should be handled by Panel before Dispatcher");
                result = EventPropagation.Continue;
            }
            else
            {
                bool flag = false;
                if (panel.panelDebug != null && panel.panelDebug.enabled && panel.panelDebug.interceptEvents != null && panel.panelDebug.interceptEvents(e))
                {
                    result = EventPropagation.Stop;
                }
                else
                {
                    if (this.capture != null && this.capture.panel == null)
                    {
                        Debug.Log(string.Format("Capture has no panel, forcing removal (capture={0} eventType={1})", this.capture, e.type));
                        this.RemoveCapture();
                    }
                    if (this.capture != null)
                    {
                        if (this.capture.panel.contextType != panel.contextType)
                        {
                            result = EventPropagation.Continue;
                            return(result);
                        }
                        VisualElement visualElement = this.capture as VisualElement;
                        if (visualElement != null)
                        {
                            e.mousePosition = visualElement.GlobalToBound(e.mousePosition);
                        }
                        else
                        {
                            IManipulator manipulator = this.capture as IManipulator;
                            if (manipulator != null)
                            {
                                e.mousePosition = manipulator.target.GlobalToBound(e.mousePosition);
                            }
                        }
                        flag = true;
                        if (this.capture.HandleEvent(e, this.capture as VisualElement) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                    }
                    if (e.isKey)
                    {
                        flag = true;
                        if (panel.focusedElement != null)
                        {
                            if (this.PropagateEvent(panel.focusedElement, e) == EventPropagation.Stop)
                            {
                                result = EventPropagation.Stop;
                                return(result);
                            }
                        }
                        else if (this.SendEventToIMGUIContainers(panel.visualTree, e, panel.focusedElement) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                    }
                    else if (e.isMouse || e.isScrollWheel || e.type == EventType.DragUpdated || e.type == EventType.DragPerform || e.type == EventType.DragExited)
                    {
                        if (e.type == EventType.MouseLeaveWindow)
                        {
                            this.elementUnderMouse = null;
                        }
                        else
                        {
                            this.elementUnderMouse = panel.Pick(e.mousePosition);
                        }
                        if (e.type == EventType.MouseDown && this.elementUnderMouse != null && this.elementUnderMouse.enabled)
                        {
                            this.SetFocusedElement(panel, this.elementUnderMouse);
                        }
                        if (this.elementUnderMouse != null)
                        {
                            flag = true;
                            if (this.PropagateEvent(this.elementUnderMouse, e) == EventPropagation.Stop)
                            {
                                result = EventPropagation.Stop;
                                return(result);
                            }
                        }
                        if (e.type == EventType.MouseEnterWindow || e.type == EventType.MouseLeaveWindow)
                        {
                            flag = true;
                            if (this.SendEventToIMGUIContainers(panel.visualTree, e, null) == EventPropagation.Stop)
                            {
                                result = EventPropagation.Stop;
                                return(result);
                            }
                        }
                    }
                    if (e.type == EventType.ExecuteCommand || e.type == EventType.ValidateCommand)
                    {
                        flag = true;
                        if (panel.focusedElement != null && this.PropagateEvent(panel.focusedElement, e) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                        if (this.SendEventToIMGUIContainers(panel.visualTree, e, panel.focusedElement) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                    }
                    if (e.type == EventType.Used)
                    {
                        flag = true;
                        if (this.SendEventToIMGUIContainers(panel.visualTree, e, null) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                    }
                    if (!flag)
                    {
                        if (this.SendEventToIMGUIContainers(panel.visualTree, e, null) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                    }
                    result = EventPropagation.Continue;
                }
            }
            return(result);
        }
 public static Rect ChangeCoordinatesTo(this VisualElement src, VisualElement dest, Rect rect)
 {
     return(dest.GlobalToBound(src.LocalToGlobal(rect)));
 }
예제 #3
0
        private EventPropagation PropagateEvent(VisualElement target, Event evt)
        {
            List <VisualElement> list      = this.BuildPropagationPath(target);
            Vector2          mousePosition = evt.mousePosition;
            EventPropagation result;

            for (int i = 0; i < list.Count; i++)
            {
                VisualElement visualElement = list[i];
                if (visualElement.enabled)
                {
                    evt.mousePosition = visualElement.GlobalToBound(mousePosition);
                    List <IManipulator> .Enumerator manipulatorsInternal = visualElement.GetManipulatorsInternal();
                    while (manipulatorsInternal.MoveNext())
                    {
                        IManipulator current = manipulatorsInternal.Current;
                        if (current.phaseInterest == EventPhase.Capture && current.HandleEvent(evt, target) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                    }
                    if (visualElement.phaseInterest != EventPhase.Capture || visualElement.HandleEvent(evt, target) != EventPropagation.Stop)
                    {
                        goto IL_A2;
                    }
                    result = EventPropagation.Stop;
                    return(result);
                }
                IL_A2 :;
            }
            if (target.enabled)
            {
                evt.mousePosition = target.GlobalToBound(mousePosition);
                List <IManipulator> .Enumerator manipulatorsInternal2 = target.GetManipulatorsInternal();
                while (manipulatorsInternal2.MoveNext())
                {
                    IManipulator current2 = manipulatorsInternal2.Current;
                    if (current2.phaseInterest == EventPhase.Capture && current2.HandleEvent(evt, target) == EventPropagation.Stop)
                    {
                        result = EventPropagation.Stop;
                        return(result);
                    }
                }
                if (target.HandleEvent(evt, target) == EventPropagation.Stop)
                {
                    result = EventPropagation.Stop;
                    return(result);
                }
                manipulatorsInternal2 = target.GetManipulatorsInternal();
                while (manipulatorsInternal2.MoveNext())
                {
                    IManipulator current3 = manipulatorsInternal2.Current;
                    if (current3.phaseInterest == EventPhase.BubbleUp && current3.HandleEvent(evt, target) == EventPropagation.Stop)
                    {
                        result = EventPropagation.Stop;
                        return(result);
                    }
                }
            }
            for (int j = list.Count - 1; j >= 0; j--)
            {
                VisualElement visualElement2 = list[j];
                if (visualElement2.enabled)
                {
                    evt.mousePosition = visualElement2.GlobalToBound(mousePosition);
                    if (visualElement2.phaseInterest == EventPhase.BubbleUp && visualElement2.HandleEvent(evt, target) == EventPropagation.Stop)
                    {
                        result = EventPropagation.Stop;
                        return(result);
                    }
                    List <IManipulator> .Enumerator manipulatorsInternal3 = visualElement2.GetManipulatorsInternal();
                    while (manipulatorsInternal3.MoveNext())
                    {
                        IManipulator current4 = manipulatorsInternal3.Current;
                        if (current4.phaseInterest == EventPhase.BubbleUp && current4.HandleEvent(evt, target) == EventPropagation.Stop)
                        {
                            result = EventPropagation.Stop;
                            return(result);
                        }
                    }
                }
            }
            result = EventPropagation.Continue;
            return(result);
        }
 public static Vector2 ChangeCoordinatesTo(this VisualElement src, VisualElement dest, Vector2 point)
 {
     return(dest.GlobalToBound(src.LocalToGlobal(point)));
 }