internal void SetElementUnderMouse(VisualElement newElementUnderMouse, EventBase triggerEvent) { if (newElementUnderMouse == topElementUnderMouse) { return; } VisualElement previousTopElementUnderMouse = topElementUnderMouse; topElementUnderMouse = newElementUnderMouse; IMouseEvent mouseEvent = triggerEvent == null ? null : triggerEvent as IMouseEvent; var mousePosition = mouseEvent == null ? MousePositionTracker.mousePosition : mouseEvent?.mousePosition ?? Vector2.zero; // mouse enter/leave must be dispatched *any* time the element under mouse changes using (new EventDispatcherGate(dispatcher)) { MouseEventsHelper.SendEnterLeave <MouseLeaveEvent, MouseEnterEvent>(previousTopElementUnderMouse, topElementUnderMouse, mouseEvent, mousePosition); } if (triggerEvent == null || triggerEvent.eventTypeId == MouseMoveEvent.TypeId() || triggerEvent.eventTypeId == MouseDownEvent.TypeId() || triggerEvent.eventTypeId == MouseUpEvent.TypeId() || triggerEvent.eventTypeId == MouseEnterWindowEvent.TypeId() || triggerEvent.eventTypeId == MouseLeaveWindowEvent.TypeId() || triggerEvent.eventTypeId == WheelEvent.TypeId()) { using (new EventDispatcherGate(dispatcher)) { MouseEventsHelper.SendMouseOverMouseOut(previousTopElementUnderMouse, topElementUnderMouse, mouseEvent, mousePosition); } } else if (triggerEvent.eventTypeId == DragUpdatedEvent.TypeId() || triggerEvent.eventTypeId == DragExitedEvent.TypeId()) { using (new EventDispatcherGate(dispatcher)) { MouseEventsHelper.SendEnterLeave <DragLeaveEvent, DragEnterEvent>(previousTopElementUnderMouse, topElementUnderMouse, mouseEvent, mousePosition); } } }
internal void SetElementUnderMouse(VisualElement newElementUnderMouse, EventBase triggerEvent) { if (newElementUnderMouse == topElementUnderMouse) { return; } VisualElement previousTopElementUnderMouse = topElementUnderMouse; topElementUnderMouse = newElementUnderMouse; if (triggerEvent == null) { using (new EventDispatcherGate(dispatcher)) { MouseEventsHelper.SendEnterLeave <MouseLeaveEvent, MouseEnterEvent>(previousTopElementUnderMouse, topElementUnderMouse, null, MousePositionTracker.mousePosition); MouseEventsHelper.SendMouseOverMouseOut(previousTopElementUnderMouse, topElementUnderMouse, null, MousePositionTracker.mousePosition); } } else if ( triggerEvent.eventTypeId == MouseMoveEvent.TypeId() || triggerEvent.eventTypeId == MouseDownEvent.TypeId() || triggerEvent.eventTypeId == MouseUpEvent.TypeId() || triggerEvent.eventTypeId == MouseEnterWindowEvent.TypeId() || triggerEvent.eventTypeId == MouseLeaveWindowEvent.TypeId() || triggerEvent.eventTypeId == WheelEvent.TypeId()) { IMouseEvent mouseEvent = triggerEvent as IMouseEvent; using (new EventDispatcherGate(dispatcher)) { MouseEventsHelper.SendEnterLeave <MouseLeaveEvent, MouseEnterEvent>(previousTopElementUnderMouse, topElementUnderMouse, mouseEvent, mouseEvent?.mousePosition ?? Vector2.zero); MouseEventsHelper.SendMouseOverMouseOut(previousTopElementUnderMouse, topElementUnderMouse, mouseEvent, mouseEvent?.mousePosition ?? Vector2.zero); } } else if (triggerEvent.eventTypeId == DragUpdatedEvent.TypeId() || triggerEvent.eventTypeId == DragExitedEvent.TypeId()) { IMouseEvent mouseEvent = triggerEvent as IMouseEvent; using (new EventDispatcherGate(dispatcher)) { MouseEventsHelper.SendEnterLeave <DragLeaveEvent, DragEnterEvent>(previousTopElementUnderMouse, topElementUnderMouse, mouseEvent, mouseEvent?.mousePosition ?? Vector2.zero); } } }
private void OnMouseUp(MouseUpEvent evt) { bool flag = evt.button != 0; if (!flag) { bool flag2 = !base.textInputField.HasMouseCapture(); if (!flag2) { base.textInputField.SyncTextEngine(); this.m_Changed = false; bool flag3 = this.m_Dragged && this.m_DragToPosition; if (flag3) { base.editorEngine.MoveSelectionToAltCursor(); } else { bool postponeMove = this.m_PostponeMove; if (postponeMove) { base.editorEngine.MoveCursorToPosition_Internal(evt.localMousePosition, evt.shiftKey); } else { bool selectAllOnMouseUp = this.m_SelectAllOnMouseUp; if (selectAllOnMouseUp) { this.m_SelectAllOnMouseUp = false; } } } base.editorEngine.MouseDragSelectsWholeWords(false); base.textInputField.ReleaseMouse(); this.m_DragToPosition = true; this.m_Dragged = false; this.m_PostponeMove = false; evt.StopPropagation(); base.editorEngine.UpdateScrollOffset(); } } }
void OnMouseUp(MouseUpEvent evt) { if (evt.button != 0) { return; } if (!textInputField.HasMouseCapture()) { return; } textInputField.SyncTextEngine(); m_Changed = false; if (m_Dragged && m_DragToPosition) { editorEngine.MoveSelectionToAltCursor(); } else if (m_PostponeMove) { editorEngine.MoveCursorToPosition_Internal(evt.localMousePosition, evt.shiftKey); } else if (m_SelectAllOnMouseUp) { editorEngine.SelectAll(); m_SelectAllOnMouseUp = false; } editorEngine.MouseDragSelectsWholeWords(false); textInputField.ReleaseMouse(); m_DragToPosition = true; m_Dragged = false; m_PostponeMove = false; evt.StopPropagation(); // Scroll offset might need to be updated editorEngine.UpdateScrollOffset(); }
protected internal override void PostDispatch(IPanel panel) { if (PointerType.IsDirectManipulationDevice(pointerType)) { panel.ReleasePointer(pointerId); BaseVisualElementPanel basePanel = panel as BaseVisualElementPanel; basePanel?.SetElementUnderPointer(null, this); } if (panel.ShouldSendCompatibilityMouseEvents(this)) { using (var evt = MouseUpEvent.GetPooled(this)) { evt.target = target; target.SendEvent(evt); } } base.PostDispatch(panel); }
protected internal override void PostDispatch(IPanel panel) { if (panel.ShouldSendCompatibilityMouseEvents(this)) { if (imguiEvent != null && imguiEvent.rawType == EventType.MouseDown) { using (var evt = MouseDownEvent.GetPooled(this)) { evt.target = target; evt.target.SendEvent(evt); } } else if (imguiEvent != null && imguiEvent.rawType == EventType.MouseUp) { using (var evt = MouseUpEvent.GetPooled(this)) { evt.target = target; evt.target.SendEvent(evt); } } else if (imguiEvent != null && imguiEvent.rawType == EventType.DragUpdated) { using (var evt = DragUpdatedEvent.GetPooled(this)) { evt.target = target; evt.target.SendEvent(evt); } } else { using (var evt = MouseMoveEvent.GetPooled(this)) { evt.target = target; evt.target.SendEvent(evt); } } } base.PostDispatch(panel); }
protected internal override void PostDispatch(IPanel panel) { bool flag = panel.ShouldSendCompatibilityMouseEvents(this); if (flag) { bool flag2 = base.imguiEvent != null && base.imguiEvent.rawType == EventType.MouseDown; if (flag2) { using (MouseDownEvent pooled = MouseDownEvent.GetPooled(this)) { pooled.target = base.target; pooled.target.SendEvent(pooled); } } else { bool flag3 = base.imguiEvent != null && base.imguiEvent.rawType == EventType.MouseUp; if (flag3) { using (MouseUpEvent pooled2 = MouseUpEvent.GetPooled(this)) { pooled2.target = base.target; pooled2.target.SendEvent(pooled2); } } else { using (MouseMoveEvent pooled3 = MouseMoveEvent.GetPooled(this)) { pooled3.target = base.target; pooled3.target.SendEvent(pooled3); } } } } base.PostDispatch(panel); }
public override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); if (evt.eventTypeId == FocusEvent.TypeId()) { OnFocus(evt as FocusEvent); } else if (evt.eventTypeId == BlurEvent.TypeId()) { OnBlur(evt as BlurEvent); } else if (evt.eventTypeId == MouseDownEvent.TypeId()) { OnMouseDown(evt as MouseDownEvent); } else if (evt.eventTypeId == MouseUpEvent.TypeId()) { OnMouseUp(evt as MouseUpEvent); } else if (evt.eventTypeId == MouseMoveEvent.TypeId()) { OnMouseMove(evt as MouseMoveEvent); } else if (evt.eventTypeId == KeyDownEvent.TypeId()) { OnKeyDown(evt as KeyDownEvent); } else if (evt.eventTypeId == ValidateCommandEvent.TypeId()) { OnValidateCommandEvent(evt as ValidateCommandEvent); } else if (evt.eventTypeId == ExecuteCommandEvent.TypeId()) { OnExecuteCommandEvent(evt as ExecuteCommandEvent); } }
public void ReplayEvents(List <EventDebuggerEventRecord> eventBases) { if (eventBases == null) { return; } foreach (var eventBase in eventBases) { Event newEvent = new Event { button = eventBase.button, clickCount = eventBase.clickCount, modifiers = eventBase.modifiers, mousePosition = eventBase.mousePosition, }; if (eventBase.eventTypeId == MouseMoveEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseMove; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseMove), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseDownEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseDown; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseDown), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseUpEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseUp; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseUp), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == ContextClickEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.ContextClick; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ContextClick), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseEnterWindowEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseEnterWindow; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseEnterWindow), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseLeaveWindowEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseLeaveWindow; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseLeaveWindow), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == WheelEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.ScrollWheel; newEvent.delta = eventBase.delta; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ScrollWheel), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == KeyDownEvent.TypeId()) { newEvent.type = EventType.KeyDown; newEvent.character = eventBase.character; newEvent.keyCode = eventBase.keyCode; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.KeyDown), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == KeyUpEvent.TypeId()) { newEvent.type = EventType.KeyUp; newEvent.character = eventBase.character; newEvent.keyCode = eventBase.keyCode; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.KeyUp), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == DragUpdatedEvent.TypeId()) { newEvent.type = EventType.DragUpdated; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.DragUpdated), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == DragPerformEvent.TypeId()) { newEvent.type = EventType.DragPerform; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.DragPerform), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == DragExitedEvent.TypeId()) { newEvent.type = EventType.DragExited; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.DragExited), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == ValidateCommandEvent.TypeId()) { newEvent.type = EventType.ValidateCommand; newEvent.commandName = eventBase.commandName; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ValidateCommand), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == ExecuteCommandEvent.TypeId()) { newEvent.type = EventType.ExecuteCommand; newEvent.commandName = eventBase.commandName; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ExecuteCommand), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == IMGUIEvent.TypeId()) { Debug.Log("Skipped IMGUI event (" + eventBase.eventBaseName + "): " + eventBase); continue; } else { Debug.Log("Skipped event (" + eventBase.eventBaseName + "): " + eventBase); continue; } Debug.Log("Replayed event (" + eventBase.eventBaseName + "): " + newEvent); } }
private IEnumerator DoReplayEvents(IEnumerable <EventDebuggerEventRecord> eventBases, Action <int, int> refreshList) { var sortedEvents = eventBases.OrderBy(e => e.timestamp).ToList(); var sortedEventsCount = sortedEvents.Count; IEnumerator AwaitForNextEvent(int currentIndex) { if (currentIndex == sortedEvents.Count - 1) { yield break; } var deltaTimestampMs = sortedEvents[currentIndex + 1].timestamp - sortedEvents[currentIndex].timestamp; var timeMs = 0.0f; while (timeMs < deltaTimestampMs) { if (isPlaybackPaused) { yield return(null); } else { var time = Panel.TimeSinceStartupMs(); yield return(null); var delta = Panel.TimeSinceStartupMs() - time; timeMs += delta * playbackSpeed; } } } for (var i = 0; i < sortedEventsCount; i++) { if (!isReplaying) { break; } var eventBase = sortedEvents[i]; var newEvent = new Event { button = eventBase.button, clickCount = eventBase.clickCount, modifiers = eventBase.modifiers, mousePosition = eventBase.mousePosition, }; if (eventBase.eventTypeId == MouseMoveEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseMove; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseMove), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseDownEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseDown; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseDown), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseUpEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseUp; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseUp), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == ContextClickEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.ContextClick; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ContextClick), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseEnterWindowEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseEnterWindow; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseEnterWindow), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == MouseLeaveWindowEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseLeaveWindow; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseLeaveWindow), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == PointerMoveEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseMove; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseMove), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == PointerDownEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseDown; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseDown), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == PointerUpEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.MouseUp; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.MouseUp), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == WheelEvent.TypeId() && eventBase.hasUnderlyingPhysicalEvent) { newEvent.type = EventType.ScrollWheel; newEvent.delta = eventBase.delta; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ScrollWheel), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == KeyDownEvent.TypeId()) { newEvent.type = EventType.KeyDown; newEvent.character = eventBase.character; newEvent.keyCode = eventBase.keyCode; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.KeyDown), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == KeyUpEvent.TypeId()) { newEvent.type = EventType.KeyUp; newEvent.character = eventBase.character; newEvent.keyCode = eventBase.keyCode; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.KeyUp), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == NavigationMoveEvent.TypeId()) { panel.dispatcher.Dispatch(NavigationMoveEvent.GetPooled(eventBase.navigationDirection, eventBase.deviceType, eventBase.modifiers), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == NavigationSubmitEvent.TypeId()) { panel.dispatcher.Dispatch(NavigationSubmitEvent.GetPooled(eventBase.deviceType, eventBase.modifiers), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == NavigationCancelEvent.TypeId()) { panel.dispatcher.Dispatch(NavigationCancelEvent.GetPooled(eventBase.deviceType, eventBase.modifiers), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == DragUpdatedEvent.TypeId()) { newEvent.type = EventType.DragUpdated; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.DragUpdated), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == DragPerformEvent.TypeId()) { newEvent.type = EventType.DragPerform; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.DragPerform), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == DragExitedEvent.TypeId()) { newEvent.type = EventType.DragExited; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.DragExited), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == ValidateCommandEvent.TypeId()) { newEvent.type = EventType.ValidateCommand; newEvent.commandName = eventBase.commandName; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ValidateCommand), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == ExecuteCommandEvent.TypeId()) { newEvent.type = EventType.ExecuteCommand; newEvent.commandName = eventBase.commandName; panel.dispatcher.Dispatch(UIElementsUtility.CreateEvent(newEvent, EventType.ExecuteCommand), panel, DispatchMode.Default); } else if (eventBase.eventTypeId == IMGUIEvent.TypeId()) { Debug.Log("Skipped IMGUI event (" + eventBase.eventBaseName + "): " + eventBase); var awaitSkipped = AwaitForNextEvent(i); while (awaitSkipped.MoveNext()) { yield return(null); } continue; } else { Debug.Log("Skipped event (" + eventBase.eventBaseName + "): " + eventBase); var awaitSkipped = AwaitForNextEvent(i); while (awaitSkipped.MoveNext()) { yield return(null); } continue; } refreshList?.Invoke(i, sortedEventsCount); Debug.Log($"Replayed event {eventBase.eventId.ToString()} ({eventBase.eventBaseName}): {newEvent}"); var await = AwaitForNextEvent(i); while (await.MoveNext()) { yield return(null); } } isReplaying = false; }
private void OnTreeViewMouseUp(MouseUpEvent evt) { m_ScrollView.contentContainer.Focus(); }
protected override void OnMouseUp(UnityEngine.UIElements.MouseUpEvent e) { }
private static bool IsDockAreaMouseUp(EventBase evt) { return(evt.eventTypeId == MouseUpEvent.TypeId() && evt.target == (evt.target as VisualElement)?.elementPanel.rootIMGUIContainer); }