mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-01 09:47:22 +13:00
ScrollingCaptureLightForm improvements
This commit is contained in:
parent
fb3cdcea72
commit
45b58a1b67
2 changed files with 36 additions and 19 deletions
|
@ -144,6 +144,14 @@ public void Activate()
|
|||
}
|
||||
}
|
||||
|
||||
public void BringToFront()
|
||||
{
|
||||
if (IsHandleCreated)
|
||||
{
|
||||
SetWindowPos(SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
public void Restore()
|
||||
{
|
||||
if (IsHandleCreated)
|
||||
|
|
|
@ -30,6 +30,7 @@ You should have received a copy of the GNU General Public License
|
|||
using System.Drawing.Imaging;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ShareX.ScreenCaptureLib
|
||||
|
@ -40,7 +41,7 @@ public partial class ScrollingCaptureLightForm : Form
|
|||
public Bitmap Result { get; private set; }
|
||||
|
||||
private List<Bitmap> images = new List<Bitmap>();
|
||||
private bool isCapturing, firstCapture;
|
||||
private bool isCapturing, scrollTop;
|
||||
private int currentScrollCount;
|
||||
private WindowInfo selectedWindow;
|
||||
private Rectangle selectedRectangle;
|
||||
|
@ -86,7 +87,9 @@ private void StartCapture()
|
|||
if (!isCapturing)
|
||||
{
|
||||
isCapturing = true;
|
||||
firstCapture = true;
|
||||
scrollTop = true;
|
||||
// TODO: Translate
|
||||
btnCapture.Text = "Stop";
|
||||
WindowState = FormWindowState.Minimized;
|
||||
Reset();
|
||||
selectedWindow.Activate();
|
||||
|
@ -96,16 +99,20 @@ private void StartCapture()
|
|||
}
|
||||
}
|
||||
|
||||
private void StopCapture()
|
||||
private async Task StopCapture()
|
||||
{
|
||||
if (isCapturing)
|
||||
{
|
||||
tCapture.Stop();
|
||||
// TODO: Translate
|
||||
btnCapture.Text = "Capture...";
|
||||
btnCapture.Enabled = false;
|
||||
this.ForceActivate();
|
||||
|
||||
Result = CombineImages(images);
|
||||
Result = await CombineImagesAsync(images);
|
||||
pbOutput.Image = Result;
|
||||
|
||||
btnCapture.Enabled = true;
|
||||
isCapturing = false;
|
||||
}
|
||||
}
|
||||
|
@ -148,13 +155,8 @@ private void SelectWindow()
|
|||
WindowState = FormWindowState.Minimized;
|
||||
Thread.Sleep(250);
|
||||
|
||||
SimpleWindowInfo simpleWindowInfo = RegionCaptureTasks.GetWindowInfo(new RegionCaptureOptions());
|
||||
|
||||
if (simpleWindowInfo != null)
|
||||
if (RegionCaptureTasks.GetRectangleRegion(out selectedRectangle, out selectedWindow, new RegionCaptureOptions()))
|
||||
{
|
||||
selectedWindow = new WindowInfo(simpleWindowInfo.Handle);
|
||||
selectedRectangle = simpleWindowInfo.Rectangle;
|
||||
|
||||
StartCapture();
|
||||
}
|
||||
else
|
||||
|
@ -163,6 +165,11 @@ private void SelectWindow()
|
|||
}
|
||||
}
|
||||
|
||||
private async Task<Bitmap> CombineImagesAsync(List<Bitmap> images)
|
||||
{
|
||||
return await Task.Run(() => CombineImages(images));
|
||||
}
|
||||
|
||||
private Bitmap CombineImages(List<Bitmap> images)
|
||||
{
|
||||
Bitmap result = (Bitmap)images[0].Clone();
|
||||
|
@ -253,11 +260,11 @@ private Bitmap CombineImages(List<Bitmap> images)
|
|||
return result;
|
||||
}
|
||||
|
||||
private void btnCapture_Click(object sender, EventArgs e)
|
||||
private async void btnCapture_Click(object sender, EventArgs e)
|
||||
{
|
||||
if (isCapturing)
|
||||
{
|
||||
StopCapture();
|
||||
await StopCapture();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -270,11 +277,11 @@ private void btnOptions_Click(object sender, EventArgs e)
|
|||
|
||||
}
|
||||
|
||||
private void tCapture_Tick(object sender, EventArgs e)
|
||||
private async void tCapture_Tick(object sender, EventArgs e)
|
||||
{
|
||||
if (firstCapture)
|
||||
if (scrollTop)
|
||||
{
|
||||
firstCapture = false;
|
||||
scrollTop = false;
|
||||
tCapture.Interval = Options.ScrollDelay;
|
||||
|
||||
InputHelpers.SendKeyPress(VirtualKeyCode.HOME);
|
||||
|
@ -293,11 +300,13 @@ private void tCapture_Tick(object sender, EventArgs e)
|
|||
|
||||
if (currentScrollCount == Options.MaximumScrollCount || (Options.AutoDetectScrollEnd && IsScrollReachedBottom(selectedWindow.Handle)))
|
||||
{
|
||||
StopCapture();
|
||||
await StopCapture();
|
||||
}
|
||||
else
|
||||
{
|
||||
InputHelpers.SendMouseWheel(-120 * 2);
|
||||
currentScrollCount++;
|
||||
}
|
||||
|
||||
InputHelpers.SendMouseWheel(-120 * 2);
|
||||
currentScrollCount++;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue