From 55bbc1001c3fa2c08e1c4288555afbec1a56780c Mon Sep 17 00:00:00 2001 From: Jaex Date: Fri, 25 Sep 2015 11:12:03 +0300 Subject: [PATCH] Added scrolling capture form --- ShareX.HelpersLib/Native/NativeEnums.cs | 19 ++ .../Forms/RectangleRegion.cs | 4 +- .../Forms/ScrollingCaptureForm.Designer.cs | 94 +++++++++- .../Forms/ScrollingCaptureForm.cs | 103 ++++++++++- .../Forms/ScrollingCaptureForm.resx | 3 + .../ScrollingCaptureOptions.cs | 38 ++++ .../ShareX.ScreenCaptureLib.csproj | 1 + ShareX.ScreenCaptureLib/WindowInfo.cs | 5 + ShareX/Forms/MainForm.Designer.cs | 42 +++-- ShareX/Forms/MainForm.cs | 5 + ShareX/Forms/MainForm.resx | 100 ++++++----- ShareX/Properties/Resources.Designer.cs | 10 ++ ShareX/Properties/Resources.resx | 167 +++++++++--------- ShareX/Resources/ui-scroll-pane-image.png | Bin 0 -> 599 bytes ShareX/ShareX.csproj | 1 + ShareX/TaskHelpers.cs | 7 + ShareX/TaskSettings.cs | 6 + 17 files changed, 459 insertions(+), 146 deletions(-) create mode 100644 ShareX.ScreenCaptureLib/ScrollingCaptureOptions.cs create mode 100644 ShareX/Resources/ui-scroll-pane-image.png diff --git a/ShareX.HelpersLib/Native/NativeEnums.cs b/ShareX.HelpersLib/Native/NativeEnums.cs index ea8d63084..662d96125 100644 --- a/ShareX.HelpersLib/Native/NativeEnums.cs +++ b/ShareX.HelpersLib/Native/NativeEnums.cs @@ -2796,4 +2796,23 @@ public enum FlashWindow : uint /// FLASHW_TIMERNOFG = 12 } + + public enum ScrollBarCommands + { + SB_LINEUP = 0, + SB_LINELEFT = 0, + SB_LINEDOWN = 1, + SB_LINERIGHT = 1, + SB_PAGEUP = 2, + SB_PAGELEFT = 2, + SB_PAGEDOWN = 3, + SB_PAGERIGHT = 3, + SB_THUMBPOSITION = 4, + SB_THUMBTRACK = 5, + SB_TOP = 6, + SB_LEFT = 6, + SB_BOTTOM = 7, + SB_RIGHT = 7, + SB_ENDSCROLL = 8 + } } \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs b/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs index 912657f5f..8b0fcdde7 100644 --- a/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs +++ b/ShareX.ScreenCaptureLib/Forms/RectangleRegion.cs @@ -78,11 +78,11 @@ public RectangleRegion() AreaManager = new AreaManager(this); KeyDown += RectangleRegion_KeyDown; - MouseDown += RectangleRegion_MouseDown; + MouseUp += RectangleRegion_MouseUp; MouseWheel += RectangleRegion_MouseWheel; } - private void RectangleRegion_MouseDown(object sender, MouseEventArgs e) + private void RectangleRegion_MouseUp(object sender, MouseEventArgs e) { if ((OneClickMode || ScreenColorPickerMode) && e.Button == MouseButtons.Left) { diff --git a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.Designer.cs b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.Designer.cs index 3a97e8678..089ce88ef 100644 --- a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.Designer.cs +++ b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.Designer.cs @@ -28,7 +28,17 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + this.components = new System.ComponentModel.Container(); this.btnSelectHandle = new System.Windows.Forms.Button(); + this.lblControlText = new System.Windows.Forms.Label(); + this.btnCapture = new System.Windows.Forms.Button(); + this.captureTimer = new System.Windows.Forms.Timer(this.components); + this.nudScrollDelay = new System.Windows.Forms.NumericUpDown(); + this.nudMaximumScrollCount = new System.Windows.Forms.NumericUpDown(); + this.lblScrollDelay = new System.Windows.Forms.Label(); + this.lblMaximumScrollCount = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.nudScrollDelay)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudMaximumScrollCount)).BeginInit(); this.SuspendLayout(); // // btnSelectHandle @@ -39,21 +49,103 @@ private void InitializeComponent() this.btnSelectHandle.TabIndex = 0; this.btnSelectHandle.Text = "Select window or control to scroll"; this.btnSelectHandle.UseVisualStyleBackColor = true; + this.btnSelectHandle.Click += new System.EventHandler(this.btnSelectHandle_Click); + // + // lblControlText + // + this.lblControlText.Location = new System.Drawing.Point(320, 13); + this.lblControlText.Name = "lblControlText"; + this.lblControlText.Size = new System.Drawing.Size(240, 19); + this.lblControlText.TabIndex = 1; + this.lblControlText.Text = "Text"; + // + // btnCapture + // + this.btnCapture.Enabled = false; + this.btnCapture.Location = new System.Drawing.Point(8, 104); + this.btnCapture.Name = "btnCapture"; + this.btnCapture.Size = new System.Drawing.Size(152, 23); + this.btnCapture.TabIndex = 2; + this.btnCapture.Text = "Start capture"; + this.btnCapture.UseVisualStyleBackColor = true; + this.btnCapture.Click += new System.EventHandler(this.btnCapture_Click); + // + // captureTimer + // + this.captureTimer.Tick += new System.EventHandler(this.captureTimer_Tick); + // + // nudScrollDelay + // + this.nudScrollDelay.Location = new System.Drawing.Point(136, 44); + this.nudScrollDelay.Maximum = new decimal(new int[] { + 5000, + 0, + 0, + 0}); + this.nudScrollDelay.Name = "nudScrollDelay"; + this.nudScrollDelay.Size = new System.Drawing.Size(80, 20); + this.nudScrollDelay.TabIndex = 3; + this.nudScrollDelay.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.nudScrollDelay.ValueChanged += new System.EventHandler(this.nudScrollDelay_ValueChanged); + // + // nudMaximumScrollCount + // + this.nudMaximumScrollCount.Location = new System.Drawing.Point(136, 68); + this.nudMaximumScrollCount.Name = "nudMaximumScrollCount"; + this.nudMaximumScrollCount.Size = new System.Drawing.Size(80, 20); + this.nudMaximumScrollCount.TabIndex = 4; + this.nudMaximumScrollCount.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.nudMaximumScrollCount.ValueChanged += new System.EventHandler(this.nudMaximumScrollCount_ValueChanged); + // + // lblScrollDelay + // + this.lblScrollDelay.AutoSize = true; + this.lblScrollDelay.Location = new System.Drawing.Point(8, 48); + this.lblScrollDelay.Name = "lblScrollDelay"; + this.lblScrollDelay.Size = new System.Drawing.Size(64, 13); + this.lblScrollDelay.TabIndex = 5; + this.lblScrollDelay.Text = "Scroll delay:"; + // + // lblMaximumScrollCount + // + this.lblMaximumScrollCount.AutoSize = true; + this.lblMaximumScrollCount.Location = new System.Drawing.Point(8, 72); + this.lblMaximumScrollCount.Name = "lblMaximumScrollCount"; + this.lblMaximumScrollCount.Size = new System.Drawing.Size(111, 13); + this.lblMaximumScrollCount.TabIndex = 6; + this.lblMaximumScrollCount.Text = "Maximum scroll count:"; // // ScrollingCaptureForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(567, 427); + this.Controls.Add(this.lblMaximumScrollCount); + this.Controls.Add(this.lblScrollDelay); + this.Controls.Add(this.nudMaximumScrollCount); + this.Controls.Add(this.nudScrollDelay); + this.Controls.Add(this.btnCapture); + this.Controls.Add(this.lblControlText); this.Controls.Add(this.btnSelectHandle); this.Name = "ScrollingCaptureForm"; - this.Text = "ScrollingCaptureForm"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "ShareX - Scrolling capture"; + ((System.ComponentModel.ISupportInitialize)(this.nudScrollDelay)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.nudMaximumScrollCount)).EndInit(); this.ResumeLayout(false); + this.PerformLayout(); } #endregion private System.Windows.Forms.Button btnSelectHandle; + private System.Windows.Forms.Label lblControlText; + private System.Windows.Forms.Button btnCapture; + private System.Windows.Forms.Timer captureTimer; + private System.Windows.Forms.NumericUpDown nudScrollDelay; + private System.Windows.Forms.NumericUpDown nudMaximumScrollCount; + private System.Windows.Forms.Label lblScrollDelay; + private System.Windows.Forms.Label lblMaximumScrollCount; } } \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs index 96af4e7df..d17dfdd50 100644 --- a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs +++ b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.cs @@ -31,15 +31,116 @@ You should have received a copy of the GNU General Public License using System.Drawing; using System.Linq; using System.Text; +using System.Threading; using System.Windows.Forms; namespace ShareX.ScreenCaptureLib { public partial class ScrollingCaptureForm : BaseForm { - public ScrollingCaptureForm() + public ScrollingCaptureOptions Options { get; set; } + + private WindowInfo selectedWindow; + private int currentScrollCount; + + public ScrollingCaptureForm(ScrollingCaptureOptions options) { + Options = options; InitializeComponent(); + nudScrollDelay.Value = Options.ScrollDelay; + nudMaximumScrollCount.Value = Options.MaximumScrollCount; + } + + private void btnSelectHandle_Click(object sender, EventArgs e) + { + Hide(); + SimpleWindowInfo simpleWindowInfo; + + try + { + Thread.Sleep(250); + simpleWindowInfo = GetWindowInfo(); + } + finally + { + Show(); + } + + if (simpleWindowInfo != null) + { + selectedWindow = new WindowInfo(simpleWindowInfo.Handle); + lblControlText.Text = selectedWindow.ClassName ?? string.Empty; + btnCapture.Enabled = true; + } + else + { + btnCapture.Enabled = false; + } + } + + private void btnCapture_Click(object sender, EventArgs e) + { + StartCapture(); + } + + private SimpleWindowInfo GetWindowInfo() + { + using (RectangleRegion surface = new RectangleRegion()) + { + surface.OneClickMode = true; + surface.Config.ForceWindowCapture = true; + surface.Config.IncludeControls = true; + surface.Config.UseDimming = false; + surface.Config.ShowInfo = true; + surface.Config.ShowMagnifier = false; + surface.Config.ShowTips = false; + surface.Prepare(); + surface.ShowDialog(); + + if (surface.Result == SurfaceResult.Region) + { + return surface.SelectedWindow; + } + } + + return null; + } + + private void StartCapture() + { + btnCapture.Enabled = false; + currentScrollCount = 0; + selectedWindow.Activate(); + captureTimer.Interval = Options.ScrollDelay; + captureTimer.Start(); + } + + private void StopCapture() + { + captureTimer.Stop(); + btnCapture.Enabled = true; + } + + private void captureTimer_Tick(object sender, EventArgs e) + { + NativeMethods.SendMessage(selectedWindow.Handle, (int)WindowsMessages.VSCROLL, (int)ScrollBarCommands.SB_PAGEDOWN, 0); + + currentScrollCount++; + + if (currentScrollCount == Options.MaximumScrollCount) + { + StopCapture(); + } + } + + private void nudScrollDelay_ValueChanged(object sender, EventArgs e) + { + Options.ScrollDelay = (int)nudScrollDelay.Value; + } + + private void nudMaximumScrollCount_ValueChanged(object sender, EventArgs e) + { + Options.MaximumScrollCount = (int)nudMaximumScrollCount.Value; } } } \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.resx b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.resx index 1af7de150..18c7083b9 100644 --- a/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.resx +++ b/ShareX.ScreenCaptureLib/Forms/ScrollingCaptureForm.resx @@ -117,4 +117,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 17, 17 + \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/ScrollingCaptureOptions.cs b/ShareX.ScreenCaptureLib/ScrollingCaptureOptions.cs new file mode 100644 index 000000000..a372f80ea --- /dev/null +++ b/ShareX.ScreenCaptureLib/ScrollingCaptureOptions.cs @@ -0,0 +1,38 @@ +#region License Information (GPL v3) + +/* + ShareX - A program that allows you to take screenshots and share any file type + Copyright (c) 2007-2015 ShareX Team + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + Optionally you can also view the license at . +*/ + +#endregion License Information (GPL v3) + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace ShareX +{ + public class ScrollingCaptureOptions + { + public int ScrollDelay { get; set; } = 500; + public int MaximumScrollCount { get; set; } = 20; + } +} \ No newline at end of file diff --git a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj index 761675736..d28a3ff7d 100644 --- a/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj +++ b/ShareX.ScreenCaptureLib/ShareX.ScreenCaptureLib.csproj @@ -115,6 +115,7 @@ + diff --git a/ShareX.ScreenCaptureLib/WindowInfo.cs b/ShareX.ScreenCaptureLib/WindowInfo.cs index 1d8f2326e..5deaeae89 100644 --- a/ShareX.ScreenCaptureLib/WindowInfo.cs +++ b/ShareX.ScreenCaptureLib/WindowInfo.cs @@ -127,6 +127,11 @@ public WindowInfo(IntPtr handle) Handle = handle; } + public void Activate() + { + NativeMethods.ActivateWindow(Handle); + } + public override string ToString() { return Text; diff --git a/ShareX/Forms/MainForm.Designer.cs b/ShareX/Forms/MainForm.Designer.cs index cd76f2117..e5560b558 100644 --- a/ShareX/Forms/MainForm.Designer.cs +++ b/ShareX/Forms/MainForm.Designer.cs @@ -57,6 +57,7 @@ private void InitializeComponent() this.tsmiLastRegion = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiScreenRecordingFFmpeg = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiScreenRecordingGIF = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiScrollingCapture = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiWebpageCapture = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiAutoCapture = new System.Windows.Forms.ToolStripMenuItem(); this.tsddbUpload = new System.Windows.Forms.ToolStripDropDownButton(); @@ -72,6 +73,7 @@ private void InitializeComponent() this.tsmiImageEditor = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiImageEffects = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiHashCheck = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiIRCClient = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiDNSChanger = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiQRCode = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiRuler = new System.Windows.Forms.ToolStripMenuItem(); @@ -79,7 +81,6 @@ private void InitializeComponent() this.tsmiIndexFolder = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiVideoThumbnailer = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiFTPClient = new System.Windows.Forms.ToolStripMenuItem(); - this.tsmiIRCClient = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTweetMessage = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiMonitorTest = new System.Windows.Forms.ToolStripMenuItem(); this.tssMain1 = new System.Windows.Forms.ToolStripSeparator(); @@ -191,6 +192,7 @@ private void InitializeComponent() this.tsmiTrayImageEditor = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayImageEffects = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayHashCheck = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiTrayIRCClient = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayDNSChanger = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayQRCode = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayRuler = new System.Windows.Forms.ToolStripMenuItem(); @@ -198,7 +200,6 @@ private void InitializeComponent() this.tsmiTrayIndexFolder = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayVideoThumbnailer = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayFTPClient = new System.Windows.Forms.ToolStripMenuItem(); - this.tsmiTrayIRCClient = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayTweetMessage = new System.Windows.Forms.ToolStripMenuItem(); this.tsmiTrayMonitorTest = new System.Windows.Forms.ToolStripMenuItem(); this.tssTray1 = new System.Windows.Forms.ToolStripSeparator(); @@ -377,6 +378,7 @@ private void InitializeComponent() this.tsmiLastRegion, this.tsmiScreenRecordingFFmpeg, this.tsmiScreenRecordingGIF, + this.tsmiScrollingCapture, this.tsmiWebpageCapture, this.tsmiAutoCapture}); this.tsddbCapture.Image = global::ShareX.Properties.Resources.camera; @@ -473,6 +475,13 @@ private void InitializeComponent() resources.ApplyResources(this.tsmiScreenRecordingGIF, "tsmiScreenRecordingGIF"); this.tsmiScreenRecordingGIF.Click += new System.EventHandler(this.tsmiScreenRecordingGIF_Click); // + // tsmiScrollingCapture + // + this.tsmiScrollingCapture.Image = global::ShareX.Properties.Resources.ui_scroll_pane_image; + this.tsmiScrollingCapture.Name = "tsmiScrollingCapture"; + resources.ApplyResources(this.tsmiScrollingCapture, "tsmiScrollingCapture"); + this.tsmiScrollingCapture.Click += new System.EventHandler(this.tsmiScrollingCapture_Click); + // // tsmiWebpageCapture // this.tsmiWebpageCapture.Image = global::ShareX.Properties.Resources.document_globe; @@ -597,6 +606,13 @@ private void InitializeComponent() resources.ApplyResources(this.tsmiHashCheck, "tsmiHashCheck"); this.tsmiHashCheck.Click += new System.EventHandler(this.tsmiHashCheck_Click); // + // tsmiIRCClient + // + this.tsmiIRCClient.Image = global::ShareX.Properties.Resources.balloon_white; + this.tsmiIRCClient.Name = "tsmiIRCClient"; + resources.ApplyResources(this.tsmiIRCClient, "tsmiIRCClient"); + this.tsmiIRCClient.Click += new System.EventHandler(this.tsmiIRCClient_Click); + // // tsmiDNSChanger // this.tsmiDNSChanger.Image = global::ShareX.Properties.Resources.network_ip; @@ -646,13 +662,6 @@ private void InitializeComponent() resources.ApplyResources(this.tsmiFTPClient, "tsmiFTPClient"); this.tsmiFTPClient.Click += new System.EventHandler(this.tsmiFTPClient_Click); // - // tsmiIRCClient - // - this.tsmiIRCClient.Image = global::ShareX.Properties.Resources.balloon_white; - this.tsmiIRCClient.Name = "tsmiIRCClient"; - resources.ApplyResources(this.tsmiIRCClient, "tsmiIRCClient"); - this.tsmiIRCClient.Click += new System.EventHandler(this.tsmiIRCClient_Click); - // // tsmiTweetMessage // this.tsmiTweetMessage.Image = global::ShareX.Properties.Resources.Twitter; @@ -1496,6 +1505,13 @@ private void InitializeComponent() resources.ApplyResources(this.tsmiTrayHashCheck, "tsmiTrayHashCheck"); this.tsmiTrayHashCheck.Click += new System.EventHandler(this.tsmiHashCheck_Click); // + // tsmiTrayIRCClient + // + this.tsmiTrayIRCClient.Image = global::ShareX.Properties.Resources.balloon_white; + this.tsmiTrayIRCClient.Name = "tsmiTrayIRCClient"; + resources.ApplyResources(this.tsmiTrayIRCClient, "tsmiTrayIRCClient"); + this.tsmiTrayIRCClient.Click += new System.EventHandler(this.tsmiIRCClient_Click); + // // tsmiTrayDNSChanger // this.tsmiTrayDNSChanger.Image = global::ShareX.Properties.Resources.network_ip; @@ -1545,13 +1561,6 @@ private void InitializeComponent() resources.ApplyResources(this.tsmiTrayFTPClient, "tsmiTrayFTPClient"); this.tsmiTrayFTPClient.Click += new System.EventHandler(this.tsmiFTPClient_Click); // - // tsmiTrayIRCClient - // - this.tsmiTrayIRCClient.Image = global::ShareX.Properties.Resources.balloon_white; - this.tsmiTrayIRCClient.Name = "tsmiTrayIRCClient"; - resources.ApplyResources(this.tsmiTrayIRCClient, "tsmiTrayIRCClient"); - this.tsmiTrayIRCClient.Click += new System.EventHandler(this.tsmiIRCClient_Click); - // // tsmiTrayTweetMessage // this.tsmiTrayTweetMessage.Image = global::ShareX.Properties.Resources.Twitter; @@ -1967,5 +1976,6 @@ private void InitializeComponent() private System.Windows.Forms.Timer timerTraySingleClick; private System.Windows.Forms.ToolStripMenuItem tsmiIRCClient; private System.Windows.Forms.ToolStripMenuItem tsmiTrayIRCClient; + private System.Windows.Forms.ToolStripMenuItem tsmiScrollingCapture; } } \ No newline at end of file diff --git a/ShareX/Forms/MainForm.cs b/ShareX/Forms/MainForm.cs index fa2a727d2..dc4ff4d86 100644 --- a/ShareX/Forms/MainForm.cs +++ b/ShareX/Forms/MainForm.cs @@ -1092,6 +1092,11 @@ private void tsmiScreenRecordingGIF_Click(object sender, EventArgs e) TaskHelpers.StartScreenRecording(ScreenRecordOutput.GIF, ScreenRecordStartMethod.Region); } + private void tsmiScrollingCapture_Click(object sender, EventArgs e) + { + TaskHelpers.OpenScrollingCapture(); + } + private void tsmiAutoCapture_Click(object sender, EventArgs e) { TaskHelpers.OpenAutoCapture(); diff --git a/ShareX/Forms/MainForm.resx b/ShareX/Forms/MainForm.resx index 4ecde9970..68b0cd4a2 100644 --- a/ShareX/Forms/MainForm.resx +++ b/ShareX/Forms/MainForm.resx @@ -325,91 +325,97 @@ Left - 191, 22 + 220, 22 Fullscreen - 191, 22 + 220, 22 Window - 191, 22 + 220, 22 Monitor - 191, 22 + 220, 22 Region - 191, 22 + 220, 22 Region (Windows & controls) - 191, 22 + 220, 22 Region (Annotate) - 191, 22 + 220, 22 Region (Light) - 191, 22 + 220, 22 Region (Transparent) - 191, 22 + 220, 22 Polygon - 191, 22 + 220, 22 Freehand - 191, 22 + 220, 22 Last region - 191, 22 + 220, 22 Screen recording - 191, 22 + 220, 22 Screen recording (GIF) + + 220, 22 + + + Scrolling capture... + - 191, 22 + 220, 22 Webpage capture... - 191, 22 + 220, 22 Auto capture... @@ -1132,91 +1138,91 @@ 190, 17 - 191, 22 + 220, 22 Fullscreen - 191, 22 + 220, 22 Window - 191, 22 + 220, 22 Monitor - 191, 22 + 220, 22 Region - 191, 22 + 220, 22 Region (Windows & controls) - 191, 22 + 220, 22 Region (Annotate) - 191, 22 + 220, 22 Region (Light) - 191, 22 + 220, 22 Region (Transparent) - 191, 22 + 220, 22 Polygon - 191, 22 + 220, 22 Freehand - 191, 22 + 220, 22 Last region - 191, 22 + 220, 22 Screen recording - 191, 22 + 220, 22 Screen recording (GIF) - 191, 22 + 220, 22 Webpage capture... - 191, 22 + 220, 22 Auto capture... @@ -1517,7 +1523,7 @@ ShareX - @Invariant + 405, 17 @@ -1665,6 +1671,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tsmiScrollingCapture + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + tsmiWebpageCapture @@ -1755,6 +1767,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tsmiIRCClient + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + tsmiDNSChanger @@ -1797,12 +1815,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsmiIRCClient - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tsmiTweetMessage @@ -2457,6 +2469,12 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tsmiTrayIRCClient + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + tsmiTrayDNSChanger @@ -2499,12 +2517,6 @@ System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tsmiTrayIRCClient - - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - tsmiTrayTweetMessage @@ -2677,6 +2689,6 @@ MainForm - ShareX.HotkeyForm, ShareX, Version=10.2.0.0, Culture=neutral, PublicKeyToken=null + ShareX.HotkeyForm, ShareX, Version=10.2.5.0, Culture=neutral, PublicKeyToken=null \ No newline at end of file diff --git a/ShareX/Properties/Resources.Designer.cs b/ShareX/Properties/Resources.Designer.cs index b72042adb..462d40a6c 100644 --- a/ShareX/Properties/Resources.Designer.cs +++ b/ShareX/Properties/Resources.Designer.cs @@ -1927,6 +1927,16 @@ public static System.Drawing.Bitmap Twitter { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + public static System.Drawing.Bitmap ui_scroll_pane_image { + get { + object obj = ResourceManager.GetObject("ui_scroll_pane_image", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Drawing.Bitmap. /// diff --git a/ShareX/Properties/Resources.resx b/ShareX/Properties/Resources.resx index e51b601c7..afc1c30c6 100644 --- a/ShareX/Properties/Resources.resx +++ b/ShareX/Properties/Resources.resx @@ -138,9 +138,6 @@ Are you sure you want to continue? Shorten URL ({0}) - - ..\Resources\layer-transparent.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - There is no valid CLI video encoder selected. @@ -166,15 +163,15 @@ Press 'No' to cancel the current upload and disable screenshot auto uploading. ..\Resources\google_plus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\toolbox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\au.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a FFmpeg error - - ..\Resources\checkbox_check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - FFmpeg successfully downloaded. @@ -244,9 +241,6 @@ Press 'No' to cancel the current upload and disable screenshot auto uploading. URL is empty. - - Text upload test - Choose ShareX personal folder path @@ -266,9 +260,6 @@ Please select a different hotkey or quit the conflicting application and reopen Stop - - Left click to copy URL to clipboard. Right click to open URL. - ..\Resources\robot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -296,6 +287,9 @@ Please select a different hotkey or quit the conflicting application and reopen ..\Resources\keyboard--minus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Changelog + ..\Resources\steam.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -308,6 +302,9 @@ Please select a different hotkey or quit the conflicting application and reopen You can single left click the ShareX tray icon to start region capture. + + ..\Resources\application-task.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + Task settings @@ -364,11 +361,11 @@ Press yes to open image from clipboard. Alternatively, press no to open image fi Hide menu - - ..\Resources\navigation-000-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Unable to create folder: - - URL shortener: {0} + + Capture ..\Resources\tr.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -409,8 +406,8 @@ Press yes to open image from clipboard. Alternatively, press no to open image fi Upload files - - CLI video encoder file does not exist: + + ..\Resources\document-copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\globe-share.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -418,6 +415,9 @@ Press yes to open image from clipboard. Alternatively, press no to open image fi ..\Resources\kr.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + Error @@ -440,6 +440,9 @@ here hotkeys + + ..\Resources\arrow-270.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\drive.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -452,6 +455,9 @@ here ..\Resources\traffic-cone.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Issues + Path can't be empty. @@ -467,12 +473,15 @@ here Choose encoder path + + For settings to take effect ShareX needs to be reopened from Steam. + Can't access to "{0}" file. Please run ShareX as administrator to change personal folder path. - - ..\Resources\gear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + CLI video encoder file does not exist: ..\Resources\image-saturation.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -496,8 +505,8 @@ Please run ShareX as administrator to change personal folder path. FTP client only supports FTP or FTPS. - - ..\Resources\layers-arrange.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\arrow-090.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Choose folder path @@ -512,9 +521,6 @@ Would you like to restart ShareX? ..\Resources\layer-shape.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\eraser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\image--pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -527,9 +533,6 @@ Would you like to restart ShareX? ..\Resources\cn.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\categories.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - Use new name: @@ -596,14 +599,17 @@ Would you like to restart ShareX? Configure CLI video encoders ---> - - ..\Resources\camera.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + URL shortener: {0} ..\Resources\clipboard.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - Unable to create folder: + + ..\Resources\barcode-2d.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\gear.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Choose screenshots folder path @@ -614,8 +620,11 @@ Would you like to restart ShareX? ..\Resources\film.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\arrow-090.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Close + + + Left click to copy URL to clipboard. Right click to open URL. ..\Resources\clipboard-list.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -632,8 +641,11 @@ Would you like to restart ShareX? File upload - - ..\Resources\cross.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Start screen color picker + + + ..\Resources\navigation-000-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\layout-select-sidebar.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -645,12 +657,18 @@ Would you like to restart ShareX? Download failed: {0} + + After upload: {0} + ..\Resources\layer-shape-ellipse.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Text uploader: {0} + + ..\Resources\ru.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\clock.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -666,11 +684,14 @@ Would you like to restart ShareX? ..\Resources\es.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\CompanionCube.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + ..\Resources\layer-shape-polygon.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\toolbox.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\checkbox_check.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Stopped @@ -684,29 +705,32 @@ Would you like to restart ShareX? ..\Resources\cross-button.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - Issues + + Chrome support disabled. - - Close + + ..\Resources\cross.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + Chrome support enabled. + + + ..\Resources\layer-transparent.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\wrench-screwdriver.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\application-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - ..\Resources\ErrorSound.wav;System.IO.MemoryStream, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Preview: - - ..\Resources\document-copy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + Text upload test - - ..\Resources\application-task.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\application-browser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\notebook.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -744,29 +768,26 @@ Would you like to restart ShareX? ..\Resources\RoundedRectangle.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - Unable to find valid Twitter account. - ..\Resources\monitor.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a Website - - ..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\categories.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - After upload: {0} + + ..\Resources\layers-arrange.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - ..\Resources\barcode-2d.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\eraser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\Fullscreen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - Capture + + ..\Resources\camera.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ..\Resources\exclamation-button.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -778,28 +799,10 @@ Would you like to restart ShareX? Download of FFmpeg failed. - - Start screen color picker + + Unable to find valid Twitter account. - - ..\Resources\arrow-270.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - Chrome support enabled. - - - Chrome support disabled. - - - ..\Resources\ru.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - For settings to take effect ShareX needs to be reopened from Steam. - - - Changelog - - - ..\Resources\CompanionCube.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + ..\Resources\ui-scroll-pane-image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a \ No newline at end of file diff --git a/ShareX/Resources/ui-scroll-pane-image.png b/ShareX/Resources/ui-scroll-pane-image.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed26a46c65429af33d833615c73be4b22691a91 GIT binary patch literal 599 zcmV-d0;v6oP)CqhaC>?w#MEG^}C1EO+ zB6JAEtF>2Kfecuk*r34Ch4?kW^dV%iXf#T`Q#lw6(%$8AT`Mq6lgXj@u|7go`qp0& z&Tf7n+)FJJ${2~Vax4}j6hw>}hVdnr%Pl*S9x_!`X^29h5G6}L5C}w>*Xx}Z%&)ur l8yg)BRFpi)e~kSTU;w}Rc{t|+V%Y!y002ovPDHLkV1i}b62t%i literal 0 HcmV?d00001 diff --git a/ShareX/ShareX.csproj b/ShareX/ShareX.csproj index 4afb036c0..bb68bda8a 100644 --- a/ShareX/ShareX.csproj +++ b/ShareX/ShareX.csproj @@ -1071,6 +1071,7 @@ + diff --git a/ShareX/TaskHelpers.cs b/ShareX/TaskHelpers.cs index c841ae244..54b08dd93 100644 --- a/ShareX/TaskHelpers.cs +++ b/ShareX/TaskHelpers.cs @@ -490,6 +490,13 @@ public static void StartScreenRecording(ScreenRecordOutput outputType, ScreenRec ScreenRecordManager.StartStopRecording(outputType, startMethod, taskSettings); } + public static void OpenScrollingCapture(TaskSettings taskSettings = null) + { + if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings(); + + new ScrollingCaptureForm(taskSettings.CaptureSettings.ScrollingCaptureOptions).Show(); + } + public static void OpenAutoCapture() { AutoCaptureForm.Instance.ShowActivate(); diff --git a/ShareX/TaskSettings.cs b/ShareX/TaskSettings.cs index 473a23f67..eb81aa857 100644 --- a/ShareX/TaskSettings.cs +++ b/ShareX/TaskSettings.cs @@ -326,6 +326,12 @@ public class TaskSettingsCapture #endregion Capture / Screen recorder + #region Capture / Scrolling capture + + public ScrollingCaptureOptions ScrollingCaptureOptions = new ScrollingCaptureOptions(); + + #endregion Capture / Scrolling capture + #region Capture / Rectangle annotate public RectangleAnnotateOptions RectangleAnnotateOptions = new RectangleAnnotateOptions();