Added delay setting to webpage capture, saving this settings to application config

This commit is contained in:
Jaex 2015-06-26 18:26:40 +03:00
parent 773b626d2b
commit a3d654269a
8 changed files with 177 additions and 39 deletions

View file

@ -24,6 +24,7 @@
#endregion License Information (GPL v3)
using System;
using System.Threading;
using System.Threading.Tasks;
namespace ShareX.HelpersLib
@ -50,5 +51,17 @@ public static Task Run(Action thread, Action completed, bool completedInFormThre
return Run(thread).ContinueWith(task => completed(), taskScheduler);
}
public static void RunDelayed(Action thread, int delay)
{
if (delay > 0)
{
Run(() => Thread.Sleep(delay), thread);
}
else
{
thread();
}
}
}
}

View file

@ -55,12 +55,6 @@
<Compile Include="Forms\RectangleTransparent.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\WebpageCaptureForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\WebpageCaptureForm.Designer.cs">
<DependentUpon>WebpageCaptureForm.cs</DependentUpon>
</Compile>
<Compile Include="MonitorRegion.cs" />
<Compile Include="MonitorRegionDefaultCreator.cs" />
<Compile Include="RectangleAnnotateOptions.cs" />
@ -135,9 +129,6 @@
<Content Include="Resources\Crosshair.cur" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Forms\WebpageCaptureForm.resx">
<DependentUpon>WebpageCaptureForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.de.resx">
<SubType>Designer</SubType>
</EmbeddedResource>

View file

@ -29,6 +29,7 @@
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
namespace ShareX.ScreenCaptureLib
@ -37,6 +38,8 @@ public class WebpageCapture : IDisposable
{
public event Action<Bitmap> CaptureCompleted;
public int CaptureDelay { get; set; }
private WebBrowser webBrowser;
public WebpageCapture()
@ -62,6 +65,14 @@ public void CapturePage(string url, Size browserSize)
}
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser.ReadyState == WebBrowserReadyState.Complete)
{
TaskEx.RunDelayed(GetWebpageBitmap, CaptureDelay);
}
}
private void GetWebpageBitmap()
{
Rectangle rect = webBrowser.Document.Body.ScrollRectangle;
webBrowser.Size = new Size(rect.Width, rect.Height);

View file

@ -212,5 +212,12 @@ public ApplicationConfig()
public List<ScriptInfo> AutomateScripts = new List<ScriptInfo>();
#endregion Automate Form
#region Webpage Capture Form
public Size WebpageCaptureBrowserSize = Size.Empty;
public float WebpageCaptureDelay = 0f;
#endregion Webpage Capture Form
}
}

View file

@ -1,4 +1,4 @@
namespace ShareX.ScreenCaptureLib
namespace ShareX
{
partial class WebpageCaptureForm
{
@ -44,10 +44,13 @@ private void InitializeComponent()
this.nudWebpageWidth = new System.Windows.Forms.NumericUpDown();
this.nudWebpageHeight = new System.Windows.Forms.NumericUpDown();
this.lblWebpageX = new System.Windows.Forms.Label();
this.lblCaptureDelay = new System.Windows.Forms.Label();
this.nudCaptureDelay = new System.Windows.Forms.NumericUpDown();
((System.ComponentModel.ISupportInitialize)(this.pbResult)).BeginInit();
this.pResult.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudWebpageWidth)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudWebpageHeight)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.nudCaptureDelay)).BeginInit();
this.SuspendLayout();
//
// txtURL
@ -107,6 +110,7 @@ private void InitializeComponent()
0,
0,
0});
this.nudWebpageWidth.ValueChanged += new System.EventHandler(this.nudWebpageWidth_ValueChanged);
//
// nudWebpageHeight
//
@ -127,17 +131,42 @@ private void InitializeComponent()
0,
0,
0});
this.nudWebpageHeight.ValueChanged += new System.EventHandler(this.nudWebpageHeight_ValueChanged);
//
// lblWebpageX
//
resources.ApplyResources(this.lblWebpageX, "lblWebpageX");
this.lblWebpageX.Name = "lblWebpageX";
//
// lblCaptureDelay
//
resources.ApplyResources(this.lblCaptureDelay, "lblCaptureDelay");
this.lblCaptureDelay.Name = "lblCaptureDelay";
//
// nudCaptureDelay
//
this.nudCaptureDelay.DecimalPlaces = 1;
this.nudCaptureDelay.Increment = new decimal(new int[] {
5,
0,
0,
65536});
resources.ApplyResources(this.nudCaptureDelay, "nudCaptureDelay");
this.nudCaptureDelay.Maximum = new decimal(new int[] {
10,
0,
0,
0});
this.nudCaptureDelay.Name = "nudCaptureDelay";
this.nudCaptureDelay.ValueChanged += new System.EventHandler(this.nudCaptureDelay_ValueChanged);
//
// WebpageCaptureForm
//
this.AcceptButton = this.btnCapture;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.nudCaptureDelay);
this.Controls.Add(this.lblCaptureDelay);
this.Controls.Add(this.nudWebpageHeight);
this.Controls.Add(this.lblWebpageX);
this.Controls.Add(this.nudWebpageWidth);
@ -152,6 +181,7 @@ private void InitializeComponent()
this.pResult.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.nudWebpageWidth)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudWebpageHeight)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.nudCaptureDelay)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
@ -168,5 +198,7 @@ private void InitializeComponent()
private System.Windows.Forms.NumericUpDown nudWebpageWidth;
private System.Windows.Forms.NumericUpDown nudWebpageHeight;
private System.Windows.Forms.Label lblWebpageX;
private System.Windows.Forms.Label lblCaptureDelay;
private System.Windows.Forms.NumericUpDown nudCaptureDelay;
}
}

