Scrolling capture hotkey now also supports start/stop

This commit is contained in:
Jaex 2023-11-05 18:24:42 +03:00
parent 0ab967f14b
commit 636f8ed8d4
6 changed files with 51 additions and 11 deletions

View file

@ -1759,7 +1759,7 @@ internal class Resources {
}
/// <summary>
/// Looks up a localized string similar to Scrolling capture.
/// Looks up a localized string similar to Start/Stop scrolling capture.
/// </summary>
internal static string HotkeyType_ScrollingCapture {
get {

View file

@ -187,7 +187,7 @@
<value>1 Hour</value>
</data>
<data name="HotkeyType_ScrollingCapture" xml:space="preserve">
<value>Scrolling capture</value>
<value>Start/Stop scrolling capture</value>
</data>
<data name="ReplCodeMenuEntry_iAa_Auto_increment_alphanumeric_all" xml:space="preserve">
<value>Auto increment alphanumeric case-sensitive (0 pad left using {n})</value>

View file

@ -646,7 +646,7 @@ Dosya boyutu: {2:n0} / {3:n0} KB</value>
<value>Bilgisayar</value>
</data>
<data name="HotkeyType_ScrollingCapture" xml:space="preserve">
<value>Kaydırarak yakalama</value>
<value>Kaydırarak yakalamayı başlat/durdur</value>
</data>
<data name="HotkeyType_ImageCombiner" xml:space="preserve">
<value>Resim birleştirici</value>

View file

@ -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<Bitmap> 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<Bitmap> 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)

View file

@ -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)

View file

@ -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)