diff --git a/ShareX.HelpersLib/Properties/Resources.Designer.cs b/ShareX.HelpersLib/Properties/Resources.Designer.cs index 2542a16c2..947f11161 100644 --- a/ShareX.HelpersLib/Properties/Resources.Designer.cs +++ b/ShareX.HelpersLib/Properties/Resources.Designer.cs @@ -1759,7 +1759,7 @@ internal class Resources { } /// - /// Looks up a localized string similar to Scrolling capture. + /// Looks up a localized string similar to Start/Stop scrolling capture. /// internal static string HotkeyType_ScrollingCapture { get { diff --git a/ShareX.HelpersLib/Properties/Resources.resx b/ShareX.HelpersLib/Properties/Resources.resx index a6ea116eb..6afdee429 100644 --- a/ShareX.HelpersLib/Properties/Resources.resx +++ b/ShareX.HelpersLib/Properties/Resources.resx @@ -187,7 +187,7 @@ 1 Hour - Scrolling capture + Start/Stop scrolling capture Auto increment alphanumeric case-sensitive (0 pad left using {n}) diff --git a/ShareX.HelpersLib/Properties/Resources.tr.resx b/ShareX.HelpersLib/Properties/Resources.tr.resx index 0fa1ee95d..77e9c7e6d 100644 --- a/ShareX.HelpersLib/Properties/Resources.tr.resx +++ b/ShareX.HelpersLib/Properties/Resources.tr.resx @@ -646,7 +646,7 @@ Dosya boyutu: {2:n0} / {3:n0} KB Bilgisayar - Kaydırarak yakalama + Kaydırarak yakalamayı başlat/durdur Resim birleştirici diff --git a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs index 31ff649b8..d8cd727ff 100644 --- a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs @@ -34,6 +34,10 @@ namespace ShareX.ScreenCaptureLib { public partial class ScrollingCaptureForm : Form { + private static readonly object lockObject = new object(); + + private static ScrollingCaptureForm instance; + public event Action UploadRequested; public ScrollingCaptureOptions Options { get; private set; } @@ -41,7 +45,7 @@ public partial class ScrollingCaptureForm : Form private ScrollingCaptureManager manager; private Point dragStartPosition; - public ScrollingCaptureForm(ScrollingCaptureOptions options) + private ScrollingCaptureForm(ScrollingCaptureOptions options) { Options = options; @@ -51,6 +55,43 @@ public ScrollingCaptureForm(ScrollingCaptureOptions options) manager = new ScrollingCaptureManager(Options); } + public static async Task StartStopScrollingCapture(ScrollingCaptureOptions options, Action uploadRequested = null) + { + if (instance == null || instance.IsDisposed) + { + lock (lockObject) + { + if (instance == null || instance.IsDisposed) + { + instance = new ScrollingCaptureForm(options); + + if (uploadRequested != null) + { + instance.UploadRequested += uploadRequested; + } + + instance.Show(); + } + } + } + else + { + await instance.StartStopScrollingCapture(); + } + } + + public async Task StartStopScrollingCapture() + { + if (manager.IsCapturing) + { + manager.StopCapture(); + } + else + { + await SelectWindow(); + } + } + protected override void Dispose(bool disposing) { if (disposing) diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index da877f947..cd524aabd 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -1621,9 +1621,9 @@ private void tsmiScreenRecordingGIF_Click(object sender, EventArgs e) TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.Region); } - private void tsmiScrollingCapture_Click(object sender, EventArgs e) + private async void tsmiScrollingCapture_Click(object sender, EventArgs e) { - TaskHelpers.OpenScrollingCapture(); + await TaskHelpers.OpenScrollingCapture(); } private void tsmiAutoCapture_Click(object sender, EventArgs e) diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs index c7e946f23..a3eefaebb 100644 --- a/ShareX/TaskHelpers.cs +++ b/ShareX/TaskHelpers.cs @@ -129,7 +129,7 @@ public static async Task ExecuteJob(TaskSettings taskSettings, HotkeyType job, C new CaptureLastRegion().Capture(safeTaskSettings); break; case HotkeyType.ScrollingCapture: - OpenScrollingCapture(safeTaskSettings); + await OpenScrollingCapture(safeTaskSettings); break; case HotkeyType.AutoCapture: OpenAutoCapture(safeTaskSettings); @@ -692,13 +692,12 @@ public static void AbortScreenRecording() ScreenRecordManager.AbortRecording(); } - public static void OpenScrollingCapture(TaskSettings taskSettings = null) + public static async Task OpenScrollingCapture(TaskSettings taskSettings = null) { if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings(); - ScrollingCaptureForm scrollingCaptureForm = new ScrollingCaptureForm(taskSettings.CaptureSettingsReference.ScrollingCaptureOptions); - scrollingCaptureForm.UploadRequested += img => UploadManager.RunImageTask(img, taskSettings); - scrollingCaptureForm.Show(); + await ScrollingCaptureForm.StartStopScrollingCapture(taskSettings.CaptureSettingsReference.ScrollingCaptureOptions, + img => UploadManager.RunImageTask(img, taskSettings)); } public static void OpenAutoCapture(TaskSettings taskSettings = null)