/// <summary> /// Fire a raycast using all of the GraphicRaycasters in the system, plus the one /// PhysicsRaycaster that is associated with the event Camera. /// </summary> /// <param name="pointer">Pointer.</param> /// <param name="eventData">Event data.</param> private void RaycastAll(IPointerDevice pointer, PointerEventData eventData) { DisplayManager.MoveEventCameraToPointer(pointer); eventSystem.RaycastAll(eventData, m_RaycastResultCache); #if UNITY_MODULES_UI for (var i = 0; i < m_RaycastResultCache.Count; ++i) { var ray = m_RaycastResultCache[i]; if (ray.module is GraphicRaycaster gfr) { var canv = gfr.GetComponent <Canvas>(); ray.worldNormal = -canv.transform.forward; var pos = pointer.WorldFromScreen(ray.screenPosition); if (canv.renderMode == RenderMode.WorldSpace) { var delta = pos - pointer.Origin; delta *= ray.distance / delta.magnitude + canvasOffset; ray.distance = delta.magnitude; pos = pointer.Origin + delta; } ray.worldPosition = pos; m_RaycastResultCache[i] = ray; } } #endif }
public void SetPointerOver(IPointerDevice device, IVisual visual, Point p) { IEnumerable <IInputElement> hits = visual.GetVisualsAt(p) .OfType <IInputElement>() .Where(x => x.IsEnabledCore); foreach (var control in this.pointerOvers.Except(hits).ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Remove(control); control.RaiseEvent(e); } foreach (var control in hits.Except(this.pointerOvers)) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerEnterEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Add(control); control.RaiseEvent(e); } }
void Expand(IPointerDevice e) { Point pointerRelative = e.GetPosition(this); PixelPoint pointerAbsolute = new PixelPoint( (int)(Position.X + pointerRelative.X), (int)(Position.Y + pointerRelative.Y) ); Screen result = null; foreach (Screen screen in Screens.All) { if (screen.Bounds.Contains(pointerAbsolute)) { result = screen; break; } } if (result != null) { Position = new PixelPoint(result.Bounds.X, Position.Y); Width = result.Bounds.Width; } }
public static TextViewContext Create(IPointerDevice mouse, SharpTreeView treeView = null, DecompilerTextView textView = null, ListBox listBox = null) { ReferenceSegment reference; if (textView != null) { reference = textView.GetReferenceSegmentAtMousePosition(mouse); } else if (listBox?.SelectedItem is SearchResult result) { reference = new ReferenceSegment { Reference = result.Member } } ; else { reference = null; } var position = textView != null?textView.GetPositionFromMousePosition(mouse) : null; var selectedTreeNodes = treeView != null?treeView.GetTopLevelSelection().ToArray() : null; return(new TextViewContext { TreeView = treeView, SelectedTreeNodes = selectedTreeNodes, TextView = textView, Reference = reference, Position = position }); }
public PointerDeviceState(IPointerDevice pointerDevice) { SourceDevice = pointerDevice; PressedPointers = new ReadOnlySet <PointerPoint>(pressedPointers); ReleasedPointers = new ReadOnlySet <PointerPoint>(releasedPointers); DownPointers = new ReadOnlySet <PointerPoint>(downPointers); }
public static void ReleasePointerCapture(this IInputElement element, IPointerDevice device) { if (element == device.Captured) { device.Capture(null); } }
private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, IList <IInputElement> elements) { foreach (var control in _pointerOvers.Except(elements).ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, Source = control, }; _pointerOvers.Remove(control); control.RaiseEvent(e); } foreach (var control in elements.Except(_pointerOvers)) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerEnterEvent, Device = device, Source = control, }; _pointerOvers.Add(control); control.RaiseEvent(e); } root.PointerOverElement = elements.FirstOrDefault() ?? root; return(root.PointerOverElement); }
private void Maximize(IPointerDevice e) { WindowState = (WindowState == WindowState.Maximized)? WindowState.Normal : WindowState.Maximized; Topmost = false; Topmost = Preferences.AlwaysOnTop; Activate(); }
protected static RawPointerEventArgs CreateRawPointerMovedArgs( IPointerDevice pointerDevice, IInputRoot root, Point?positition = null) { return(new RawPointerEventArgs(pointerDevice, 0, root, RawPointerEventType.Move, positition ?? default, default)); }
public void AddPointer(IPointerDevice pointer) { if (pointer != null && !Devices.Contains(pointer) && !newDevices.Contains(pointer)) { newDevices.Add(pointer); } }
public void ProcessPointer(IPointerDevice pointer) { pointer.Layer = ControllerLayer; if (pointer.IsEnabled) { var evtData = GetJuniperPointerData(pointer.PointerDataID); evtData.delta = pointer.ScreenDelta; evtData.position = pointer.ScreenPoint; evtData.scrollDelta = pointer.ScrollDelta; evtData.useDragThreshold = eventSystem.pixelDragThreshold > 0; UpdateRay(pointer, evtData); pointer.Process(evtData, eventSystem.pixelDragThreshold * eventSystem.pixelDragThreshold, keyPresses, paused); } }
public void ClearPointerOver(IPointerDevice device) { foreach (var control in this.pointerOvers.ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Remove(control); control.RaiseEvent(e); } }
internal TextViewPosition?GetPositionFromMousePosition(IPointerDevice mouse) { var position = textEditor.TextArea.TextView.GetPosition(mouse.GetPosition(textEditor.TextArea.TextView) + textEditor.TextArea.TextView.ScrollOffset); if (position == null) { return(null); } var lineLength = textEditor.Document.GetLineByNumber(position.Value.Line).Length + 1; if (position.Value.Column == lineLength) { return(null); } return(position); }
internal ReferenceSegment GetReferenceSegmentAtMousePosition(IPointerDevice mouse) { if (referenceElementGenerator.References == null) { return(null); } TextViewPosition?position = GetPositionFromMousePosition(mouse); if (position == null) { return(null); } int offset = textEditor.Document.GetOffset(position.Value.Location); return(referenceElementGenerator.References.FindSegmentsContaining(offset).FirstOrDefault()); }
private void ClearPointerOver(IPointerDevice device, IInputRoot root) { foreach (var control in _pointerOvers.ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, Source = control, }; _pointerOvers.Remove(control); control.RaiseEvent(e); } root.PointerOverElement = null; }
internal TextViewPosition?GetPositionFromMousePosition() { IPointerDevice mouse = MainWindow.Instance.PlatformImpl.MouseDevice; var position = textEditor.TextArea.TextView.GetPosition(mouse.GetPosition(textEditor.TextArea.TextView) + textEditor.TextArea.TextView.ScrollOffset); if (position == null) { return(null); } var lineLength = textEditor.Document.GetLineByNumber(position.Value.Line).Length + 1; if (position.Value.Column == lineLength) { return(null); } return(position); }
private void SetPointerOver(IPointerDevice device, IInputRoot root, IInputElement element) { Contract.Requires <ArgumentNullException>(device != null); Contract.Requires <ArgumentNullException>(root != null); Contract.Requires <ArgumentNullException>(element != null); IInputElement branch = null; var e = new PointerEventArgs { RoutedEvent = InputElement.PointerEnterEvent, Device = device, }; var el = element; while (el != null) { if (el.IsPointerOver) { branch = el; break; } e.Source = el; el.RaiseEvent(e); el = (IInputElement)el.VisualParent; } el = root.PointerOverElement; e.RoutedEvent = InputElement.PointerLeaveEvent; while (el != null && el != branch) { e.Source = el; el.RaiseEvent(e); el = (IInputElement)el.VisualParent; } root.PointerOverElement = element; }
private void ClearPointerOver(IPointerDevice device, IInputRoot root) { Contract.Requires <ArgumentNullException>(device != null); Contract.Requires <ArgumentNullException>(root != null); var element = root.PointerOverElement; var e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, }; while (element != null) { e.Source = element; element.RaiseEvent(e); element = (IInputElement)element.VisualParent; } root.PointerOverElement = null; }
private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, Point p) { Contract.Requires <ArgumentNullException>(device != null); Contract.Requires <ArgumentNullException>(root != null); var element = root.InputHitTest(p); if (element != root.PointerOverElement) { if (element != null) { SetPointerOver(device, root, element); } else { ClearPointerOver(device, root); } } return(element); }
private void UpdateRay(IPointerDevice pointer, PointerEventData evtData) { var ray = evtData.pointerCurrentRaycast; if (pointer.IsDragging) { var rot = Quaternion.FromToRotation(pointer.LastDirection, pointer.Direction); ray.gameObject = evtData.pointerPress; ray.worldPosition = pointer.Origin + ray.distance * pointer.Direction; ray.worldNormal = rot * ray.worldNormal; ray.screenPosition = pointer.ScreenPoint; } else { RaycastAll(pointer, evtData); if (m_RaycastResultCache.Count > 0) { ray = m_RaycastResultCache[0]; evtData.hovered.Clear(); foreach (var r in m_RaycastResultCache) { evtData.hovered.Add(r.gameObject); } } else { ray.Clear(); ray.worldPosition = pointer.SmoothedWorldPoint; ray.distance = pointer.MinimumPointerDistance; ray.worldNormal = -pointer.Direction; ray.screenPosition = pointer.ScreenPoint; } } evtData.pointerCurrentRaycast = ray; }
public static void MoveEventCameraToPointer(IPointerDevice pointer) { EventCamera.transform.position = pointer.transform.position; EventCamera.transform.rotation = pointer.transform.rotation; EventCamera.farClipPlane = pointer.MaximumPointerDistance; }
private IReadOnlySet <PointerPoint> GetReleasedPointers(IPointerDevice device) { return(device.DownPointers); }
private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, IList<IInputElement> elements) { foreach (var control in _pointerOvers.Except(elements).ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, Source = control, }; _pointerOvers.Remove(control); control.RaiseEvent(e); } foreach (var control in elements.Except(_pointerOvers)) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerEnterEvent, Device = device, Source = control, }; _pointerOvers.Add(control); control.RaiseEvent(e); } root.PointerOverElement = elements.FirstOrDefault() ?? root; return root.PointerOverElement; }
private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, Point p) { var elements = root.GetInputElementsAt(p).ToList(); return SetPointerOver(device, root, elements); }
private Core.Collections.IReadOnlySet <PointerPoint> GetReleasedPointers(IPointerDevice device) { return(device.DownPointers); }
public PointerFoundEventArgs(IPointerDevice device) { this.device = device; }
private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, Point p) { var elements = root.GetInputElementsAt(p).ToList(); return(SetPointerOver(device, root, elements)); }
private void ClearPointerOver(IPointerDevice device) { foreach (var control in this.pointerOvers.ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Remove(control); control.RaiseEvent(e); } }
public static bool CapturePointer(this IInputElement element, IPointerDevice device) { device.Capture(element); return(device.Captured == element); }
private void SetPointerOver(IPointerDevice device, IInputElement element, Point p) { IEnumerable<IInputElement> hits = element.GetInputElementsAt(p); foreach (var control in this.pointerOvers.Except(hits).ToList()) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerLeaveEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Remove(control); control.RaiseEvent(e); } foreach (var control in hits.Except(this.pointerOvers)) { PointerEventArgs e = new PointerEventArgs { RoutedEvent = InputElement.PointerEnterEvent, Device = device, OriginalSource = control, Source = control, }; this.pointerOvers.Add(control); control.RaiseEvent(e); } }