View file

@ -24,6 +24,7 @@
#endregion License Information (GPL v3)
using ShareX.HelpersLib;
using ShareX.ScreenCaptureLib;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -33,7 +34,7 @@
using System.Text;
using System.Windows.Forms;
namespace ShareX.ScreenCaptureLib
namespace ShareX
{
public partial class WebpageCaptureForm : Form
{
@ -45,14 +46,12 @@ public WebpageCaptureForm()
{
InitializeComponent();
Icon = ShareXResources.Icon;
CheckClipboard();
nudWebpageWidth.Value = Screen.PrimaryScreen.Bounds.Width.Between((int)nudWebpageWidth.Minimum, (int)nudWebpageWidth.Maximum);
nudWebpageHeight.Value = Screen.PrimaryScreen.Bounds.Height.Between((int)nudWebpageHeight.Minimum, (int)nudWebpageHeight.Maximum);
LoadSettings();
webpageCapture = new WebpageCapture();
webpageCapture.CaptureCompleted += webpageCapture_CaptureCompleted;
}
private void CheckClipboard()
private void LoadSettings()
{
if (Clipboard.ContainsText())
{
@ -63,6 +62,43 @@ private void CheckClipboard()
txtURL.Text = text;
}
}
Size browserSize = Program.Settings.WebpageCaptureBrowserSize;
if (browserSize.Width == 0) browserSize.Width = Screen.PrimaryScreen.Bounds.Width;
nudWebpageWidth.Value = browserSize.Width.Between((int)nudWebpageWidth.Minimum, (int)nudWebpageWidth.Maximum);
if (browserSize.Height == 0) browserSize.Height = Screen.PrimaryScreen.Bounds.Height;
nudWebpageHeight.Value = browserSize.Height.Between((int)nudWebpageHeight.Minimum, (int)nudWebpageHeight.Maximum);
nudCaptureDelay.Value = (decimal)Program.Settings.WebpageCaptureDelay.Between((float)nudCaptureDelay.Minimum, (float)nudCaptureDelay.Maximum);
btnCapture.Enabled = txtURL.TextLength > 0;
}
private void webpageCapture_CaptureCompleted(Bitmap bmp)
{
pbResult.Image = bmp;
IsBusy = false;
btnCapture.Enabled = txtURL.Enabled = !IsBusy;
}
private void txtURL_TextChanged(object sender, EventArgs e)
{
btnCapture.Enabled = txtURL.TextLength > 0;
}
private void nudWebpageWidth_ValueChanged(object sender, EventArgs e)
{
Program.Settings.WebpageCaptureBrowserSize.Width = (int)nudWebpageWidth.Value;
}
private void nudWebpageHeight_ValueChanged(object sender, EventArgs e)
{
Program.Settings.WebpageCaptureBrowserSize.Height = (int)nudWebpageHeight.Value;
}
private void nudCaptureDelay_ValueChanged(object sender, EventArgs e)
{
Program.Settings.WebpageCaptureDelay = (float)nudCaptureDelay.Value;
}
private void btnCapture_Click(object sender, EventArgs e)
@ -75,20 +111,8 @@ private void btnCapture_Click(object sender, EventArgs e)
pbResult.Image = null;
}
webpageCapture.CaptureDelay = (int)nudCaptureDelay.Value * 1000;
webpageCapture.CapturePage(txtURL.Text, new Size((int)nudWebpageWidth.Value, (int)nudWebpageWidth.Value));
}
private void webpageCapture_CaptureCompleted(Bitmap bmp)
{
pbResult.Image = bmp;
IsBusy = false;
btnCapture.Enabled = txtURL.Enabled = !IsBusy;
}
private void txtURL_TextChanged(object sender, EventArgs e)
{
btnCapture.Enabled = txtURL.TextLength > 0;
}
}
}

