Esempio n. 1
0
 private IEnumerator <object> MainTask()
 {
     while (true)
     {
         var pressedPosition = inputWidget.LocalMousePosition();
         if (input.WasMousePressed())
         {
             if (placement.Root == placement.Parent)
             {
                 WindowDragBehaviour.CreateFor(placement, pressedPosition);
             }
             else
             {
                 var size            = inputWidget.Parent.AsWidget.Size;
                 var initialPosition = LocalMousePosition;
                 while (input.IsMousePressed() &&
                        LocalMousePosition.X > -Offset &&
                        LocalMousePosition.X < size.X + Offset &&
                        Mathf.Abs(LocalMousePosition.Y - initialPosition.Y) < Offset
                        )
                 {
                     yield return(null);
                 }
                 if (input.IsMousePressed())
                 {
                     OnUndock?.Invoke(pressedPosition, Application.DesktopMousePosition - (input.MousePosition - contentWidget.GlobalPosition));
                 }
             }
         }
         yield return(null);
     }
 }
Esempio n. 2
0
        private IEnumerator <object> MainTask()
        {
            while (true)
            {
                if (input.WasMousePressed())
                {
                    var  pressedPosition = inputWidget.LocalMousePosition();
                    var  windowPlacement = (WindowPlacement)placement.Root;
                    bool doUndock        = windowPlacement != placement &&
                                           (placement.Parent != windowPlacement || windowPlacement.Placements.Count > 1);
                    if (!doUndock)
                    {
                        var panelWindow = (WindowWidget)contentWidget.GetRoot();
                        var window      = panelWindow.Window;
                        if (window.State == WindowState.Maximized)
                        {
                            var initialPosition = LocalMousePosition;
                            while (input.IsMousePressed())
                            {
                                var diff = Mathf.Abs(LocalMousePosition - initialPosition);
                                if (diff.X >= DragThreshold || diff.Y >= DragThreshold)
                                {
                                    window.State    = WindowState.Normal;
                                    pressedPosition = new Vector2(window.ClientSize.X / 2, 10);
                                    WindowDragBehaviour.CreateFor(placement, pressedPosition);
                                    break;
                                }
                                yield return(null);
                            }
                            yield return(null);

                            continue;
                        }
                        WindowDragBehaviour.CreateFor(placement, pressedPosition);
                    }
                    else
                    {
                        var size            = inputWidget.Parent.AsWidget.Size;
                        var initialPosition = LocalMousePosition;
                        while (input.IsMousePressed() &&
                               LocalMousePosition.X > -DragThreshold &&
                               LocalMousePosition.X < size.X + DragThreshold &&
                               Mathf.Abs(LocalMousePosition.Y - initialPosition.Y) < DragThreshold
                               )
                        {
                            yield return(null);
                        }
                        if (input.IsMousePressed())
                        {
                            OnUndock?.Invoke(pressedPosition, Application.DesktopMousePosition - (input.MousePosition - contentWidget.GlobalPosition));
                        }
                    }
                }
                yield return(null);
            }
        }
Esempio n. 3
0
            IEnumerator <object> DragTask()
            {
                var dockSite     = DockSite.None;
                var dockSiteRect = new Rectangle();

                mainWidget.PostPresenter = new DelegatePresenter <Widget>(widget => {
                    if (dockSite != DockSite.None)
                    {
                        widget.PrepareRendererState();
                        Renderer.DrawRectOutline(dockSiteRect.A + Vector2.One, dockSiteRect.B - Vector2.One, ColorTheme.Current.Docking.DragRectagleOutline, 2);
                        Renderer.DrawRect(dockSiteRect.A + Vector2.One, dockSiteRect.B - Vector2.One, ColorTheme.Current.Docking.DragRectagleOutline.Transparentify(0.8f));
                    }
                });
                var         input         = panel.TitleWidget.Input;
                const float dockSiteWidth = 0.25f;
                var         dockSiteRects = new Rectangle[4] {
                    new Rectangle(Vector2.Zero, new Vector2(dockSiteWidth, 1)),
                    new Rectangle(Vector2.Zero, new Vector2(1, dockSiteWidth)),
                    new Rectangle(new Vector2(1 - dockSiteWidth, 0), Vector2.One),
                    new Rectangle(new Vector2(0, 1 - dockSiteWidth), Vector2.One)
                };
                ThumbnalWindow thumbWindow     = null;
                var            initialMousePos = input.MousePosition;
                var            mainWindow      = mainWidget.Window;

                while (input.IsMousePressed())
                {
                    var extent = mainWindow.ClientSize;
                    dockSite = DockSite.None;
                    for (int i = 0; i < 4; i++)
                    {
                        var r = dockSiteRects[i];
                        r.A *= extent;
                        r.B *= extent;
                        var p = Application.DesktopMousePosition - mainWindow.ClientPosition;
                        if (Application.Platform == PlatformId.Mac)
                        {
                            p.Y = mainWindow.ClientSize.Y - p.Y;
                        }
                        if (r.Contains(p))
                        {
                            dockSiteRect = r;
                            dockSite     = (DockSite)(i + 1);
                        }
                    }
                    if (dockSite == DockSite.None)
                    {
                        if (thumbWindow == null)
                        {
                            thumbWindow = new ThumbnalWindow(panel.Title);
                        }
                    }
                    else
                    {
                        mainWindow.Invalidate();
                        thumbWindow?.Dispose();
                        thumbWindow = null;
                    }
                    yield return(null);
                }
                mainWidget.PostPresenter = null;
                mainWindow.Invalidate();
                thumbWindow?.Dispose();
                thumbWindow = null;
                if (dockSite != DockSite.None)
                {
                    OnDock?.Invoke(dockSite);
                }
                else
                {
                    OnUndock?.Invoke(Application.DesktopMousePosition - (initialMousePos - panel.TitleWidget.GlobalPosition));
                }
            }