示例#1
0
 public static bool Disable(Window window, bool instant = false)
 {
     if (!HiddenWindows.ContainsKey(window))
     {
         return(false);
     }
     if (instant)
     {
         HiddenWindows[window].Deactivate();
     }
     HiddenWindows.Remove(window);
     return(true);
 }
示例#2
0
        private async void Loop()
        {
            while (HiddenWindows.ContainsKey(Window) && Window.Exists)
            {
                await Task.Delay(100);

                if (!State && PreviewArea.Contains(Mouse.Position) && Window.IsOnCurrentDesktop)
                {
                    if (Window.HasAnimation())
                    {
                        Window.StopAnimation();
                        Window.Move(HiddenArea);
                        Window.SetOpacity(0);
                        await Task.Yield();
                    }

                    PreviewShow();
                    bool flick = await WaitForFlick();

                    if (flick)
                    {
                        Show();
                    }
                    else
                    {
                        PreviewHide();
                    }
                    await WaitForLeave();
                }
                else if (State && (!ActiveArea.Contains(Mouse.Position) || !Window.IsOnCurrentDesktop))
                {
                    Hide();
                }
            }

            Program.OnExit -= Deactivate;
            if (noCleanup)
            {
                return;
            }
            if (!Window.Exists)
            {
                return;
            }
            if (!IsAlwaysOnTop)
            {
                Window.SetAlwaysOnTop(false);
            }
            Show();
        }
示例#3
0
        public static async Task <bool> EnableAsync(Window window, EdgeType direction)
        {
            if (direction.IsCorner())
            {
                throw new ArgumentException($"{nameof(direction)} cannot be a corner");
            }
            if (HiddenWindows.ContainsKey(window))
            {
                Notification($"{window.Title}\nis already in a hide animation");
                return(false);
            }

            if (direction.IsNone() is bool manual && manual)
            {
                direction = await GetInput();

                if (direction.IsNone())
                {
                    return(false);
                }
            }

            window.Restore();
            var monitor = window.Monitor.Area;
            var hider   = new WindowDocker(window);

            hider.IsAlwaysOnTop = window.IsAlwaysOnTop;
            hider.ActiveArea    = hider.HiddenArea = window.Area;

            hider.ActiveArea  = hider.ActiveArea.SetEdge(monitor.GetEdge(direction));
            hider.HiddenArea  = hider.HiddenArea.SetEdge(direction.Reverse(), monitor.GetEdge(direction).Pos);
            hider.PreviewArea = hider.HiddenArea.SetEdge(direction, direction.IsTopOrLeft() ? previewWidth : -previewWidth, relative: true);
            hider.PeekArea    = hider.HiddenArea.SetEdge(direction, direction.IsTopOrLeft() ? peekWidth : -peekWidth, relative: true);

            if (manual)
            {
                Notification("Hide animation set succesfully");
            }
            HiddenWindows.Add(window, hider);
            Program.OnExit += hider.Deactivate;
            window.SetAlwaysOnTop(true);
            hider.State = false;
            hider.Hide();
            hider.Loop();

            return(true);
        }
示例#4
0
 public static bool IsEnabled(Window window) => HiddenWindows.ContainsKey(window);