private bool ResolvePointerUpAndClick(Event currentEvent, GraphicalEventHandler handler) { bool used = false; // Left mouse button was released. If mouse had left the screen, we treat it as if left mouse button was released. if ((currentEvent.type == EventType.MouseUp && currentEvent.button == 0) || (currentEvent.type == EventType.MouseLeaveWindow)) { if (initiallyPressedHandler != null) { // Also, it is a click if we clicked and released LMB over the same element. if (handler == initiallyPressedHandler) { initiallyPressedHandler.InvokePointerClick(currentEvent.mousePosition); } // Initially pressed element recieves the event in any case, initiallyPressedHandler.InvokePointerUp(currentEvent.mousePosition); StartHovering(currentEvent, handler); used = true; } Selected = null; initiallyPressedHandler = null; } return(used); }
private void StartHovering(Event currentEvent, GraphicalEventHandler handler) { if (initiallyHoveredHandler != null) { StopHovering(currentEvent); } initiallyHoveredHandler = handler; handler.InvokePointerHoverStart(currentEvent.mousePosition); }
/// <summary> /// Process current event. /// </summary> /// <param name="currentEvent">Event that is currently being processed.</param> /// <param name="window">Current window rect. Elements outside the window rect are ignored.</param> public void HandleEvent(Event currentEvent, Rect window) { if (currentEvent.type == EventType.Layout) { Layout(); return; } if (currentEvent.isMouse) { if (window.Contains(currentEvent.mousePosition) == false) { if (initiallyPressedHandler != null) { // Initially pressed element recieves the event in any case, initiallyPressedHandler.InvokePointerUp(currentEvent.mousePosition); } Selected = null; initiallyPressedHandler = null; return; } GraphicalElement element = GetGraphicalElementWithHandlerAtPoint(currentEvent.mousePosition).FirstOrDefault(); GraphicalEventHandler handler = Canvas; if (element != null) { handler = element.GraphicalEventHandler; } if (currentEvent.type == EventType.MouseDrag) { if (ResolvePointerDrag(currentEvent)) { Event.current.Use(); } } else if (ResolvePointerHover(currentEvent, handler) // | is on purpose. | ResolveContextPointerUpAndClick(currentEvent, handler) | ResolvePointerUpAndClick(currentEvent, handler) | ResolveContextPointerDown(currentEvent, handler) | ResolvePointerDown(currentEvent, handler)) { Event.current.Use(); } } if (currentEvent.type == EventType.Repaint) { Draw(window); } }
public EditorGraphics(WorkflowEditorColorPalette workflowEditorColorPalette) { // Guarantees that at least default palette is assigned. if (workflowEditorColorPalette == null) { ColorPalette = WorkflowEditorColorPalette.GetDefaultPalette(); } else { ColorPalette = workflowEditorColorPalette; } Canvas = new GraphicalEventHandler(); Reset(); }
private bool ResolvePointerHover(Event currentEvent, GraphicalEventHandler handler) { if (initiallyHoveredHandler != null && initiallyHoveredHandler != handler) { StopHovering(currentEvent); initiallyHoveredHandler = null; return(false); } if (initiallyHoveredHandler != handler && handler != null) { StartHovering(currentEvent, handler); return(true); } return(false); }
/// <summary> /// Resets this <see cref="EditorGraphics"/> instance to it's initial state. /// </summary> public void Reset() { foreach (GraphicalElement element in elements.ToList()) { Deregister(element); if (element.IsReceivingEvents) { element.GraphicalEventHandler.Reset(); } } initiallyPressedHandler = null; initiallyContextPressedHandler = null; Selected = null; }
private bool ResolveContextPointerDown(Event currentEvent, GraphicalEventHandler handler) { bool used = false; // Left mouse button was pressed down. if (currentEvent.type == EventType.MouseDown && currentEvent.button == 1) { initiallyContextPressedHandler = handler; if (handler != null) { handler.InvokeContextPointerDown(currentEvent.mousePosition); StopHovering(currentEvent); used = true; } } return(used); }
public EditorGraphics(WorkflowEditorColorPalette workflowEditorColorPalette) { // Guarantees that at least default palette is assigned. if (workflowEditorColorPalette == null) { ColorPalette = WorkflowEditorColorPalette.GetDefaultPalette(); } else { ColorPalette = workflowEditorColorPalette; } Canvas = new GraphicalEventHandler(); additionalDrawer.Clear(); ReflectionUtils.GetConcreteImplementationsOf <IEditorGraphicDrawer>().ToList().ForEach(type => { additionalDrawer.Add((IEditorGraphicDrawer)ReflectionUtils.CreateInstanceOfType(type)); }); additionalDrawer.Sort((drawer1, drawer2) => drawer1.Priority.CompareTo(drawer2.Priority)); Reset(); }
private bool ResolveContextPointerUpAndClick(Event currentEvent, GraphicalEventHandler handler) { bool used = false; if (currentEvent.type == EventType.MouseUp && currentEvent.button == 1 && handler != null && handler == initiallyContextPressedHandler || (currentEvent.type == EventType.MouseLeaveWindow)) { if (initiallyContextPressedHandler != null) { if (handler == initiallyContextPressedHandler) { initiallyContextPressedHandler.InvokeContextPointerClick(currentEvent.mousePosition); } initiallyContextPressedHandler.InvokeContextPointerUp(currentEvent.mousePosition); StartHovering(currentEvent, handler); used = true; } initiallyContextPressedHandler = null; } return(used); }