public override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); 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); } }
void OnExecuteCommandEvent(ExecuteCommandEvent evt) { if (!textElement.edition.hasFocus) { return; } m_Changed = false; bool mayHaveChanged = false; string oldText = editingUtilities.text; switch (evt.commandName) { case EventCommandNames.OnLostFocus: evt.StopPropagation(); return; case EventCommandNames.Cut: editingUtilities.Cut(); mayHaveChanged = true; break; case EventCommandNames.Paste: editingUtilities.Paste(); mayHaveChanged = true; break; case EventCommandNames.Delete: // This "Delete" command stems from a Shift-Delete in the text // On Windows, Shift-Delete in text does a cut whereas on Mac, it does a delete. editingUtilities.Cut(); mayHaveChanged = true; break; } if (mayHaveChanged) { if (oldText != editingUtilities.text) { m_Changed = true; } evt.StopPropagation(); } if (m_Changed) { UpdateLabel(); evt.StopPropagation(); // Scroll offset might need to be updated textElement.edition.UpdateScrollOffset?.Invoke(); if (!textElement.edition.isDelayed) { textElement.edition.UpdateValueFromText(); } } }
protected override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); if (evt == null) { return; } if (evt.eventTypeId == KeyDownEvent.TypeId()) { KeyDownEvent kde = evt as KeyDownEvent; if (!parentTextField.isDelayed || (!multiline && ((kde?.keyCode == KeyCode.KeypadEnter) || (kde?.keyCode == KeyCode.Return)))) { parentTextField.value = text; } if (multiline) { if (kde?.character == '\t' && kde.modifiers == EventModifiers.None) { kde?.StopPropagation(); kde?.PreventDefault(); } else if (((kde?.character == 3) && (kde?.shiftKey == true)) || // KeyCode.KeypadEnter ((kde?.character == '\n') && (kde?.shiftKey == true))) // KeyCode.Return { parent.Focus(); evt.StopPropagation(); evt.PreventDefault(); } } else if ((kde?.character == 3) || // KeyCode.KeypadEnter (kde?.character == '\n')) // KeyCode.Return { parent.Focus(); evt.StopPropagation(); evt.PreventDefault(); } } else if (evt.eventTypeId == ExecuteCommandEvent.TypeId()) { ExecuteCommandEvent commandEvt = evt as ExecuteCommandEvent; string cmdName = commandEvt.commandName; if (!parentTextField.isDelayed && (cmdName == EventCommandNames.Paste || cmdName == EventCommandNames.Cut)) { parentTextField.value = text; } } // Prevent duplicated navigation events, since we're observing KeyDownEvents instead else if (evt.eventTypeId == NavigationSubmitEvent.TypeId() || evt.eventTypeId == NavigationCancelEvent.TypeId() || evt.eventTypeId == NavigationMoveEvent.TypeId()) { evt.StopPropagation(); evt.PreventDefault(); } }
void ProcessMenuCommand(string command) { using (ExecuteCommandEvent evt = ExecuteCommandEvent.GetPooled(command)) { evt.target = this; SendEvent(evt); } }
private void ProcessMenuCommand(string command) { using (ExecuteCommandEvent pooled = CommandEventBase <ExecuteCommandEvent> .GetPooled(command)) { pooled.target = this; this.SendEvent(pooled); } }
// In order for tests to run without an EditorWindow but still be able to send // events, we sometimes need to force the event type. IMGUI::GetEventType() (native) will // return the event type as Ignore if the proper views haven't yet been // initialized. This (falsely) breaks tests that rely on the event type. So for tests, we // just ensure the event type is what we originally set it to when we sent it. internal static EventBase CreateEvent(Event systemEvent, EventType eventType) { switch (eventType) { case EventType.MouseMove: return PointerMoveEvent.GetPooled(systemEvent); case EventType.MouseDrag: return PointerMoveEvent.GetPooled(systemEvent); case EventType.MouseDown: // If some buttons are already down, we generate PointerMove/MouseDown events. // Otherwise we generate PointerDown/MouseDown events. // See W3C pointer events recommendation: https://www.w3.org/TR/pointerevents2 if (PointerDeviceState.GetPressedButtons(PointerId.mousePointerId) != 0) { return PointerMoveEvent.GetPooled(systemEvent); } else { return PointerDownEvent.GetPooled(systemEvent); } case EventType.MouseUp: // If more buttons are still down, we generate PointerMove/MouseUp events. // Otherwise we generate PointerUp/MouseUp events. // See W3C pointer events recommendation: https://www.w3.org/TR/pointerevents2 if (PointerDeviceState.HasAdditionalPressedButtons(PointerId.mousePointerId, systemEvent.button)) { return PointerMoveEvent.GetPooled(systemEvent); } else { return PointerUpEvent.GetPooled(systemEvent); } case EventType.ContextClick: return ContextClickEvent.GetPooled(systemEvent); case EventType.MouseEnterWindow: return MouseEnterWindowEvent.GetPooled(systemEvent); case EventType.MouseLeaveWindow: return MouseLeaveWindowEvent.GetPooled(systemEvent); case EventType.ScrollWheel: return WheelEvent.GetPooled(systemEvent); case EventType.KeyDown: return KeyDownEvent.GetPooled(systemEvent); case EventType.KeyUp: return KeyUpEvent.GetPooled(systemEvent); case EventType.DragUpdated: return DragUpdatedEvent.GetPooled(systemEvent); case EventType.DragPerform: return DragPerformEvent.GetPooled(systemEvent); case EventType.DragExited: return DragExitedEvent.GetPooled(systemEvent); case EventType.ValidateCommand: return ValidateCommandEvent.GetPooled(systemEvent); case EventType.ExecuteCommand: return ExecuteCommandEvent.GetPooled(systemEvent); default:// Layout, Ignore, Used return IMGUIEvent.GetPooled(systemEvent); } }
protected override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); bool hasChanged = false; if (evt.eventTypeId == KeyDownEvent.TypeId()) { KeyDownEvent kde = evt as KeyDownEvent; if ((kde?.character == 3) || // KeyCode.KeypadEnter (kde?.character == '\n')) // KeyCode.Return { if (textEdition.hasFocus) { Focus(); } else { textInputBase.textElement.Focus(); } evt.StopPropagation(); evt.PreventDefault(); } else if (!isReadOnly) { hasChanged = true; } } else if (!isReadOnly && evt.eventTypeId == ExecuteCommandEvent.TypeId()) { ExecuteCommandEvent commandEvt = evt as ExecuteCommandEvent; string cmdName = commandEvt.commandName; if (cmdName == EventCommandNames.Paste || cmdName == EventCommandNames.Cut) { hasChanged = true; } } if (!isDelayed && hasChanged) { // Prevent text from changing when the value change // This allow expression (2+2) or string like 00123 to remain as typed in the TextField until enter is pressed m_UpdateTextFromValue = false; try { textInputBase.UpdateValueFromText(); } finally { m_UpdateTextFromValue = true; } } }
// In order for tests to run without an EditorWindow but still be able to send // events, we sometimes need to force the event type. IMGUI::GetEventType() (native) will // return the event type as Ignore if the proper views haven't yet been // initialized. This (falsely) breaks tests that rely on the event type. So for tests, we // just ensure the event type is what we originally set it to when we sent it. internal static EventBase CreateEvent(Event systemEvent, EventType eventType) { switch (eventType) { case EventType.MouseMove: return(MouseMoveEvent.GetPooled(systemEvent)); case EventType.MouseDrag: return(MouseMoveEvent.GetPooled(systemEvent)); case EventType.MouseDown: return(MouseDownEvent.GetPooled(systemEvent)); case EventType.MouseUp: return(MouseUpEvent.GetPooled(systemEvent)); case EventType.ContextClick: return(ContextClickEvent.GetPooled(systemEvent)); case EventType.MouseEnterWindow: return(MouseEnterWindowEvent.GetPooled(systemEvent)); case EventType.MouseLeaveWindow: return(MouseLeaveWindowEvent.GetPooled(systemEvent)); case EventType.ScrollWheel: return(WheelEvent.GetPooled(systemEvent)); case EventType.KeyDown: return(KeyDownEvent.GetPooled(systemEvent)); case EventType.KeyUp: return(KeyUpEvent.GetPooled(systemEvent)); case EventType.DragUpdated: return(DragUpdatedEvent.GetPooled(systemEvent)); case EventType.DragPerform: return(DragPerformEvent.GetPooled(systemEvent)); case EventType.DragExited: return(DragExitedEvent.GetPooled(systemEvent)); case EventType.ValidateCommand: return(ValidateCommandEvent.GetPooled(systemEvent)); case EventType.ExecuteCommand: return(ExecuteCommandEvent.GetPooled(systemEvent)); default: // Layout, Ignore, Used return(IMGUIEvent.GetPooled(systemEvent)); } }
protected internal override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); if (evt == null) { return; } if (evt.eventTypeId == KeyDownEvent.TypeId()) { KeyDownEvent kde = evt as KeyDownEvent; if (!parentTextField.isDelayed || (!multiline && ((kde?.keyCode == KeyCode.KeypadEnter) || (kde?.keyCode == KeyCode.Return)))) { parentTextField.value = text; } if (multiline) { if (kde?.character == '\t') { kde?.StopPropagation(); kde?.PreventDefault(); } else if (((kde?.character == 3) && (kde?.shiftKey == true)) || // KeyCode.KeypadEnter ((kde?.character == '\n') && (kde?.shiftKey == true))) // KeyCode.Return { parent.Focus(); } } else if ((kde?.character == 3) || // KeyCode.KeypadEnter (kde?.character == '\n')) // KeyCode.Return { parent.Focus(); } } else if (evt.eventTypeId == ExecuteCommandEvent.TypeId()) { ExecuteCommandEvent commandEvt = evt as ExecuteCommandEvent; string cmdName = commandEvt.commandName; if (!parentTextField.isDelayed && (cmdName == EventCommandNames.Paste || cmdName == EventCommandNames.Cut)) { parentTextField.value = text; } } }
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); } }
void OnExecuteCommandEvent(ExecuteCommandEvent evt) { if (!textInputField.hasFocus) { return; } textInputField.SyncTextEngine(); m_Changed = false; bool mayHaveChanged = false; string oldText = editorEngine.text; if (!textInputField.hasFocus) { return; } switch (evt.commandName) { case EventCommandNames.OnLostFocus: evt.StopPropagation(); return; case EventCommandNames.Cut: if (!textInputField.isReadOnly) { editorEngine.Cut(); mayHaveChanged = true; } break; case EventCommandNames.Copy: editorEngine.Copy(); evt.StopPropagation(); return; case EventCommandNames.Paste: if (!textInputField.isReadOnly) { editorEngine.Paste(); mayHaveChanged = true; } break; case EventCommandNames.SelectAll: editorEngine.SelectAll(); evt.StopPropagation(); return; case EventCommandNames.Delete: if (!textInputField.isReadOnly) { // This "Delete" command stems from a Shift-Delete in the text // On Windows, Shift-Delete in text does a cut whereas on Mac, it does a delete. if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) { editorEngine.Delete(); } else { editorEngine.Cut(); } mayHaveChanged = true; } break; } if (mayHaveChanged) { if (oldText != editorEngine.text) { m_Changed = true; } evt.StopPropagation(); } if (m_Changed) { editorEngine.text = textInputField.CullString(editorEngine.text); textInputField.UpdateText(editorEngine.text); evt.StopPropagation(); } // Scroll offset might need to be updated editorEngine.UpdateScrollOffset(); }
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 OnExecuteCommandEvent(ExecuteCommandEvent evt) { bool flag = !base.textInputField.hasFocus; if (!flag) { base.textInputField.SyncTextEngine(); this.m_Changed = false; bool flag2 = false; string text = base.editorEngine.text; bool flag3 = !base.textInputField.hasFocus; if (!flag3) { string commandName = evt.commandName; string text2 = commandName; if (text2 != null) { if (text2 == "OnLostFocus") { evt.StopPropagation(); return; } if (!(text2 == "Cut")) { if (text2 == "Copy") { base.editorEngine.Copy(); evt.StopPropagation(); return; } if (!(text2 == "Paste")) { if (text2 == "SelectAll") { base.editorEngine.SelectAll(); evt.StopPropagation(); return; } if (text2 == "Delete") { bool flag4 = !base.textInputField.isReadOnly; if (flag4) { bool flag5 = SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX; if (flag5) { base.editorEngine.Delete(); } else { base.editorEngine.Cut(); } flag2 = true; } } } else { bool flag6 = !base.textInputField.isReadOnly; if (flag6) { base.editorEngine.Paste(); flag2 = true; } } } else { bool flag7 = !base.textInputField.isReadOnly; if (flag7) { base.editorEngine.Cut(); flag2 = true; } } } bool flag8 = flag2; if (flag8) { bool flag9 = text != base.editorEngine.text; if (flag9) { this.m_Changed = true; } evt.StopPropagation(); } bool changed = this.m_Changed; if (changed) { base.editorEngine.text = base.textInputField.CullString(base.editorEngine.text); base.textInputField.UpdateText(base.editorEngine.text); evt.StopPropagation(); } base.editorEngine.UpdateScrollOffset(); } } }
// In order for tests to run without an EditorWindow but still be able to send // events, we sometimes need to force the event type. IMGUI::GetEventType() (native) will // return the event type as Ignore if the proper views haven't yet been // initialized. This (falsely) breaks tests that rely on the event type. So for tests, we // just ensure the event type is what we originally set it to when we sent it. internal static EventBase CreateEvent(Event systemEvent, EventType eventType) { switch (eventType) { case EventType.MouseMove: return(PointerMoveEvent.GetPooled(systemEvent)); case EventType.MouseDrag: return(PointerMoveEvent.GetPooled(systemEvent)); case EventType.MouseDown: // If some buttons are already down, we generate PointerMove/MouseDown events. // Otherwise we generate PointerDown/MouseDown events. // See W3C pointer events recommendation: https://www.w3.org/TR/pointerevents2 // Note: sometimes systemEvent.button is already pressed (systemEvent is processed multiple times). if (PointerDeviceState.HasAdditionalPressedButtons(PointerId.mousePointerId, systemEvent.button)) { return(PointerMoveEvent.GetPooled(systemEvent)); } else { return(PointerDownEvent.GetPooled(systemEvent)); } case EventType.MouseUp: // If more buttons are still down, we generate PointerMove/MouseUp events. // Otherwise we generate PointerUp/MouseUp events. // See W3C pointer events recommendation: https://www.w3.org/TR/pointerevents2 if (PointerDeviceState.HasAdditionalPressedButtons(PointerId.mousePointerId, systemEvent.button)) { return(PointerMoveEvent.GetPooled(systemEvent)); } else { return(PointerUpEvent.GetPooled(systemEvent)); } case EventType.ContextClick: return(ContextClickEvent.GetPooled(systemEvent)); case EventType.MouseEnterWindow: return(MouseEnterWindowEvent.GetPooled(systemEvent)); case EventType.MouseLeaveWindow: return(MouseLeaveWindowEvent.GetPooled(systemEvent)); case EventType.ScrollWheel: return(WheelEvent.GetPooled(systemEvent)); case EventType.KeyDown: return(KeyDownEvent.GetPooled(systemEvent)); case EventType.KeyUp: return(KeyUpEvent.GetPooled(systemEvent)); #if UNITY_EDITOR case EventType.DragUpdated: return(DragUpdatedEvent.GetPooled(systemEvent)); case EventType.DragPerform: return(DragPerformEvent.GetPooled(systemEvent)); case EventType.DragExited: return(DragExitedEvent.GetPooled(systemEvent)); #endif case EventType.ValidateCommand: return(ValidateCommandEvent.GetPooled(systemEvent)); case EventType.ExecuteCommand: return(ExecuteCommandEvent.GetPooled(systemEvent)); default: // Layout, Ignore, Used return(IMGUIEvent.GetPooled(systemEvent)); } }
protected override void ExecuteDefaultActionAtTarget(EventBase evt) { base.ExecuteDefaultActionAtTarget(evt); bool flag = evt == null; if (!flag) { bool flag2 = evt.eventTypeId == EventBase <KeyDownEvent> .TypeId(); if (flag2) { KeyDownEvent keyDownEvent = evt as KeyDownEvent; bool flag3 = !this.parentTextField.isDelayed || (!this.multiline && ((keyDownEvent != null && keyDownEvent.keyCode == KeyCode.KeypadEnter) || (keyDownEvent != null && keyDownEvent.keyCode == KeyCode.Return))); if (flag3) { this.parentTextField.value = base.text; } bool multiline = this.multiline; if (multiline) { char?c = (keyDownEvent != null) ? new char?(keyDownEvent.character) : null; int? num = c.HasValue ? new int?((int)c.GetValueOrDefault()) : null; int num2 = 9; bool flag4 = (num.GetValueOrDefault() == num2 & num.HasValue) && keyDownEvent.modifiers == EventModifiers.None; if (flag4) { if (keyDownEvent != null) { keyDownEvent.StopPropagation(); } if (keyDownEvent != null) { keyDownEvent.PreventDefault(); } } else { c = ((keyDownEvent != null) ? new char?(keyDownEvent.character) : null); num = (c.HasValue ? new int?((int)c.GetValueOrDefault()) : null); num2 = 3; bool arg_1EE_0; if (!(num.GetValueOrDefault() == num2 & num.HasValue) || keyDownEvent == null || !keyDownEvent.shiftKey) { c = ((keyDownEvent != null) ? new char?(keyDownEvent.character) : null); num = (c.HasValue ? new int?((int)c.GetValueOrDefault()) : null); num2 = 10; arg_1EE_0 = ((num.GetValueOrDefault() == num2 & num.HasValue) && keyDownEvent != null && keyDownEvent.shiftKey); } else { arg_1EE_0 = true; } bool flag5 = arg_1EE_0; if (flag5) { base.parent.Focus(); } } } else { char?c = (keyDownEvent != null) ? new char?(keyDownEvent.character) : null; int? num = c.HasValue ? new int?((int)c.GetValueOrDefault()) : null; int num2 = 3; bool arg_2B8_0; if (!(num.GetValueOrDefault() == num2 & num.HasValue)) { c = ((keyDownEvent != null) ? new char?(keyDownEvent.character) : null); num = (c.HasValue ? new int?((int)c.GetValueOrDefault()) : null); num2 = 10; arg_2B8_0 = (num.GetValueOrDefault() == num2 & num.HasValue); } else { arg_2B8_0 = true; } bool flag6 = arg_2B8_0; if (flag6) { base.parent.Focus(); } } } else { bool flag7 = evt.eventTypeId == EventBase <ExecuteCommandEvent> .TypeId(); if (flag7) { ExecuteCommandEvent executeCommandEvent = evt as ExecuteCommandEvent; string commandName = executeCommandEvent.commandName; bool flag8 = !this.parentTextField.isDelayed && (commandName == "Paste" || commandName == "Cut"); if (flag8) { this.parentTextField.value = base.text; } } else { NavigationDirection navigationDirection; bool flag9 = base.eventInterpreter.IsActivationEvent(evt) || base.eventInterpreter.IsCancellationEvent(evt) || (base.eventInterpreter.IsNavigationEvent(evt, out navigationDirection) && navigationDirection != NavigationDirection.Previous && navigationDirection != NavigationDirection.Next); if (flag9) { evt.StopPropagation(); evt.PreventDefault(); } } } } }