View file

@ -142,7 +142,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtURL.ZOrder" xml:space="preserve">
<value>7</value>
<value>9</value>
</data>
<data name="lblURL.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -169,10 +169,10 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblURL.ZOrder" xml:space="preserve">
<value>6</value>
<value>8</value>
</data>
<data name="btnCapture.Location" type="System.Drawing.Point, System.Drawing">
<value>249, 35</value>
<value>336, 35</value>
</data>
<data name="btnCapture.Size" type="System.Drawing.Size, System.Drawing">
<value>112, 23</value>
@ -193,7 +193,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnCapture.ZOrder" xml:space="preserve">
<value>5</value>
<value>7</value>
</data>
<data name="pbResult.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
@ -244,7 +244,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;pResult.ZOrder" xml:space="preserve">
<value>4</value>
<value>6</value>
</data>
<data name="lblWebpageSize.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -271,10 +271,10 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblWebpageSize.ZOrder" xml:space="preserve">
<value>3</value>
<value>5</value>
</data>
<data name="nudWebpageWidth.Location" type="System.Drawing.Point, System.Drawing">
<value>88, 36</value>
<value>80, 36</value>
</data>
<data name="nudWebpageWidth.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 20</value>
@ -295,10 +295,10 @@
<value>$this</value>
</data>
<data name="&gt;&gt;nudWebpageWidth.ZOrder" xml:space="preserve">
<value>2</value>
<value>4</value>
</data>
<data name="nudWebpageHeight.Location" type="System.Drawing.Point, System.Drawing">
<value>176, 36</value>
<value>168, 36</value>
</data>
<data name="nudWebpageHeight.Size" type="System.Drawing.Size, System.Drawing">
<value>64, 20</value>
@ -319,7 +319,7 @@
<value>$this</value>
</data>
<data name="&gt;&gt;nudWebpageHeight.ZOrder" xml:space="preserve">
<value>0</value>
<value>2</value>
</data>
<data name="lblWebpageX.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -328,7 +328,7 @@
<value>NoControl</value>
</data>
<data name="lblWebpageX.Location" type="System.Drawing.Point, System.Drawing">
<value>159, 40</value>
<value>151, 40</value>
</data>
<data name="lblWebpageX.Size" type="System.Drawing.Size, System.Drawing">
<value>12, 13</value>
@ -349,8 +349,59 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblWebpageX.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="lblCaptureDelay.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblCaptureDelay.Location" type="System.Drawing.Point, System.Drawing">
<value>240, 40</value>
</data>
<data name="lblCaptureDelay.Size" type="System.Drawing.Size, System.Drawing">
<value>37, 13</value>
</data>
<data name="lblCaptureDelay.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="lblCaptureDelay.Text" xml:space="preserve">
<value>Delay:</value>
</data>
<data name="&gt;&gt;lblCaptureDelay.Name" xml:space="preserve">
<value>lblCaptureDelay</value>
</data>
<data name="&gt;&gt;lblCaptureDelay.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblCaptureDelay.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;lblCaptureDelay.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="nudCaptureDelay.Location" type="System.Drawing.Point, System.Drawing">
<value>280, 36</value>
</data>
<data name="nudCaptureDelay.Size" type="System.Drawing.Size, System.Drawing">
<value>48, 20</value>
</data>
<data name="nudCaptureDelay.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="nudCaptureDelay.TextAlign" type="System.Windows.Forms.HorizontalAlignment, System.Windows.Forms">
<value>Center</value>
</data>
<data name="&gt;&gt;nudCaptureDelay.Name" xml:space="preserve">
<value>nudCaptureDelay</value>
</data>
<data name="&gt;&gt;nudCaptureDelay.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nudCaptureDelay.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;nudCaptureDelay.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>

View file

@ -179,6 +179,12 @@
<Compile Include="Forms\AfterUploadForm.designer.cs">
<DependentUpon>AfterUploadForm.cs</DependentUpon>
</Compile>
<Compile Include="Forms\WebpageCaptureForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Forms\WebpageCaptureForm.Designer.cs">
<DependentUpon>WebpageCaptureForm.cs</DependentUpon>
</Compile>
<Compile Include="HotkeysConfig.cs" />
<Compile Include="HotkeyManager.cs" />
<Compile Include="HotkeySettings.cs" />
@ -718,6 +724,9 @@
<EmbeddedResource Include="Forms\WatchFolderForm.zh-CN.resx">
<DependentUpon>WatchFolderForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Forms\WebpageCaptureForm.resx">
<DependentUpon>WebpageCaptureForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.de.resx" />
<EmbeddedResource Include="Properties\Resources.es.resx" />
<EmbeddedResource Include="Properties\Resources.fr.resx" />