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))); }
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))); }