private static void ConditionalClose(ClipPreviewBox gui) { if (!gui.Grabbed) { gui.Close(); } }
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); } } }