Пример #1
0
 private static void ConditionalClose(ClipPreviewBox gui)
 {
     if (!gui.Grabbed)
     {
         gui.Close();
     }
 }
Пример #2
0
        public static void Show()
        {
            var clip = History[pointer];
            var desc = clip.HasImage ? $"{pointer + 1}:" : $"{pointer + 1}: {clip}";

            if (LastGui?.Grabbed ?? false)
            {
                Timer.Stop();
            }
            if (Timer?.Running ?? false)
            {
                Timer.Adjust(Timeout);
                if (clip.HasImage)
                {
                    LastGui.SetImage(clip.GetImage());
                }
                else
                {
                    LastGui.SetImage(null);
                }
                LastGui.SetDesc(desc);
                return;
            }

            ClipPreviewBox gui = null;

            if (clip.HasImage)
            {
                gui = new ClipPreviewBox(clip.GetImage(), desc, Mouse.Position + mouseOffset);
            }
            else
            {
                gui = new ClipPreviewBox(desc, Mouse.Position + mouseOffset);
            }

            gui.Launch();
            Timer = new AsyncTimer(() => ConditionalClose(gui));
            Timer.Start(Timeout);
            LastGui = gui;
            Loop();

            async void Loop()
            {
                await gui.WaitForForm();

                while (gui.IsAlive && !gui.Grabbed)
                {
                    gui.Window.Move(gui.Window.Area.Point.Lerp(Mouse.Position + mouseOffset, 0.1));
                    await Task.Delay(5);
                }
            }
        }