private DockPane PaneAtPointNativeFloatingWindows(IDragSource source, double deltaX, double deltaY, out bool stopHitTest)
            {
                stopHitTest = false;

                FloatingWindowCollection floatingWindows = DockControl.FloatingWindows;
                Point pt = GetStartMousePosition(_overlayWindow);

                pt.Offset(deltaX, deltaY);
                for (int i = floatingWindows.Count - 1; i >= 0; i--)
                {
                    FloatingWindow floatingWindow = floatingWindows[i];
                    if (!floatingWindow.IsVisible)
                    {
                        continue;
                    }
                    NativeFloatingWindow nativeWindow = NativeFloatingWindow.GetNativeFloatingWindow(floatingWindow);
                    Rect windowBounds = nativeWindow.GetPreviewBounds(_overlayWindow);
                    stopHitTest = windowBounds.Contains(pt);
                    if (stopHitTest)
                    {
                        pt = GetStartMousePosition(nativeWindow);
                        pt.Offset(deltaX, deltaY);
                        var result = PaneFromHitTestResult(source, VisualTreeHelper.HitTest(nativeWindow, pt));
                        if (result == null || !source.CanDrop(result))
                        {
                            stopHitTest = false;
                            continue;
                        }
                        return(result);
                    }
                }

                return(null);
            }
Ejemplo n.º 2
0
            private void ShowOverlayWindow()
            {
                _overlayWindow = OverlayWindow.Show(DockControl);
                SetStartMousePosition(_overlayWindow, _overlayWindow.PointFromScreen(_startMousePoint));
                foreach (FloatingWindow floatingWindow in DockControl.FloatingWindows)
                {
                    if (!floatingWindow.IsVisible)
                    {
                        continue;
                    }

                    NativeFloatingWindow nativeWindow = NativeFloatingWindow.GetNativeFloatingWindow(floatingWindow);
                    if (nativeWindow == null)
                    {
                        continue;
                    }

                    Point pointFromScreen = _startMousePoint;
                    try
                    {
                        pointFromScreen = nativeWindow.PointFromScreen(_startMousePoint);
                    }
                    catch (Exception e)
                    {
                        Debug.WriteLine(@"pointFromScreen: " + pointFromScreen);
                        Debug.WriteLine(e);
                    }
                    SetStartMousePosition(nativeWindow, pointFromScreen);
                }
            }
Ejemplo n.º 3
0
 private void ShowOverlayWindow()
 {
     _overlayWindow = OverlayWindow.Show(DockControl);
     SetStartMousePosition(_overlayWindow, _overlayWindow.PointFromScreen(_startMousePoint));
     foreach (FloatingWindow floatingWindow in DockControl.FloatingWindows)
     {
         NativeFloatingWindow nativeWindow = NativeFloatingWindow.GetNativeFloatingWindow(floatingWindow);
         SetStartMousePosition(nativeWindow, nativeWindow.PointFromScreen(_startMousePoint));
     }
 }
Ejemplo n.º 4
0
            private void TargetAtPointNativeWindows(double deltaX, double deltaY)
            {
                Point pt = GetStartMousePosition(_overlayWindow);

                pt.Offset(deltaX, deltaY);
                VisualTreeHelper.HitTest(_overlayWindow, null,
                                         new HitTestResultCallback(TargetAtPointHitTestResultCallback),
                                         new PointHitTestParameters(pt));

                if (_targetAtPoint.HasValue)
                {
                    return;
                }

                FloatingWindowCollection floatingWindows = DockControl.FloatingWindows;

                for (int i = floatingWindows.Count - 1; i >= 0; i--)
                {
                    FloatingWindow floatingWindow = floatingWindows[i];
                    if (!floatingWindow.IsVisible)
                    {
                        continue;
                    }
                    NativeFloatingWindow nativeWindow = NativeFloatingWindow.GetNativeFloatingWindow(floatingWindow);
                    if (nativeWindow == null)
                    {
                        continue;
                    }
                    Rect windowBounds = nativeWindow.GetPreviewBounds(_overlayWindow);
                    if (windowBounds.Contains(pt))
                    {
                        pt = GetStartMousePosition(nativeWindow);
                        pt.Offset(deltaX, deltaY);
                        _targetAtPoint = TargetFromHitTestResult(VisualTreeHelper.HitTest(nativeWindow, pt));
                        if (!_targetAtPoint.HasValue)
                        {
                            _targetAtPoint = Target.Empty;
                        }
                        return;
                    }
                }
            }