/// <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
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #4
0
        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
            });
        }
Beispiel #5
0
 public PointerDeviceState(IPointerDevice pointerDevice)
 {
     SourceDevice     = pointerDevice;
     PressedPointers  = new ReadOnlySet <PointerPoint>(pressedPointers);
     ReleasedPointers = new ReadOnlySet <PointerPoint>(releasedPointers);
     DownPointers     = new ReadOnlySet <PointerPoint>(downPointers);
 }
Beispiel #6
0
 public static void ReleasePointerCapture(this IInputElement element, IPointerDevice device)
 {
     if (element == device.Captured)
     {
         device.Capture(null);
     }
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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));
 }
Beispiel #10
0
 public void AddPointer(IPointerDevice pointer)
 {
     if (pointer != null &&
         !Devices.Contains(pointer) &&
         !newDevices.Contains(pointer))
     {
         newDevices.Add(pointer);
     }
 }
Beispiel #11
0
        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);
            }
        }
Beispiel #12
0
        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);
            }
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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());
        }
Beispiel #15
0
        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;
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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;
        }
Beispiel #18
0
        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;
        }
Beispiel #19
0
        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);
        }
Beispiel #20
0
        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;
 }
Beispiel #22
0
 private IReadOnlySet <PointerPoint> GetReleasedPointers(IPointerDevice device)
 {
     return(device.DownPointers);
 }
Beispiel #23
0
        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;
        }
Beispiel #24
0
 private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, Point p)
 {
     var elements = root.GetInputElementsAt(p).ToList();
     return SetPointerOver(device, root, elements);
 }
Beispiel #25
0
        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;
        }
Beispiel #26
0
 private Core.Collections.IReadOnlySet <PointerPoint> GetReleasedPointers(IPointerDevice device)
 {
     return(device.DownPointers);
 }
Beispiel #27
0
 public PointerFoundEventArgs(IPointerDevice device)
 {
     this.device = device;
 }
Beispiel #28
0
        private IInputElement SetPointerOver(IPointerDevice device, IInputRoot root, Point p)
        {
            var elements = root.GetInputElementsAt(p).ToList();

            return(SetPointerOver(device, root, elements));
        }
Beispiel #29
0
        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);
            }
        }
Beispiel #30
0
 public static bool CapturePointer(this IInputElement element, IPointerDevice device)
 {
     device.Capture(element);
     return(device.Captured == element);
 }
Beispiel #31
0
        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);
            }
        }