Пример #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);
     }
 }
Пример #2
0
        private void CreateDragBehaviour(Placement placement, Widget inputWidget, Widget contentWidget)
        {
            var db = new DragBehaviour(inputWidget, contentWidget, placement);

            db.OnUndock += (positionOffset, windowPosition) => {
                var panelWindow     = (WindowWidget)contentWidget.GetRoot();
                var windowPlacement = Model.GetWindowByPlacement(placement);
                if (windowPlacement.Root.GetPanelPlacements().Count(p => !p.Hidden) > 1)
                {
                    var globalSize = placement.CalcGlobalStretch() * panelWindow.Size;
                    var wrapper    = new WindowPlacement {
                        Size = new Vector2(Mathf.Max(panelMinWidth, globalSize.X), globalSize.Y)
                    };
                    placement.Unlink();
                    windowPlacement.Root.RemoveRedundantNodes();
                    Model.AddWindow(wrapper);
                    wrapper.Placements.Add(placement);
                    wrapper.Stretches.Add(1);
#if MAC
                    wrapper.Position = windowPosition - new Vector2(0, wrapper.Size.Y);
#else
                    wrapper.Position = windowPosition;
#endif
                    RefreshWindow(windowPlacement);
                    CreateFloatingWindow(wrapper);
                    RefreshWindow(wrapper);
                }
                WindowDragBehaviour.CreateFor(placement, positionOffset);
            };
        }
Пример #3
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);
            }
        }