mirror of
https://github.com/ShareX/ShareX.git
synced 2024-10-06 05:05:42 +13:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
commit
5536e6cc41
26 changed files with 423 additions and 601 deletions
|
@ -39,6 +39,7 @@ public DNSChangerForm()
|
||||||
AddDNS(Resources.DNSChangerForm_DNSChangerForm_Manual);
|
AddDNS(Resources.DNSChangerForm_DNSChangerForm_Manual);
|
||||||
AddDNS("Google Public DNS", "8.8.8.8", "8.8.4.4"); // https://developers.google.com/speed/public-dns/
|
AddDNS("Google Public DNS", "8.8.8.8", "8.8.4.4"); // https://developers.google.com/speed/public-dns/
|
||||||
AddDNS("OpenDNS", "208.67.222.222", "208.67.220.220"); // https://www.opendns.com
|
AddDNS("OpenDNS", "208.67.222.222", "208.67.220.220"); // https://www.opendns.com
|
||||||
|
AddDNS("Cloudflare", "1.1.1.1", "1.0.0.1"); // https://1.1.1.1
|
||||||
AddDNS("Level 3 Communications", "4.2.2.1", "4.2.2.2"); // http://www.level3.com
|
AddDNS("Level 3 Communications", "4.2.2.1", "4.2.2.2"); // http://www.level3.com
|
||||||
AddDNS("Norton ConnectSafe", "199.85.126.10", "199.85.127.10"); // https://dns.norton.com
|
AddDNS("Norton ConnectSafe", "199.85.126.10", "199.85.127.10"); // https://dns.norton.com
|
||||||
AddDNS("Comodo Secure DNS", "8.26.56.26", "8.20.247.20"); // https://www.comodo.com/secure-dns/
|
AddDNS("Comodo Secure DNS", "8.26.56.26", "8.20.247.20"); // https://www.comodo.com/secure-dns/
|
||||||
|
|
|
@ -1142,12 +1142,6 @@ public static T ByteArrayToStructure<T>(byte[] bytes) where T : struct
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://goessner.net/articles/JsonPath/
|
|
||||||
public static string ParseJSON(string text, string jsonPath)
|
|
||||||
{
|
|
||||||
return (string)JToken.Parse(text).SelectToken("$." + jsonPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static T[] GetInstances<T>() where T : class
|
public static T[] GetInstances<T>() where T : class
|
||||||
{
|
{
|
||||||
IEnumerable<T> instances = from t in Assembly.GetCallingAssembly().GetTypes()
|
IEnumerable<T> instances = from t in Assembly.GetCallingAssembly().GetTypes()
|
||||||
|
|
|
@ -252,6 +252,15 @@ internal static string AfterCaptureTasks_SaveThumbnailImageToFile {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a localized string similar to Scan QR code.
|
||||||
|
/// </summary>
|
||||||
|
internal static string AfterCaptureTasks_ScanQRCode {
|
||||||
|
get {
|
||||||
|
return ResourceManager.GetString("AfterCaptureTasks_ScanQRCode", resourceCulture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Looks up a localized string similar to Print image.
|
/// Looks up a localized string similar to Print image.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1160,4 +1160,7 @@ Would you like to download it?</value>
|
||||||
<data name="WavFileNameEditor_EditValue_Browse_for_a_sound_file___" xml:space="preserve">
|
<data name="WavFileNameEditor_EditValue_Browse_for_a_sound_file___" xml:space="preserve">
|
||||||
<value>Browse for a sound file...</value>
|
<value>Browse for a sound file...</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="AfterCaptureTasks_ScanQRCode" xml:space="preserve">
|
||||||
|
<value>Scan QR code</value>
|
||||||
|
</data>
|
||||||
</root>
|
</root>
|
|
@ -105,7 +105,6 @@ public Color CurrentColor
|
||||||
private TextAnimation editorPanTipAnimation;
|
private TextAnimation editorPanTipAnimation;
|
||||||
private Bitmap bmpBackgroundImage;
|
private Bitmap bmpBackgroundImage;
|
||||||
private Cursor defaultCursor;
|
private Cursor defaultCursor;
|
||||||
private ScrollbarManager scrollbarManager;
|
|
||||||
|
|
||||||
public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options, Image canvas = null)
|
public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options, Image canvas = null)
|
||||||
{
|
{
|
||||||
|
@ -129,19 +128,14 @@ public RegionCaptureForm(RegionCaptureMode mode, RegionCaptureOptions options, I
|
||||||
Duration = TimeSpan.FromMilliseconds(200)
|
Duration = TimeSpan.FromMilliseconds(200)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (IsEditorMode)
|
if (IsEditorMode && Options.ShowEditorPanTip)
|
||||||
{
|
{
|
||||||
scrollbarManager = new ScrollbarManager(this);
|
editorPanTipAnimation = new TextAnimation()
|
||||||
|
|
||||||
if (Options.ShowEditorPanTip)
|
|
||||||
{
|
{
|
||||||
editorPanTipAnimation = new TextAnimation()
|
Duration = TimeSpan.FromMilliseconds(5000),
|
||||||
{
|
FadeOutDuration = TimeSpan.FromMilliseconds(1000),
|
||||||
Duration = TimeSpan.FromMilliseconds(5000),
|
Text = Resources.RegionCaptureForm_TipYouCanPanImageByHoldingMouseMiddleButtonAndDragging
|
||||||
FadeOutDuration = TimeSpan.FromMilliseconds(1000),
|
};
|
||||||
Text = Resources.RegionCaptureForm_TipYouCanPanImageByHoldingMouseMiddleButtonAndDragging
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
borderPen = new Pen(Color.Black);
|
borderPen = new Pen(Color.Black);
|
||||||
|
@ -236,6 +230,8 @@ private void InitializeComponent()
|
||||||
MouseDown += RegionCaptureForm_MouseDown;
|
MouseDown += RegionCaptureForm_MouseDown;
|
||||||
Resize += RegionCaptureForm_Resize;
|
Resize += RegionCaptureForm_Resize;
|
||||||
LocationChanged += RegionCaptureForm_LocationChanged;
|
LocationChanged += RegionCaptureForm_LocationChanged;
|
||||||
|
LostFocus += RegionCaptureForm_LostFocus;
|
||||||
|
GotFocus += RegionCaptureForm_GotFocus;
|
||||||
FormClosing += RegionCaptureForm_FormClosing;
|
FormClosing += RegionCaptureForm_FormClosing;
|
||||||
|
|
||||||
ResumeLayout(false);
|
ResumeLayout(false);
|
||||||
|
@ -480,6 +476,16 @@ private void RegionCaptureForm_LocationChanged(object sender, EventArgs e)
|
||||||
OnMoved();
|
OnMoved();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void RegionCaptureForm_GotFocus(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RegionCaptureForm_LostFocus(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Pause();
|
||||||
|
}
|
||||||
|
|
||||||
private void RegionCaptureForm_FormClosing(object sender, FormClosingEventArgs e)
|
private void RegionCaptureForm_FormClosing(object sender, FormClosingEventArgs e)
|
||||||
{
|
{
|
||||||
if (IsEditorMode)
|
if (IsEditorMode)
|
||||||
|
@ -661,11 +667,6 @@ private void UpdateCoordinates()
|
||||||
borderDotPen.DashOffset = (float)timerStart.Elapsed.TotalSeconds * -15;
|
borderDotPen.DashOffset = (float)timerStart.Elapsed.TotalSeconds * -15;
|
||||||
|
|
||||||
ShapeManager.Update();
|
ShapeManager.Update();
|
||||||
|
|
||||||
if (scrollbarManager != null)
|
|
||||||
{
|
|
||||||
scrollbarManager.Update();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnPaintBackground(PaintEventArgs e)
|
protected override void OnPaintBackground(PaintEventArgs e)
|
||||||
|
@ -859,12 +860,6 @@ private void Draw(Graphics g)
|
||||||
{
|
{
|
||||||
DrawTextAnimation(g, ShapeManager.MenuTextAnimation);
|
DrawTextAnimation(g, ShapeManager.MenuTextAnimation);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw scroll bars
|
|
||||||
if (scrollbarManager != null)
|
|
||||||
{
|
|
||||||
scrollbarManager.Draw(g);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void DrawRegionArea(Graphics g, Rectangle rect, bool isAnimated)
|
internal void DrawRegionArea(Graphics g, Rectangle rect, bool isAnimated)
|
||||||
|
|
155
ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorScrollBar.cs
Normal file
155
ShareX.ScreenCaptureLib/RegionHelpers/ImageEditorScrollBar.cs
Normal file
|
@ -0,0 +1,155 @@
|
||||||
|
#region License Information (GPL v3)
|
||||||
|
|
||||||
|
/*
|
||||||
|
ShareX - A program that allows you to take screenshots and share any file type
|
||||||
|
Copyright (c) 2007-2018 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endregion License Information (GPL v3)
|
||||||
|
|
||||||
|
using ShareX.HelpersLib;
|
||||||
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
|
using System.Drawing.Drawing2D;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
namespace ShareX.ScreenCaptureLib
|
||||||
|
{
|
||||||
|
internal class ImageEditorScrollbar : DrawableObject
|
||||||
|
{
|
||||||
|
public Orientation Orientation { get; set; }
|
||||||
|
public int Thickness { get; set; } = 10;
|
||||||
|
public int Margin { get; set; } = 15;
|
||||||
|
public int Padding { get; set; } = 2;
|
||||||
|
public float Opacity { get; set; }
|
||||||
|
public Rectangle ThumbRectangle { get; set; }
|
||||||
|
|
||||||
|
private RegionCaptureForm form;
|
||||||
|
|
||||||
|
public ImageEditorScrollbar(Orientation orientation, RegionCaptureForm form)
|
||||||
|
{
|
||||||
|
Orientation = orientation;
|
||||||
|
this.form = form;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Update()
|
||||||
|
{
|
||||||
|
UpdateOpacity();
|
||||||
|
|
||||||
|
if (Visible)
|
||||||
|
{
|
||||||
|
Rectangle imageRectangleVisible = form.CanvasRectangle;
|
||||||
|
imageRectangleVisible.Intersect(form.ClientArea);
|
||||||
|
|
||||||
|
int inClientAreaSize, inImageVisibleSize, inImageSize, sideOffsetBase;
|
||||||
|
float inCanvasCenterOffset;
|
||||||
|
|
||||||
|
if (Orientation == Orientation.Horizontal)
|
||||||
|
{
|
||||||
|
inClientAreaSize = form.ClientArea.Width;
|
||||||
|
inImageVisibleSize = imageRectangleVisible.Width;
|
||||||
|
inImageSize = form.CanvasRectangle.Width;
|
||||||
|
sideOffsetBase = form.ClientArea.Bottom;
|
||||||
|
inCanvasCenterOffset = form.CanvasCenterOffset.X;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
inClientAreaSize = form.ClientArea.Height;
|
||||||
|
inImageVisibleSize = imageRectangleVisible.Height;
|
||||||
|
inImageSize = form.CanvasRectangle.Height;
|
||||||
|
sideOffsetBase = form.ClientArea.Right;
|
||||||
|
inCanvasCenterOffset = form.CanvasCenterOffset.Y;
|
||||||
|
}
|
||||||
|
|
||||||
|
int trackLength = inClientAreaSize - Margin * 2 - Padding * 2 - Thickness;
|
||||||
|
int trackLengthInternal = trackLength - Padding * 2;
|
||||||
|
|
||||||
|
int thumbLength = Math.Max(Thickness, (int)Math.Round((float)inImageVisibleSize / inImageSize * trackLengthInternal));
|
||||||
|
double thumbLimit = (trackLengthInternal - thumbLength) / 2.0f;
|
||||||
|
int thumbPosition = (int)Math.Round(Margin + trackLength / 2.0f - (thumbLength / 2.0f) -
|
||||||
|
Math.Min(thumbLimit, Math.Max(-thumbLimit, inCanvasCenterOffset / inImageSize * trackLengthInternal)));
|
||||||
|
|
||||||
|
int trackWidth = Padding * 2 + Thickness;
|
||||||
|
int trackSideOffset = sideOffsetBase - Margin - Thickness - 1 - Padding * 2;
|
||||||
|
int thumbSideOffset = sideOffsetBase - Margin - Thickness - 1 - Padding;
|
||||||
|
|
||||||
|
if (Orientation == Orientation.Horizontal)
|
||||||
|
{
|
||||||
|
Rectangle = new Rectangle(Margin, trackSideOffset, trackLength, trackWidth);
|
||||||
|
ThumbRectangle = new Rectangle(thumbPosition, thumbSideOffset, thumbLength, Thickness);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Rectangle = new Rectangle(trackSideOffset, Margin, trackWidth, trackLength);
|
||||||
|
ThumbRectangle = new Rectangle(thumbSideOffset, thumbPosition, Thickness, thumbLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateOpacity()
|
||||||
|
{
|
||||||
|
bool isScrollbarNeeded;
|
||||||
|
|
||||||
|
if (Orientation == Orientation.Horizontal)
|
||||||
|
{
|
||||||
|
isScrollbarNeeded = form.CanvasRectangle.Left < form.ClientArea.Left || form.CanvasRectangle.Right > form.ClientArea.Right;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isScrollbarNeeded = form.CanvasRectangle.Top < form.ClientArea.Top || form.CanvasRectangle.Bottom > form.ClientArea.Bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isScrollbarNeeded)
|
||||||
|
{
|
||||||
|
Opacity = 0f;
|
||||||
|
}
|
||||||
|
else if (form.ShapeManager.IsPanning || IsCursorHover)
|
||||||
|
{
|
||||||
|
Opacity = 1f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Opacity = 0.8f;
|
||||||
|
}
|
||||||
|
|
||||||
|
Visible = Opacity > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnDraw(Graphics g)
|
||||||
|
{
|
||||||
|
if (!Visible) return;
|
||||||
|
|
||||||
|
using (Brush trackBrush = new SolidBrush(Color.FromArgb((int)(255 * Opacity), 60, 60, 60)))
|
||||||
|
using (Brush thumbBrush = new SolidBrush(Color.FromArgb((int)(255 * Opacity), 130, 130, 130)))
|
||||||
|
{
|
||||||
|
g.SmoothingMode = SmoothingMode.HighQuality;
|
||||||
|
g.DrawCapsule(trackBrush, Rectangle);
|
||||||
|
g.DrawCapsule(thumbBrush, ThumbRectangle);
|
||||||
|
g.SmoothingMode = SmoothingMode.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnMouseDown(Point position)
|
||||||
|
{
|
||||||
|
base.OnMouseDown(position);
|
||||||
|
|
||||||
|
// Pan here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -23,177 +23,31 @@ You should have received a copy of the GNU General Public License
|
||||||
|
|
||||||
#endregion License Information (GPL v3)
|
#endregion License Information (GPL v3)
|
||||||
|
|
||||||
using ShareX.HelpersLib;
|
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Drawing.Drawing2D;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace ShareX.ScreenCaptureLib
|
namespace ShareX.ScreenCaptureLib
|
||||||
{
|
{
|
||||||
internal class ScrollbarManager
|
internal class ScrollbarManager
|
||||||
{
|
{
|
||||||
public bool IsVisible => IsHorizontalScrollbarVisible || IsVerticalScrollbarVisible;
|
public bool IsVisible => horizontalScrollbar.Visible || verticalScrollbar.Visible;
|
||||||
public bool IsHorizontalScrollbarVisible { get; private set; }
|
|
||||||
public bool IsVerticalScrollbarVisible { get; private set; }
|
|
||||||
|
|
||||||
public int Thickness { get; set; } = 10;
|
|
||||||
public int Margin { get; set; } = 15;
|
|
||||||
public int Padding { get; set; } = 2;
|
|
||||||
|
|
||||||
// Timings in milliseconds
|
|
||||||
public int FadeInTime { get; set; } = 150;
|
|
||||||
public int FadeOutDelay { get; set; } = 500;
|
|
||||||
public int FadeOutTime { get; set; } = 150;
|
|
||||||
|
|
||||||
private RegionCaptureForm form;
|
private RegionCaptureForm form;
|
||||||
private Rectangle horizontalTrackRectangle, horizontalThumbRectangle, verticalTrackRectangle, verticalThumbRectangle;
|
private ImageEditorScrollbar horizontalScrollbar, verticalScrollbar;
|
||||||
private bool shouldDrawHorizontalScrollbar = true;
|
|
||||||
private bool shouldDrawVerticalScrollbar = true;
|
|
||||||
private bool shouldDrawHorizontalScrollbarBefore = true;
|
|
||||||
private bool shouldDrawVerticalScrollbarBefore = true;
|
|
||||||
private Stopwatch horizontalScrollbarChangeTime;
|
|
||||||
private Stopwatch verticalScrollbarChangeTime;
|
|
||||||
private int HorizontalScrollbarOpacityLast = 255;
|
|
||||||
private int HorizontalScrollbarOpacityCurrent = 255;
|
|
||||||
private int VerticalScrollbarOpacityLast = 255;
|
|
||||||
private int VerticalScrollbarOpacityCurrent = 255;
|
|
||||||
|
|
||||||
public ScrollbarManager(RegionCaptureForm regionCaptureForm)
|
public ScrollbarManager(RegionCaptureForm regionCaptureForm, ShapeManager shapeManager)
|
||||||
{
|
{
|
||||||
form = regionCaptureForm;
|
form = regionCaptureForm;
|
||||||
horizontalScrollbarChangeTime = Stopwatch.StartNew();
|
horizontalScrollbar = new ImageEditorScrollbar(Orientation.Horizontal, form);
|
||||||
verticalScrollbarChangeTime = Stopwatch.StartNew();
|
shapeManager.DrawableObjects.Add(horizontalScrollbar);
|
||||||
|
verticalScrollbar = new ImageEditorScrollbar(Orientation.Vertical, form);
|
||||||
if (form.ClientArea.Contains(form.CanvasRectangle))
|
shapeManager.DrawableObjects.Add(verticalScrollbar);
|
||||||
{
|
|
||||||
HorizontalScrollbarOpacityLast = 0;
|
|
||||||
HorizontalScrollbarOpacityCurrent = 0;
|
|
||||||
VerticalScrollbarOpacityLast = 0;
|
|
||||||
VerticalScrollbarOpacityCurrent = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Update()
|
public void Update()
|
||||||
{
|
{
|
||||||
Rectangle imageRectangleVisible = form.CanvasRectangle;
|
horizontalScrollbar.Update();
|
||||||
imageRectangleVisible.Intersect(form.ClientArea);
|
verticalScrollbar.Update();
|
||||||
|
|
||||||
shouldDrawHorizontalScrollbar = form.ShapeManager.IsPanning &&
|
|
||||||
(form.CanvasRectangle.Left < form.ClientArea.Left || form.CanvasRectangle.Right > form.ClientArea.Right);
|
|
||||||
|
|
||||||
if (shouldDrawHorizontalScrollbar != shouldDrawHorizontalScrollbarBefore)
|
|
||||||
{
|
|
||||||
horizontalScrollbarChangeTime = Stopwatch.StartNew();
|
|
||||||
HorizontalScrollbarOpacityLast = HorizontalScrollbarOpacityCurrent;
|
|
||||||
}
|
|
||||||
shouldDrawHorizontalScrollbarBefore = shouldDrawHorizontalScrollbar;
|
|
||||||
|
|
||||||
if (shouldDrawHorizontalScrollbar)
|
|
||||||
{
|
|
||||||
HorizontalScrollbarOpacityCurrent = HorizontalScrollbarOpacityLast + OpacityGain(horizontalScrollbarChangeTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
HorizontalScrollbarOpacityCurrent = HorizontalScrollbarOpacityLast - OpacityLoss(horizontalScrollbarChangeTime);
|
|
||||||
}
|
|
||||||
HorizontalScrollbarOpacityCurrent = HorizontalScrollbarOpacityCurrent.Between(0, 255);
|
|
||||||
|
|
||||||
IsHorizontalScrollbarVisible = HorizontalScrollbarOpacityCurrent > 0;
|
|
||||||
|
|
||||||
if (IsHorizontalScrollbarVisible)
|
|
||||||
{
|
|
||||||
int horizontalTrackLength = form.ClientArea.Width - Margin * 2 - Thickness - Padding * 2;
|
|
||||||
int horizontalThumbLength = Math.Max(Thickness, (int)Math.Round((float)imageRectangleVisible.Width / form.CanvasRectangle.Width * horizontalTrackLength));
|
|
||||||
|
|
||||||
horizontalTrackRectangle = new Rectangle(new Point(Margin - Padding, form.ClientArea.Bottom - (Thickness + Margin) - Padding),
|
|
||||||
new Size(horizontalTrackLength + Padding * 2, Thickness + Padding * 2));
|
|
||||||
|
|
||||||
double limitHorizontal = (horizontalTrackLength - horizontalThumbLength) / 2.0f;
|
|
||||||
double thumbHorizontalPositionX = Math.Round(horizontalTrackRectangle.X + horizontalTrackRectangle.Width / 2.0f - (horizontalThumbLength / 2.0f) -
|
|
||||||
Math.Min(limitHorizontal, Math.Max(-limitHorizontal, form.CanvasCenterOffset.X / form.CanvasRectangle.Width * horizontalTrackLength)));
|
|
||||||
|
|
||||||
horizontalThumbRectangle = new Rectangle(new Point((int)thumbHorizontalPositionX, form.ClientArea.Bottom - (Thickness + Margin)),
|
|
||||||
new Size(horizontalThumbLength, Thickness));
|
|
||||||
}
|
|
||||||
|
|
||||||
shouldDrawVerticalScrollbar = form.ShapeManager.IsPanning &&
|
|
||||||
(form.CanvasRectangle.Top < form.ClientArea.Top || form.CanvasRectangle.Bottom > form.ClientArea.Bottom);
|
|
||||||
|
|
||||||
if (shouldDrawVerticalScrollbar != shouldDrawVerticalScrollbarBefore)
|
|
||||||
{
|
|
||||||
verticalScrollbarChangeTime = Stopwatch.StartNew();
|
|
||||||
VerticalScrollbarOpacityLast = VerticalScrollbarOpacityCurrent;
|
|
||||||
}
|
|
||||||
shouldDrawVerticalScrollbarBefore = shouldDrawVerticalScrollbar;
|
|
||||||
|
|
||||||
if (shouldDrawVerticalScrollbar)
|
|
||||||
{
|
|
||||||
VerticalScrollbarOpacityCurrent = VerticalScrollbarOpacityLast + OpacityGain(verticalScrollbarChangeTime);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
VerticalScrollbarOpacityCurrent = VerticalScrollbarOpacityLast - OpacityLoss(verticalScrollbarChangeTime);
|
|
||||||
}
|
|
||||||
VerticalScrollbarOpacityCurrent = VerticalScrollbarOpacityCurrent.Between(0, 255);
|
|
||||||
|
|
||||||
IsVerticalScrollbarVisible = VerticalScrollbarOpacityCurrent > 0;
|
|
||||||
if (IsVerticalScrollbarVisible)
|
|
||||||
{
|
|
||||||
int verticalTrackLength = form.ClientArea.Height - Margin * 2 - Thickness - Padding * 2;
|
|
||||||
int verticalThumbLength = Math.Max(Thickness, (int)Math.Round((float)imageRectangleVisible.Height / form.CanvasRectangle.Height * verticalTrackLength));
|
|
||||||
|
|
||||||
verticalTrackRectangle = new Rectangle(new Point(form.ClientArea.Right - (Thickness + Margin) - Padding, Margin - Padding),
|
|
||||||
new Size(Thickness + Padding * 2, verticalTrackLength + Padding * 2));
|
|
||||||
|
|
||||||
double limitVertical = (verticalTrackLength - verticalThumbLength) / 2.0f;
|
|
||||||
double thumbVerticalPositionY = Math.Round(verticalTrackRectangle.Y + verticalTrackRectangle.Height / 2.0f - (verticalThumbLength / 2.0f) -
|
|
||||||
Math.Min(limitVertical, Math.Max(-limitVertical, form.CanvasCenterOffset.Y / form.CanvasRectangle.Height * verticalTrackLength)));
|
|
||||||
|
|
||||||
verticalThumbRectangle = new Rectangle(new Point(form.ClientArea.Right - (Thickness + Margin), (int)thumbVerticalPositionY),
|
|
||||||
new Size(Thickness, verticalThumbLength));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Draw(Graphics g)
|
|
||||||
{
|
|
||||||
if (IsVisible)
|
|
||||||
{
|
|
||||||
if (IsHorizontalScrollbarVisible)
|
|
||||||
{
|
|
||||||
using (Brush trackBrush = new SolidBrush(Color.FromArgb(HorizontalScrollbarOpacityCurrent, 60, 60, 60)))
|
|
||||||
using (Brush thumbBrush = new SolidBrush(Color.FromArgb(HorizontalScrollbarOpacityCurrent, 130, 130, 130)))
|
|
||||||
{
|
|
||||||
g.SmoothingMode = SmoothingMode.HighQuality;
|
|
||||||
g.DrawCapsule(trackBrush, horizontalTrackRectangle);
|
|
||||||
g.DrawCapsule(thumbBrush, horizontalThumbRectangle);
|
|
||||||
g.SmoothingMode = SmoothingMode.None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (IsVerticalScrollbarVisible)
|
|
||||||
{
|
|
||||||
using (Brush trackBrush = new SolidBrush(Color.FromArgb(VerticalScrollbarOpacityCurrent, 60, 60, 60)))
|
|
||||||
using (Brush thumbBrush = new SolidBrush(Color.FromArgb(VerticalScrollbarOpacityCurrent, 130, 130, 130)))
|
|
||||||
{
|
|
||||||
g.SmoothingMode = SmoothingMode.HighQuality;
|
|
||||||
g.DrawCapsule(trackBrush, verticalTrackRectangle);
|
|
||||||
g.DrawCapsule(thumbBrush, verticalThumbRectangle);
|
|
||||||
g.SmoothingMode = SmoothingMode.None;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int OpacityGain(Stopwatch changeTime)
|
|
||||||
{
|
|
||||||
return (int)Math.Min(255.0f, 255.0f * changeTime.ElapsedMilliseconds / Math.Max(0, (float)FadeInTime));
|
|
||||||
}
|
|
||||||
|
|
||||||
private int OpacityLoss(Stopwatch changeTime)
|
|
||||||
{
|
|
||||||
int deltaTime = Math.Max(0, (int)changeTime.ElapsedMilliseconds - FadeOutDelay);
|
|
||||||
return (int)Math.Min(255.0f, 255.0f * deltaTime / Math.Max(0, (float)FadeOutTime));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -222,6 +222,7 @@ public bool NodesVisible
|
||||||
internal RegionCaptureForm Form { get; private set; }
|
internal RegionCaptureForm Form { get; private set; }
|
||||||
|
|
||||||
private bool isLeftPressed, isRightPressed, isUpPressed, isDownPressed;
|
private bool isLeftPressed, isRightPressed, isUpPressed, isDownPressed;
|
||||||
|
private ScrollbarManager scrollbarManager;
|
||||||
|
|
||||||
public ShapeManager(RegionCaptureForm form)
|
public ShapeManager(RegionCaptureForm form)
|
||||||
{
|
{
|
||||||
|
@ -264,6 +265,11 @@ public ShapeManager(RegionCaptureForm form)
|
||||||
{
|
{
|
||||||
CurrentTool = ShapeType.RegionRectangle;
|
CurrentTool = ShapeType.RegionRectangle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (form.IsEditorMode)
|
||||||
|
{
|
||||||
|
scrollbarManager = new ScrollbarManager(form, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void form_Shown(object sender, EventArgs e)
|
private void form_Shown(object sender, EventArgs e)
|
||||||
|
@ -741,6 +747,11 @@ public void Update()
|
||||||
UpdateCurrentHoverShape();
|
UpdateCurrentHoverShape();
|
||||||
|
|
||||||
UpdateNodes();
|
UpdateNodes();
|
||||||
|
|
||||||
|
if (scrollbarManager != null)
|
||||||
|
{
|
||||||
|
scrollbarManager.Update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StartRegionSelection()
|
private void StartRegionSelection()
|
||||||
|
|
|
@ -76,6 +76,8 @@ internal void CreateToolbar()
|
||||||
menuForm.KeyDown += MenuForm_KeyDown;
|
menuForm.KeyDown += MenuForm_KeyDown;
|
||||||
menuForm.KeyUp += MenuForm_KeyUp;
|
menuForm.KeyUp += MenuForm_KeyUp;
|
||||||
menuForm.LocationChanged += MenuForm_LocationChanged;
|
menuForm.LocationChanged += MenuForm_LocationChanged;
|
||||||
|
menuForm.GotFocus += MenuForm_GotFocus;
|
||||||
|
menuForm.LostFocus += MenuForm_LostFocus;
|
||||||
|
|
||||||
menuForm.SuspendLayout();
|
menuForm.SuspendLayout();
|
||||||
|
|
||||||
|
@ -1024,6 +1026,16 @@ private void MenuForm_LocationChanged(object sender, EventArgs e)
|
||||||
CheckMenuPosition();
|
CheckMenuPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void MenuForm_GotFocus(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Form.Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void MenuForm_LostFocus(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Form.Pause();
|
||||||
|
}
|
||||||
|
|
||||||
private void TsMain_MouseLeave(object sender, EventArgs e)
|
private void TsMain_MouseLeave(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
MenuTextAnimation.Stop();
|
MenuTextAnimation.Stop();
|
||||||
|
|
|
@ -126,6 +126,7 @@
|
||||||
<DependentUpon>StickerPackForm.cs</DependentUpon>
|
<DependentUpon>StickerPackForm.cs</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="RegionHelpers\ButtonObject.cs" />
|
<Compile Include="RegionHelpers\ButtonObject.cs" />
|
||||||
|
<Compile Include="RegionHelpers\ImageEditorScrollbar.cs" />
|
||||||
<Compile Include="RegionHelpers\ScrollbarManager.cs" />
|
<Compile Include="RegionHelpers\ScrollbarManager.cs" />
|
||||||
<Compile Include="Shapes\AnnotationOptions.cs" />
|
<Compile Include="Shapes\AnnotationOptions.cs" />
|
||||||
<Compile Include="Enums.cs" />
|
<Compile Include="Enums.cs" />
|
||||||
|
|
|
@ -90,12 +90,6 @@ Name: "{userstartup}\{#MyAppName}"; Filename: "{app}\{#MyAppFilename}"; WorkingD
|
||||||
[Run]
|
[Run]
|
||||||
Filename: "{app}\{#MyAppFilename}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall; Check: not IsNoRun
|
Filename: "{app}\{#MyAppFilename}"; Description: "{cm:LaunchProgram,{#MyAppName}}"; Flags: nowait postinstall; Check: not IsNoRun
|
||||||
|
|
||||||
[UninstallRun]
|
|
||||||
Filename: regsvr32; WorkingDir: {app}; Parameters: "/s /u screen-capture-recorder.dll"; Check: not IsWin64
|
|
||||||
Filename: regsvr32; WorkingDir: {app}; Parameters: "/s /u screen-capture-recorder-x64.dll"; Check: IsWin64
|
|
||||||
Filename: regsvr32; WorkingDir: {app}; Parameters: "/s /u audio_sniffer.dll"; Check: not IsWin64
|
|
||||||
Filename: regsvr32; WorkingDir: {app}; Parameters: "/s /u audio_sniffer-x64.dll"; Check: IsWin64
|
|
||||||
|
|
||||||
[Registry]
|
[Registry]
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; ValueType: string; ValueData: "Upload with {#MyAppName}"; Tasks: CreateContextMenuButton
|
Root: "HKCU"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; ValueType: string; ValueData: "Upload with {#MyAppName}"; Tasks: CreateContextMenuButton
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#MyAppFilename}"",0"; Tasks: CreateContextMenuButton
|
Root: "HKCU"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; ValueType: string; ValueName: "Icon"; ValueData: """{app}\{#MyAppFilename}"",0"; Tasks: CreateContextMenuButton
|
||||||
|
@ -105,7 +99,6 @@ Root: "HKCU"; Subkey: "Software\Classes\Directory\shell\{#MyAppName}"; ValueType
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\Directory\shell\{#MyAppName}\command"; ValueType: string; ValueData: """{app}\{#MyAppFilename}"" ""%1"""; Tasks: CreateContextMenuButton
|
Root: "HKCU"; Subkey: "Software\Classes\Directory\shell\{#MyAppName}\command"; ValueType: string; ValueData: """{app}\{#MyAppFilename}"" ""%1"""; Tasks: CreateContextMenuButton
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; Flags: dontcreatekey uninsdeletekey
|
Root: "HKCU"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; Flags: dontcreatekey uninsdeletekey
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\Directory\shell\{#MyAppName}"; Flags: dontcreatekey uninsdeletekey
|
Root: "HKCU"; Subkey: "Software\Classes\Directory\shell\{#MyAppName}"; Flags: dontcreatekey uninsdeletekey
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\Folder\shell\{#MyAppName}"; Flags: dontcreatekey uninsdeletekey
|
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\.sxcu"; Flags: dontcreatekey uninsdeletekey
|
Root: "HKCU"; Subkey: "Software\Classes\.sxcu"; Flags: dontcreatekey uninsdeletekey
|
||||||
Root: "HKCU"; Subkey: "Software\Classes\ShareX.sxcu"; Flags: dontcreatekey uninsdeletekey
|
Root: "HKCU"; Subkey: "Software\Classes\ShareX.sxcu"; Flags: dontcreatekey uninsdeletekey
|
||||||
|
|
||||||
|
|
|
@ -538,7 +538,6 @@ private void InitializeComponent()
|
||||||
this.cbGistUseRawURL = new System.Windows.Forms.CheckBox();
|
this.cbGistUseRawURL = new System.Windows.Forms.CheckBox();
|
||||||
this.cbGistPublishPublic = new System.Windows.Forms.CheckBox();
|
this.cbGistPublishPublic = new System.Windows.Forms.CheckBox();
|
||||||
this.oAuth2Gist = new ShareX.UploadersLib.OAuthControl();
|
this.oAuth2Gist = new ShareX.UploadersLib.OAuthControl();
|
||||||
this.atcGistAccountType = new ShareX.UploadersLib.AccountTypeControl();
|
|
||||||
this.tpUpaste = new System.Windows.Forms.TabPage();
|
this.tpUpaste = new System.Windows.Forms.TabPage();
|
||||||
this.cbUpasteIsPublic = new System.Windows.Forms.CheckBox();
|
this.cbUpasteIsPublic = new System.Windows.Forms.CheckBox();
|
||||||
this.lblUpasteUserKey = new System.Windows.Forms.Label();
|
this.lblUpasteUserKey = new System.Windows.Forms.Label();
|
||||||
|
@ -4433,7 +4432,6 @@ private void InitializeComponent()
|
||||||
this.tpGist.Controls.Add(this.cbGistUseRawURL);
|
this.tpGist.Controls.Add(this.cbGistUseRawURL);
|
||||||
this.tpGist.Controls.Add(this.cbGistPublishPublic);
|
this.tpGist.Controls.Add(this.cbGistPublishPublic);
|
||||||
this.tpGist.Controls.Add(this.oAuth2Gist);
|
this.tpGist.Controls.Add(this.oAuth2Gist);
|
||||||
this.tpGist.Controls.Add(this.atcGistAccountType);
|
|
||||||
resources.ApplyResources(this.tpGist, "tpGist");
|
resources.ApplyResources(this.tpGist, "tpGist");
|
||||||
this.tpGist.Name = "tpGist";
|
this.tpGist.Name = "tpGist";
|
||||||
//
|
//
|
||||||
|
@ -4474,20 +4472,13 @@ private void InitializeComponent()
|
||||||
//
|
//
|
||||||
// oAuth2Gist
|
// oAuth2Gist
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.oAuth2Gist, "oAuth2Gist");
|
|
||||||
this.oAuth2Gist.IsRefreshable = false;
|
this.oAuth2Gist.IsRefreshable = false;
|
||||||
|
resources.ApplyResources(this.oAuth2Gist, "oAuth2Gist");
|
||||||
this.oAuth2Gist.Name = "oAuth2Gist";
|
this.oAuth2Gist.Name = "oAuth2Gist";
|
||||||
this.oAuth2Gist.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2Gist_OpenButtonClicked);
|
this.oAuth2Gist.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oAuth2Gist_OpenButtonClicked);
|
||||||
this.oAuth2Gist.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2Gist_CompleteButtonClicked);
|
this.oAuth2Gist.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oAuth2Gist_CompleteButtonClicked);
|
||||||
this.oAuth2Gist.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2Gist_ClearButtonClicked);
|
this.oAuth2Gist.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oAuth2Gist_ClearButtonClicked);
|
||||||
//
|
//
|
||||||
// atcGistAccountType
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.atcGistAccountType, "atcGistAccountType");
|
|
||||||
this.atcGistAccountType.Name = "atcGistAccountType";
|
|
||||||
this.atcGistAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
|
|
||||||
this.atcGistAccountType.AccountTypeChanged += new ShareX.UploadersLib.AccountTypeControl.AccountTypeChangedEventHandler(this.atcGistAccountType_AccountTypeChanged);
|
|
||||||
//
|
|
||||||
// tpUpaste
|
// tpUpaste
|
||||||
//
|
//
|
||||||
this.tpUpaste.BackColor = System.Drawing.SystemColors.Window;
|
this.tpUpaste.BackColor = System.Drawing.SystemColors.Window;
|
||||||
|
@ -5546,7 +5537,6 @@ private void InitializeComponent()
|
||||||
private System.Windows.Forms.TextBox txtPaste_eeUserAPIKey;
|
private System.Windows.Forms.TextBox txtPaste_eeUserAPIKey;
|
||||||
private System.Windows.Forms.CheckBox cbGistPublishPublic;
|
private System.Windows.Forms.CheckBox cbGistPublishPublic;
|
||||||
private OAuthControl oAuth2Gist;
|
private OAuthControl oAuth2Gist;
|
||||||
private AccountTypeControl atcGistAccountType;
|
|
||||||
private System.Windows.Forms.CheckBox cbUpasteIsPublic;
|
private System.Windows.Forms.CheckBox cbUpasteIsPublic;
|
||||||
private System.Windows.Forms.Label lblUpasteUserKey;
|
private System.Windows.Forms.Label lblUpasteUserKey;
|
||||||
private System.Windows.Forms.TextBox txtUpasteUserKey;
|
private System.Windows.Forms.TextBox txtUpasteUserKey;
|
||||||
|
|
|
@ -312,8 +312,6 @@ public void LoadSettings()
|
||||||
|
|
||||||
#region Gist
|
#region Gist
|
||||||
|
|
||||||
atcGistAccountType.SelectedAccountType = Config.GistAnonymousLogin ? AccountType.Anonymous : AccountType.User;
|
|
||||||
|
|
||||||
if (OAuth2Info.CheckOAuth(Config.GistOAuth2Info))
|
if (OAuth2Info.CheckOAuth(Config.GistOAuth2Info))
|
||||||
{
|
{
|
||||||
oAuth2Gist.Status = OAuthLoginStatus.LoginSuccessful;
|
oAuth2Gist.Status = OAuthLoginStatus.LoginSuccessful;
|
||||||
|
@ -1263,12 +1261,6 @@ private void txtPaste_eeUserAPIKey_TextChanged(object sender, EventArgs e)
|
||||||
|
|
||||||
#region Gist
|
#region Gist
|
||||||
|
|
||||||
private void atcGistAccountType_AccountTypeChanged(AccountType accountType)
|
|
||||||
{
|
|
||||||
Config.GistAnonymousLogin = accountType == AccountType.Anonymous;
|
|
||||||
oAuth2Gist.Enabled = !Config.GistAnonymousLogin;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void oAuth2Gist_OpenButtonClicked()
|
private void oAuth2Gist_OpenButtonClicked()
|
||||||
{
|
{
|
||||||
GistAuthOpen();
|
GistAuthOpen();
|
||||||
|
|
|
@ -3545,6 +3545,24 @@ store.book[0].title</value>
|
||||||
<data name=">>tpPolr.ZOrder" xml:space="preserve">
|
<data name=">>tpPolr.ZOrder" xml:space="preserve">
|
||||||
<value>5</value>
|
<value>5</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="tcURLShorteners.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
|
<value>Fill</value>
|
||||||
|
</data>
|
||||||
|
<data name="tcURLShorteners.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>3, 3</value>
|
||||||
|
</data>
|
||||||
|
<data name="tcURLShorteners.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>980, 563</value>
|
||||||
|
</data>
|
||||||
|
<data name="tcURLShorteners.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tpPolr.Parent" xml:space="preserve">
|
||||||
|
<value>tcURLShorteners</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>tpPolr.ZOrder" xml:space="preserve">
|
||||||
|
<value>5</value>
|
||||||
|
</data>
|
||||||
<data name="txtFirebaseWebAPIKey.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="txtFirebaseWebAPIKey.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>18, 33</value>
|
<value>18, 33</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -3578,207 +3596,6 @@ store.book[0].title</value>
|
||||||
<data name="lblFirebaseDynamicDomain.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="lblFirebaseDynamicDomain.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>60, 13</value>
|
<value>60, 13</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblFirebaseDynamicDomain.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>5</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseDynamicDomain.Text" xml:space="preserve">
|
|
||||||
<value>.app.goo.gl</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseDynamicDomain.Name" xml:space="preserve">
|
|
||||||
<value>lblFirebaseDynamicDomain</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseDynamicDomain.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=">>lblFirebaseDynamicDomain.Parent" xml:space="preserve">
|
|
||||||
<value>tpFirebaseDynamicLinks</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseDynamicDomain.ZOrder" xml:space="preserve">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseDomain.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseDomain.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>15, 64</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseDomain.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>107, 13</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseDomain.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>4</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseDomain.Text" xml:space="preserve">
|
|
||||||
<value>Dynamic link domain:</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseDomain.Name" xml:space="preserve">
|
|
||||||
<value>lblFirebaseDomain</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseDomain.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=">>lblFirebaseDomain.Parent" xml:space="preserve">
|
|
||||||
<value>tpFirebaseDynamicLinks</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseDomain.ZOrder" xml:space="preserve">
|
|
||||||
<value>2</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtFirebaseDomain.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>18, 80</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtFirebaseDomain.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>45, 20</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtFirebaseDomain.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>3</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtFirebaseDomain.Name" xml:space="preserve">
|
|
||||||
<value>txtFirebaseDomain</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtFirebaseDomain.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.TextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtFirebaseDomain.Parent" xml:space="preserve">
|
|
||||||
<value>tpFirebaseDynamicLinks</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>txtFirebaseDomain.ZOrder" xml:space="preserve">
|
|
||||||
<value>3</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseWebAPIKey.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseWebAPIKey.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
|
||||||
<value>NoControl</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseWebAPIKey.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>15, 17</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseWebAPIKey.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>74, 13</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseWebAPIKey.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>2</value>
|
|
||||||
</data>
|
|
||||||
<data name="lblFirebaseWebAPIKey.Text" xml:space="preserve">
|
|
||||||
<value>Web API Key:</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseWebAPIKey.Name" xml:space="preserve">
|
|
||||||
<value>lblFirebaseWebAPIKey</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseWebAPIKey.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=">>lblFirebaseWebAPIKey.Parent" xml:space="preserve">
|
|
||||||
<value>tpFirebaseDynamicLinks</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>lblFirebaseWebAPIKey.ZOrder" xml:space="preserve">
|
|
||||||
<value>4</value>
|
|
||||||
</data>
|
|
||||||
<data name="cbFirebaseIsShort.AutoSize" type="System.Boolean, mscorlib">
|
|
||||||
<value>True</value>
|
|
||||||
</data>
|
|
||||||
<data name="cbFirebaseIsShort.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>19, 106</value>
|
|
||||||
</data>
|
|
||||||
<data name="cbFirebaseIsShort.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>70, 17</value>
|
|
||||||
</data>
|
|
||||||
<data name="cbFirebaseIsShort.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name="cbFirebaseIsShort.Text" xml:space="preserve">
|
|
||||||
<value>Short link</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>cbFirebaseIsShort.Name" xml:space="preserve">
|
|
||||||
<value>cbFirebaseIsShort</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>cbFirebaseIsShort.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>cbFirebaseIsShort.Parent" xml:space="preserve">
|
|
||||||
<value>tpFirebaseDynamicLinks</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>cbFirebaseIsShort.ZOrder" xml:space="preserve">
|
|
||||||
<value>5</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpFirebaseDynamicLinks.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>4, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpFirebaseDynamicLinks.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
|
||||||
<value>3, 3, 3, 3</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpFirebaseDynamicLinks.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>972, 537</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpFirebaseDynamicLinks.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>7</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpFirebaseDynamicLinks.Text" xml:space="preserve">
|
|
||||||
<value>Firebase Dynamic Links</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpFirebaseDynamicLinks.Name" xml:space="preserve">
|
|
||||||
<value>tpFirebaseDynamicLinks</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpFirebaseDynamicLinks.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpFirebaseDynamicLinks.Parent" xml:space="preserve">
|
|
||||||
<value>tcURLShorteners</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpFirebaseDynamicLinks.ZOrder" xml:space="preserve">
|
|
||||||
<value>6</value>
|
|
||||||
</data>
|
|
||||||
<data name="tcURLShorteners.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
|
||||||
<value>Fill</value>
|
|
||||||
</data>
|
|
||||||
<data name="tcURLShorteners.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>3, 3</value>
|
|
||||||
</data>
|
|
||||||
<data name="tcURLShorteners.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>980, 563</value>
|
|
||||||
</data>
|
|
||||||
<data name="tcURLShorteners.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tcURLShorteners.Name" xml:space="preserve">
|
|
||||||
<value>tcURLShorteners</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tcURLShorteners.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.TabControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tcURLShorteners.Parent" xml:space="preserve">
|
|
||||||
<value>tpURLShorteners</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tcURLShorteners.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpURLShorteners.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>4, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpURLShorteners.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
|
|
||||||
<value>3, 3, 3, 3</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpURLShorteners.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>986, 569</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpURLShorteners.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>3</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpURLShorteners.Text" xml:space="preserve">
|
|
||||||
<value>URL shorteners</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpURLShorteners.Name" xml:space="preserve">
|
|
||||||
<value>tpURLShorteners</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpURLShorteners.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.TabPage, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpURLShorteners.Parent" xml:space="preserve">
|
|
||||||
<value>tcUploaders</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>tpURLShorteners.ZOrder" xml:space="preserve">
|
|
||||||
<value>3</value>
|
|
||||||
</data>
|
|
||||||
<data name="txtSFTPKeyPassphrase.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="txtSFTPKeyPassphrase.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>184, 44</value>
|
<value>184, 44</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -4958,6 +4775,21 @@ store.book[0].title</value>
|
||||||
<data name=">>btnFTPDuplicate.Name" xml:space="preserve">
|
<data name=">>btnFTPDuplicate.Name" xml:space="preserve">
|
||||||
<value>btnFTPDuplicate</value>
|
<value>btnFTPDuplicate</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="btnFTPDuplicate.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>696, 11</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnFTPDuplicate.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>96, 23</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnFTPDuplicate.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>3</value>
|
||||||
|
</data>
|
||||||
|
<data name="btnFTPDuplicate.Text" xml:space="preserve">
|
||||||
|
<value>Duplicate</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>btnFTPDuplicate.Name" xml:space="preserve">
|
||||||
|
<value>btnFTPDuplicate</value>
|
||||||
|
</data>
|
||||||
<data name=">>btnFTPDuplicate.Type" xml:space="preserve">
|
<data name=">>btnFTPDuplicate.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -11958,7 +11790,7 @@ Using an encrypted library disables sharing.</value>
|
||||||
<value>4, 4, 4, 4</value>
|
<value>4, 4, 4, 4</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ucLocalhostAccounts.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="ucLocalhostAccounts.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>792, 4113</value>
|
<value>792, 999</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="ucLocalhostAccounts.TabIndex" type="System.Int32, mscorlib">
|
<data name="ucLocalhostAccounts.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>6</value>
|
<value>6</value>
|
||||||
|
@ -13050,7 +12882,7 @@ Using an encrypted library disables sharing.</value>
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistCustomURLExample.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="lblGistCustomURLExample.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>224, 364</value>
|
<value>224, 316</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistCustomURLExample.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="lblGistCustomURLExample.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>158, 13</value>
|
<value>158, 13</value>
|
||||||
|
@ -13080,16 +12912,16 @@ Using an encrypted library disables sharing.</value>
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistOAuthInfo.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="lblGistOAuthInfo.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>16, 64</value>
|
<value>13, 16</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistOAuthInfo.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="lblGistOAuthInfo.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>282, 13</value>
|
<value>200, 13</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistOAuthInfo.TabIndex" type="System.Int32, mscorlib">
|
<data name="lblGistOAuthInfo.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>23</value>
|
<value>23</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistOAuthInfo.Text" xml:space="preserve">
|
<data name="lblGistOAuthInfo.Text" xml:space="preserve">
|
||||||
<value>Note: User account is not supported for GitHub Enterprise.</value>
|
<value>Note: GitHub Enterprise is not supported.</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>lblGistOAuthInfo.Name" xml:space="preserve">
|
<data name=">>lblGistOAuthInfo.Name" xml:space="preserve">
|
||||||
<value>lblGistOAuthInfo</value>
|
<value>lblGistOAuthInfo</value>
|
||||||
|
@ -13110,7 +12942,7 @@ Using an encrypted library disables sharing.</value>
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistCustomURL.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="lblGistCustomURL.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>13, 344</value>
|
<value>13, 296</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="lblGistCustomURL.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="lblGistCustomURL.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>82, 13</value>
|
<value>82, 13</value>
|
||||||
|
@ -13134,7 +12966,7 @@ Using an encrypted library disables sharing.</value>
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtGistCustomURL.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="txtGistCustomURL.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>16, 360</value>
|
<value>16, 312</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="txtGistCustomURL.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="txtGistCustomURL.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>200, 20</value>
|
<value>200, 20</value>
|
||||||
|
@ -13161,7 +12993,7 @@ Using an encrypted library disables sharing.</value>
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cbGistUseRawURL.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cbGistUseRawURL.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>16, 320</value>
|
<value>16, 272</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cbGistUseRawURL.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="cbGistUseRawURL.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>90, 17</value>
|
<value>90, 17</value>
|
||||||
|
@ -13191,7 +13023,7 @@ Using an encrypted library disables sharing.</value>
|
||||||
<value>NoControl</value>
|
<value>NoControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cbGistPublishPublic.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cbGistPublishPublic.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>16, 296</value>
|
<value>16, 248</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="cbGistPublishPublic.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="cbGistPublishPublic.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>109, 17</value>
|
<value>109, 17</value>
|
||||||
|
@ -13214,11 +13046,8 @@ Using an encrypted library disables sharing.</value>
|
||||||
<data name=">>cbGistPublishPublic.ZOrder" xml:space="preserve">
|
<data name=">>cbGistPublishPublic.ZOrder" xml:space="preserve">
|
||||||
<value>5</value>
|
<value>5</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="oAuth2Gist.Enabled" type="System.Boolean, mscorlib">
|
|
||||||
<value>False</value>
|
|
||||||
</data>
|
|
||||||
<data name="oAuth2Gist.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="oAuth2Gist.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>16, 88</value>
|
<value>16, 40</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="oAuth2Gist.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="oAuth2Gist.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>328, 205</value>
|
<value>328, 205</value>
|
||||||
|
@ -13238,32 +13067,11 @@ Using an encrypted library disables sharing.</value>
|
||||||
<data name=">>oAuth2Gist.ZOrder" xml:space="preserve">
|
<data name=">>oAuth2Gist.ZOrder" xml:space="preserve">
|
||||||
<value>6</value>
|
<value>6</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="atcGistAccountType.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>16, 16</value>
|
|
||||||
</data>
|
|
||||||
<data name="atcGistAccountType.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>214, 40</value>
|
|
||||||
</data>
|
|
||||||
<data name="atcGistAccountType.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>atcGistAccountType.Name" xml:space="preserve">
|
|
||||||
<value>atcGistAccountType</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>atcGistAccountType.Type" xml:space="preserve">
|
|
||||||
<value>ShareX.UploadersLib.AccountTypeControl, ShareX.UploadersLib, Version=12.1.1.0, Culture=neutral, PublicKeyToken=null</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>atcGistAccountType.Parent" xml:space="preserve">
|
|
||||||
<value>tpGist</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>atcGistAccountType.ZOrder" xml:space="preserve">
|
|
||||||
<value>7</value>
|
|
||||||
</data>
|
|
||||||
<data name="tpGist.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="tpGist.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>4, 22</value>
|
<value>4, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tpGist.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="tpGist.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>178, 42</value>
|
<value>972, 537</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tpGist.TabIndex" type="System.Int32, mscorlib">
|
<data name="tpGist.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
|
|
|
@ -2008,7 +2008,6 @@ public void GistAuthComplete(string code)
|
||||||
{
|
{
|
||||||
oAuth2Gist.Status = OAuthLoginStatus.LoginFailed;
|
oAuth2Gist.Status = OAuthLoginStatus.LoginFailed;
|
||||||
MessageBox.Show(Resources.UploadersConfigForm_Login_failed, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
MessageBox.Show(Resources.UploadersConfigForm_Login_failed, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||||
atcGistAccountType.SelectedAccountType = AccountType.Anonymous;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ You should have received a copy of the GNU General Public License
|
||||||
|
|
||||||
#endregion License Information (GPL v3)
|
#endregion License Information (GPL v3)
|
||||||
|
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using ShareX.HelpersLib;
|
using ShareX.HelpersLib;
|
||||||
using ShareX.UploadersLib.Properties;
|
using ShareX.UploadersLib.Properties;
|
||||||
using System;
|
using System;
|
||||||
|
@ -390,7 +391,7 @@ private string ParseRegexSyntax(string syntax)
|
||||||
// http://goessner.net/articles/JsonPath/
|
// http://goessner.net/articles/JsonPath/
|
||||||
private string ParseJsonSyntax(string syntaxJsonPath)
|
private string ParseJsonSyntax(string syntaxJsonPath)
|
||||||
{
|
{
|
||||||
return Helpers.ParseJSON(response, syntaxJsonPath);
|
return (string)JToken.Parse(response).SelectToken("$." + syntaxJsonPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://www.w3schools.com/xsl/xpath_syntax.asp
|
// http://www.w3schools.com/xsl/xpath_syntax.asp
|
||||||
|
|
|
@ -30,6 +30,7 @@ You should have received a copy of the GNU General Public License
|
||||||
using ShareX.UploadersLib.Properties;
|
using ShareX.UploadersLib.Properties;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
|
@ -41,18 +42,14 @@ public class GitHubGistTextUploaderService : TextUploaderService
|
||||||
|
|
||||||
public override Icon ServiceIcon => Resources.GitHub;
|
public override Icon ServiceIcon => Resources.GitHub;
|
||||||
|
|
||||||
public override bool CheckConfig(UploadersConfig config) => true;
|
public override bool CheckConfig(UploadersConfig config)
|
||||||
|
{
|
||||||
|
return OAuth2Info.CheckOAuth(config.GistOAuth2Info);
|
||||||
|
}
|
||||||
|
|
||||||
public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo)
|
public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo)
|
||||||
{
|
{
|
||||||
OAuth2Info oauth = null;
|
return new GitHubGist(config.GistOAuth2Info)
|
||||||
|
|
||||||
if (!config.GistAnonymousLogin)
|
|
||||||
{
|
|
||||||
oauth = config.GistOAuth2Info;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new GitHubGist(oauth)
|
|
||||||
{
|
{
|
||||||
PublicUpload = config.GistPublishPublic,
|
PublicUpload = config.GistPublishPublic,
|
||||||
RawURL = config.GistRawURL,
|
RawURL = config.GistRawURL,
|
||||||
|
@ -73,10 +70,6 @@ public sealed class GitHubGist : TextUploader, IOAuth2Basic
|
||||||
public bool RawURL { get; set; }
|
public bool RawURL { get; set; }
|
||||||
public string CustomURLAPI { get; set; }
|
public string CustomURLAPI { get; set; }
|
||||||
|
|
||||||
public GitHubGist()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public GitHubGist(OAuth2Info oAuthInfos)
|
public GitHubGist(OAuth2Info oAuthInfos)
|
||||||
{
|
{
|
||||||
AuthInfo = oAuthInfos;
|
AuthInfo = oAuthInfos;
|
||||||
|
@ -133,8 +126,6 @@ public override UploadResult UploadText(string text, string fileName)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
string json = JsonConvert.SerializeObject(gistUploadObject);
|
|
||||||
|
|
||||||
string url;
|
string url;
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(CustomURLAPI))
|
if (!string.IsNullOrEmpty(CustomURLAPI))
|
||||||
|
@ -148,27 +139,41 @@ public override UploadResult UploadText(string text, string fileName)
|
||||||
|
|
||||||
url = URLHelpers.CombineURL(url, "gists");
|
url = URLHelpers.CombineURL(url, "gists");
|
||||||
|
|
||||||
if (AuthInfo != null)
|
string json = JsonConvert.SerializeObject(gistUploadObject);
|
||||||
{
|
|
||||||
url += "?access_token=" + AuthInfo.Token.access_token;
|
|
||||||
}
|
|
||||||
|
|
||||||
string response = SendRequest(HttpMethod.POST, url, json, ContentTypeJSON);
|
Dictionary<string, string> args = new Dictionary<string, string>();
|
||||||
|
args.Add("access_token", AuthInfo.Token.access_token);
|
||||||
|
|
||||||
|
string response = SendRequest(HttpMethod.POST, url, json, ContentTypeJSON, args);
|
||||||
|
|
||||||
|
GistResponse gistResponse = JsonConvert.DeserializeObject<GistResponse>(response);
|
||||||
|
|
||||||
if (response != null)
|
if (response != null)
|
||||||
{
|
{
|
||||||
if (RawURL)
|
if (RawURL)
|
||||||
{
|
{
|
||||||
ur.URL = Helpers.ParseJSON(response, "files.*.raw_url");
|
ur.URL = gistResponse.files.First().Value.raw_url;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ur.URL = Helpers.ParseJSON(response, "html_url");
|
ur.URL = gistResponse.html_url;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ur;
|
return ur;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class GistResponse
|
||||||
|
{
|
||||||
|
public string html_url { get; set; }
|
||||||
|
public Dictionary<string, GistFileInfo> files { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class GistFileInfo
|
||||||
|
{
|
||||||
|
public string filename { get; set; }
|
||||||
|
public string raw_url { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -116,7 +116,6 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
|
||||||
|
|
||||||
#region Gist
|
#region Gist
|
||||||
|
|
||||||
public bool GistAnonymousLogin = true;
|
|
||||||
public OAuth2Info GistOAuth2Info = null;
|
public OAuth2Info GistOAuth2Info = null;
|
||||||
public bool GistPublishPublic = false;
|
public bool GistPublishPublic = false;
|
||||||
public bool GistRawURL = false;
|
public bool GistRawURL = false;
|
||||||
|
|
|
@ -110,10 +110,11 @@ public enum AfterCaptureTasks // Localized
|
||||||
CopyFileToClipboard = 1 << 10,
|
CopyFileToClipboard = 1 << 10,
|
||||||
CopyFilePathToClipboard = 1 << 11,
|
CopyFilePathToClipboard = 1 << 11,
|
||||||
ShowInExplorer = 1 << 12,
|
ShowInExplorer = 1 << 12,
|
||||||
DoOCR = 1 << 13,
|
ScanQRCode = 1 << 13,
|
||||||
ShowBeforeUploadWindow = 1 << 14,
|
DoOCR = 1 << 14,
|
||||||
UploadImageToHost = 1 << 15,
|
ShowBeforeUploadWindow = 1 << 15,
|
||||||
DeleteFile = 1 << 16
|
UploadImageToHost = 1 << 16,
|
||||||
|
DeleteFile = 1 << 17
|
||||||
}
|
}
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
|
|
1
ShareX/Forms/AutoCaptureForm.Designer.cs
generated
1
ShareX/Forms/AutoCaptureForm.Designer.cs
generated
|
@ -77,6 +77,7 @@ private void InitializeComponent()
|
||||||
//
|
//
|
||||||
// tsslStatus
|
// tsslStatus
|
||||||
//
|
//
|
||||||
|
this.tsslStatus.BackColor = System.Drawing.Color.Transparent;
|
||||||
this.tsslStatus.Name = "tsslStatus";
|
this.tsslStatus.Name = "tsslStatus";
|
||||||
resources.ApplyResources(this.tsslStatus, "tsslStatus");
|
resources.ApplyResources(this.tsslStatus, "tsslStatus");
|
||||||
//
|
//
|
||||||
|
|
|
@ -51,6 +51,7 @@ public static AutoCaptureForm Instance
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool IsRunning { get; private set; }
|
public static bool IsRunning { get; private set; }
|
||||||
|
public TaskSettings TaskSettings { get; internal set; }
|
||||||
|
|
||||||
private bool isLoaded;
|
private bool isLoaded;
|
||||||
private Timer statusTimer;
|
private Timer statusTimer;
|
||||||
|
@ -107,27 +108,25 @@ private void TakeScreenshot()
|
||||||
|
|
||||||
if (!rect.IsEmpty)
|
if (!rect.IsEmpty)
|
||||||
{
|
{
|
||||||
TaskSettings taskSettings = TaskSettings.GetDefaultTaskSettings();
|
Image img = TaskHelpers.GetScreenshot(TaskSettings).CaptureRectangle(rect);
|
||||||
|
|
||||||
Image img = TaskHelpers.GetScreenshot(taskSettings).CaptureRectangle(rect);
|
|
||||||
|
|
||||||
if (img != null)
|
if (img != null)
|
||||||
{
|
{
|
||||||
taskSettings.UseDefaultAfterCaptureJob = false;
|
TaskSettings.UseDefaultAfterCaptureJob = false;
|
||||||
taskSettings.AfterCaptureJob = taskSettings.AfterCaptureJob.Remove(AfterCaptureTasks.AnnotateImage);
|
TaskSettings.AfterCaptureJob = TaskSettings.AfterCaptureJob.Remove(AfterCaptureTasks.AnnotateImage);
|
||||||
taskSettings.UseDefaultAdvancedSettings = false;
|
TaskSettings.UseDefaultAdvancedSettings = false;
|
||||||
taskSettings.AdvancedSettings.DisableNotifications = true;
|
TaskSettings.AdvancedSettings.DisableNotifications = true;
|
||||||
|
|
||||||
UploadManager.RunImageTask(img, taskSettings, true, true);
|
UploadManager.RunImageTask(img, TaskSettings, true, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SelectRegion(TaskSettings taskSettings)
|
private void SelectRegion()
|
||||||
{
|
{
|
||||||
Rectangle rect;
|
Rectangle rect;
|
||||||
|
|
||||||
if (RegionCaptureTasks.GetRectangleRegion(out rect, taskSettings.CaptureSettings.SurfaceOptions))
|
if (RegionCaptureTasks.GetRectangleRegion(out rect, TaskSettings.CaptureSettings.SurfaceOptions))
|
||||||
{
|
{
|
||||||
Program.Settings.AutoCaptureRegion = rect;
|
Program.Settings.AutoCaptureRegion = rect;
|
||||||
UpdateRegion();
|
UpdateRegion();
|
||||||
|
@ -208,8 +207,7 @@ private void rbCustomRegion_CheckedChanged(object sender, EventArgs e)
|
||||||
|
|
||||||
private void btnRegion_Click(object sender, EventArgs e)
|
private void btnRegion_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
TaskSettings taskSettings = TaskSettings.GetDefaultTaskSettings();
|
SelectRegion();
|
||||||
SelectRegion(taskSettings);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void nudDuration_ValueChanged(object sender, EventArgs e)
|
private void nudDuration_ValueChanged(object sender, EventArgs e)
|
||||||
|
|
|
@ -121,6 +121,12 @@
|
||||||
<value>17, 17</value>
|
<value>17, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
|
<data name="tspbBar.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>75, 16</value>
|
||||||
|
</data>
|
||||||
|
<data name="tsslStatus.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>0, 17</value>
|
||||||
|
</data>
|
||||||
<data name="ssBar.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="ssBar.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 241</value>
|
<value>0, 241</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -146,12 +152,6 @@
|
||||||
<data name=">>ssBar.ZOrder" xml:space="preserve">
|
<data name=">>ssBar.ZOrder" xml:space="preserve">
|
||||||
<value>7</value>
|
<value>7</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="tspbBar.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>75, 16</value>
|
|
||||||
</data>
|
|
||||||
<data name="tsslStatus.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>0, 17</value>
|
|
||||||
</data>
|
|
||||||
<data name="btnExecute.Enabled" type="System.Boolean, mscorlib">
|
<data name="btnExecute.Enabled" type="System.Boolean, mscorlib">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -369,54 +369,6 @@
|
||||||
<data name=">>lblDurationSeconds.ZOrder" xml:space="preserve">
|
<data name=">>lblDurationSeconds.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>rbFullscreen.Name" xml:space="preserve">
|
|
||||||
<value>rbFullscreen</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>rbFullscreen.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>rbFullscreen.Parent" xml:space="preserve">
|
|
||||||
<value>gbRegion</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>rbFullscreen.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>rbCustomRegion.Name" xml:space="preserve">
|
|
||||||
<value>rbCustomRegion</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>rbCustomRegion.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>rbCustomRegion.Parent" xml:space="preserve">
|
|
||||||
<value>gbRegion</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>rbCustomRegion.ZOrder" xml:space="preserve">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name="gbRegion.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>8, 8</value>
|
|
||||||
</data>
|
|
||||||
<data name="gbRegion.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>304, 96</value>
|
|
||||||
</data>
|
|
||||||
<data name="gbRegion.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name="gbRegion.Text" xml:space="preserve">
|
|
||||||
<value>Region</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>gbRegion.Name" xml:space="preserve">
|
|
||||||
<value>gbRegion</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>gbRegion.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>gbRegion.Parent" xml:space="preserve">
|
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>gbRegion.ZOrder" xml:space="preserve">
|
|
||||||
<value>0</value>
|
|
||||||
</data>
|
|
||||||
<data name="rbFullscreen.AutoSize" type="System.Boolean, mscorlib">
|
<data name="rbFullscreen.AutoSize" type="System.Boolean, mscorlib">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</data>
|
</data>
|
||||||
|
@ -471,6 +423,30 @@
|
||||||
<data name=">>rbCustomRegion.ZOrder" xml:space="preserve">
|
<data name=">>rbCustomRegion.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="gbRegion.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>8, 8</value>
|
||||||
|
</data>
|
||||||
|
<data name="gbRegion.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>304, 96</value>
|
||||||
|
</data>
|
||||||
|
<data name="gbRegion.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>0</value>
|
||||||
|
</data>
|
||||||
|
<data name="gbRegion.Text" xml:space="preserve">
|
||||||
|
<value>Region</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>gbRegion.Name" xml:space="preserve">
|
||||||
|
<value>gbRegion</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>gbRegion.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.GroupBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>gbRegion.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>gbRegion.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">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
|
|
@ -52,18 +52,29 @@ public QRCodeForm(string text = null)
|
||||||
{
|
{
|
||||||
txtQRCode.Text = text;
|
txtQRCode.Text = text;
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
|
||||||
if (Clipboard.ContainsText())
|
|
||||||
{
|
|
||||||
text = Clipboard.GetText();
|
|
||||||
|
|
||||||
if (TaskHelpers.CheckQRCodeContent(text))
|
public static QRCodeForm EncodeClipboard()
|
||||||
{
|
{
|
||||||
txtQRCode.Text = text;
|
if (Clipboard.ContainsText())
|
||||||
}
|
{
|
||||||
|
string text = Clipboard.GetText();
|
||||||
|
|
||||||
|
if (TaskHelpers.CheckQRCodeContent(text))
|
||||||
|
{
|
||||||
|
return new QRCodeForm(text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new QRCodeForm();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static QRCodeForm DecodeFile(string filePath)
|
||||||
|
{
|
||||||
|
QRCodeForm form = new QRCodeForm();
|
||||||
|
form.tcMain.SelectedTab = form.tpDecode;
|
||||||
|
form.DecodeFromFile(filePath);
|
||||||
|
return form;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void QRCodeForm_Shown(object sender, EventArgs e)
|
private void QRCodeForm_Shown(object sender, EventArgs e)
|
||||||
|
@ -110,6 +121,20 @@ private void DecodeImage(Bitmap bmp)
|
||||||
txtDecodeResult.Text = output;
|
txtDecodeResult.Text = output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void DecodeFromFile(string filePath)
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(filePath))
|
||||||
|
{
|
||||||
|
using (Image img = ImageHelpers.LoadImage(filePath))
|
||||||
|
{
|
||||||
|
if (img != null)
|
||||||
|
{
|
||||||
|
DecodeImage((Bitmap)img);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void QRCodeForm_Resize(object sender, EventArgs e)
|
private void QRCodeForm_Resize(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
EncodeText(txtQRCode.Text);
|
EncodeText(txtQRCode.Text);
|
||||||
|
@ -212,16 +237,7 @@ private void btnDecodeFromFile_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
string filePath = ImageHelpers.OpenImageFileDialog();
|
string filePath = ImageHelpers.OpenImageFileDialog();
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(filePath))
|
DecodeFromFile(filePath);
|
||||||
{
|
|
||||||
using (Image img = ImageHelpers.LoadImage(filePath))
|
|
||||||
{
|
|
||||||
if (img != null)
|
|
||||||
{
|
|
||||||
DecodeImage((Bitmap)img);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -39,35 +39,32 @@ namespace ShareX
|
||||||
{
|
{
|
||||||
public static class IntegrationHelpers
|
public static class IntegrationHelpers
|
||||||
{
|
{
|
||||||
private static readonly string ApplicationName = "ShareX";
|
private static readonly string ApplicationPath = $"\"{Application.ExecutablePath}\"";
|
||||||
private static readonly string ApplicationPath = string.Format("\"{0}\"", Application.ExecutablePath);
|
|
||||||
|
|
||||||
private static readonly string ShellExtMenuFiles = @"Software\Classes\*\shell\" + ApplicationName;
|
private static readonly string ShellExtMenuName = "ShareX";
|
||||||
private static readonly string ShellExtMenuFilesCmd = ShellExtMenuFiles + @"\command";
|
private static readonly string ShellExtMenuFiles = $@"Software\Classes\*\shell\{ShellExtMenuName}";
|
||||||
private static readonly string ShellExtMenuDirectory = @"Software\Classes\Directory\shell\" + ApplicationName;
|
private static readonly string ShellExtMenuFilesCmd = $@"{ShellExtMenuFiles}\command";
|
||||||
private static readonly string ShellExtMenuDirectoryCmd = ShellExtMenuDirectory + @"\command";
|
private static readonly string ShellExtMenuDirectory = $@"Software\Classes\Directory\shell\{ShellExtMenuName}";
|
||||||
private static readonly string ShellExtMenuFolders = @"Software\Classes\Folder\shell\" + ApplicationName;
|
private static readonly string ShellExtMenuDirectoryCmd = $@"{ShellExtMenuDirectory}\command";
|
||||||
private static readonly string ShellExtMenuFoldersCmd = ShellExtMenuFolders + @"\command";
|
|
||||||
private static readonly string ShellExtDesc = Resources.IntegrationHelpers_UploadWithShareX;
|
private static readonly string ShellExtDesc = Resources.IntegrationHelpers_UploadWithShareX;
|
||||||
private static readonly string ShellExtIcon = ApplicationPath + ",0";
|
private static readonly string ShellExtIcon = $"{ApplicationPath},0";
|
||||||
private static readonly string ShellExtPath = ApplicationPath + " \"%1\"";
|
private static readonly string ShellExtPath = $"{ApplicationPath} \"%1\"";
|
||||||
|
|
||||||
private static readonly string ShellExtEditMenuJpeg = @"Software\Classes\.jpg\shell\" + ApplicationName;
|
private static readonly string ShellExtEditName = "ShareXImageEditor";
|
||||||
private static readonly string ShellExtEditMenuJpegCmd = ShellExtEditMenuJpeg + @"\command";
|
private static readonly string ShellExtEditImage = $@"Software\Classes\SystemFileAssociations\image\shell\{ShellExtEditName}";
|
||||||
private static readonly string ShellExtEditMenuPng = @"Software\Classes\.png\shell\" + ApplicationName;
|
private static readonly string ShellExtEditImageCmd = $@"{ShellExtEditImage}\command";
|
||||||
private static readonly string ShellExtEditMenuPngCmd = ShellExtEditMenuPng + @"\command";
|
|
||||||
private static readonly string ShellExtEditDesc = "Edit with ShareX"; // TODO: Translate
|
private static readonly string ShellExtEditDesc = "Edit with ShareX"; // TODO: Translate
|
||||||
private static readonly string ShellExtEditIcon = ApplicationPath + ",0";
|
private static readonly string ShellExtEditIcon = $"{ApplicationPath},0";
|
||||||
private static readonly string ShellExtEditPath = ApplicationPath + " -ImageEditor \"%1\"";
|
private static readonly string ShellExtEditPath = $"{ApplicationPath} -ImageEditor \"%1\"";
|
||||||
|
|
||||||
private static readonly string ShellCustomUploaderExtensionPath = @"Software\Classes\.sxcu";
|
private static readonly string ShellCustomUploaderExtensionPath = @"Software\Classes\.sxcu";
|
||||||
private static readonly string ShellCustomUploaderExtensionValue = "ShareX.sxcu";
|
private static readonly string ShellCustomUploaderExtensionValue = "ShareX.sxcu";
|
||||||
private static readonly string ShellCustomUploaderAssociatePath = @"Software\Classes\" + ShellCustomUploaderExtensionValue;
|
private static readonly string ShellCustomUploaderAssociatePath = $@"Software\Classes\{ShellCustomUploaderExtensionValue}";
|
||||||
private static readonly string ShellCustomUploaderAssociateValue = "ShareX custom uploader";
|
private static readonly string ShellCustomUploaderAssociateValue = "ShareX custom uploader";
|
||||||
private static readonly string ShellCustomUploaderIconPath = ShellCustomUploaderAssociatePath + @"\DefaultIcon";
|
private static readonly string ShellCustomUploaderIconPath = $@"{ShellCustomUploaderAssociatePath}\DefaultIcon";
|
||||||
private static readonly string ShellCustomUploaderIconValue = ApplicationPath + ",0";
|
private static readonly string ShellCustomUploaderIconValue = $"{ApplicationPath},0";
|
||||||
private static readonly string ShellCustomUploaderCommandPath = ShellCustomUploaderAssociatePath + @"\shell\open\command";
|
private static readonly string ShellCustomUploaderCommandPath = $@"{ShellCustomUploaderAssociatePath}\shell\open\command";
|
||||||
private static readonly string ShellCustomUploaderCommandValue = ApplicationPath + " -CustomUploader \"%1\"";
|
private static readonly string ShellCustomUploaderCommandValue = $"{ApplicationPath} -CustomUploader \"%1\"";
|
||||||
|
|
||||||
private static readonly string ChromeNativeMessagingHosts = @"SOFTWARE\Google\Chrome\NativeMessagingHosts\com.getsharex.sharex";
|
private static readonly string ChromeNativeMessagingHosts = @"SOFTWARE\Google\Chrome\NativeMessagingHosts\com.getsharex.sharex";
|
||||||
private static readonly string FirefoxNativeMessagingHosts = @"SOFTWARE\Mozilla\NativeMessagingHosts\ShareX";
|
private static readonly string FirefoxNativeMessagingHosts = @"SOFTWARE\Mozilla\NativeMessagingHosts\ShareX";
|
||||||
|
@ -76,7 +73,8 @@ public static bool CheckShellContextMenuButton()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return RegistryHelpers.CheckRegistry(ShellExtMenuFilesCmd, null, ShellExtPath) && RegistryHelpers.CheckRegistry(ShellExtMenuDirectoryCmd, null, ShellExtPath);
|
return RegistryHelpers.CheckRegistry(ShellExtMenuFilesCmd, null, ShellExtPath) &&
|
||||||
|
RegistryHelpers.CheckRegistry(ShellExtMenuDirectoryCmd, null, ShellExtPath);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -121,14 +119,13 @@ private static void UnregisterShellContextMenuButton()
|
||||||
{
|
{
|
||||||
RegistryHelpers.RemoveRegistry(ShellExtMenuFiles, true);
|
RegistryHelpers.RemoveRegistry(ShellExtMenuFiles, true);
|
||||||
RegistryHelpers.RemoveRegistry(ShellExtMenuDirectory, true);
|
RegistryHelpers.RemoveRegistry(ShellExtMenuDirectory, true);
|
||||||
RegistryHelpers.RemoveRegistry(ShellExtMenuFolders, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool CheckEditShellContextMenuButton()
|
public static bool CheckEditShellContextMenuButton()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return RegistryHelpers.CheckRegistry(ShellExtEditMenuJpegCmd, null, ShellExtEditPath) && RegistryHelpers.CheckRegistry(ShellExtEditMenuPngCmd, null, ShellExtEditPath);
|
return RegistryHelpers.CheckRegistry(ShellExtEditImageCmd, null, ShellExtEditPath);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -160,19 +157,14 @@ public static void CreateEditShellContextMenuButton(bool create)
|
||||||
|
|
||||||
private static void RegisterEditShellContextMenuButton()
|
private static void RegisterEditShellContextMenuButton()
|
||||||
{
|
{
|
||||||
RegistryHelpers.CreateRegistry(ShellExtEditMenuJpeg, ShellExtEditDesc);
|
RegistryHelpers.CreateRegistry(ShellExtEditImage, ShellExtEditDesc);
|
||||||
RegistryHelpers.CreateRegistry(ShellExtEditMenuJpeg, "Icon", ShellExtEditIcon);
|
RegistryHelpers.CreateRegistry(ShellExtEditImage, "Icon", ShellExtEditIcon);
|
||||||
RegistryHelpers.CreateRegistry(ShellExtEditMenuJpegCmd, ShellExtEditPath);
|
RegistryHelpers.CreateRegistry(ShellExtEditImageCmd, ShellExtEditPath);
|
||||||
|
|
||||||
RegistryHelpers.CreateRegistry(ShellExtEditMenuPng, ShellExtEditDesc);
|
|
||||||
RegistryHelpers.CreateRegistry(ShellExtEditMenuPng, "Icon", ShellExtEditIcon);
|
|
||||||
RegistryHelpers.CreateRegistry(ShellExtEditMenuPngCmd, ShellExtEditPath);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void UnregisterEditShellContextMenuButton()
|
private static void UnregisterEditShellContextMenuButton()
|
||||||
{
|
{
|
||||||
RegistryHelpers.RemoveRegistry(ShellExtEditMenuJpeg, true);
|
RegistryHelpers.RemoveRegistry(ShellExtEditImage, true);
|
||||||
RegistryHelpers.RemoveRegistry(ShellExtEditMenuPng, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool CheckCustomUploaderExtension()
|
public static bool CheckCustomUploaderExtension()
|
||||||
|
@ -230,7 +222,8 @@ public static bool CheckChromeExtensionSupport()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return RegistryHelpers.CheckRegistry(ChromeNativeMessagingHosts, null, Program.ChromeHostManifestFilePath) && File.Exists(Program.ChromeHostManifestFilePath);
|
return RegistryHelpers.CheckRegistry(ChromeNativeMessagingHosts, null, Program.ChromeHostManifestFilePath) &&
|
||||||
|
File.Exists(Program.ChromeHostManifestFilePath);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -299,7 +292,8 @@ public static bool CheckFirefoxAddonSupport()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return RegistryHelpers.CheckRegistry(FirefoxNativeMessagingHosts, null, Program.FirefoxHostManifestFilePath) && File.Exists(Program.FirefoxHostManifestFilePath);
|
return RegistryHelpers.CheckRegistry(FirefoxNativeMessagingHosts, null, Program.FirefoxHostManifestFilePath) &&
|
||||||
|
File.Exists(Program.FirefoxHostManifestFilePath);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
@ -409,6 +403,7 @@ public static void Uninstall()
|
||||||
{
|
{
|
||||||
StartupManagerSingletonProvider.CurrentStartupManager.State = StartupTaskState.Disabled;
|
StartupManagerSingletonProvider.CurrentStartupManager.State = StartupTaskState.Disabled;
|
||||||
CreateShellContextMenuButton(false);
|
CreateShellContextMenuButton(false);
|
||||||
|
CreateEditShellContextMenuButton(false);
|
||||||
CreateCustomUploaderExtension(false);
|
CreateCustomUploaderExtension(false);
|
||||||
CreateSendToMenuButton(false);
|
CreateSendToMenuButton(false);
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,10 +135,10 @@ public static void ExecuteJob(TaskSettings taskSettings, HotkeyType job, CLIComm
|
||||||
OCRImage(safeTaskSettings);
|
OCRImage(safeTaskSettings);
|
||||||
break;
|
break;
|
||||||
case HotkeyType.AutoCapture:
|
case HotkeyType.AutoCapture:
|
||||||
OpenAutoCapture();
|
OpenAutoCapture(safeTaskSettings);
|
||||||
break;
|
break;
|
||||||
case HotkeyType.StartAutoCapture:
|
case HotkeyType.StartAutoCapture:
|
||||||
StartAutoCapture();
|
StartAutoCapture(safeTaskSettings);
|
||||||
break;
|
break;
|
||||||
// Screen record
|
// Screen record
|
||||||
case HotkeyType.ScreenRecorder:
|
case HotkeyType.ScreenRecorder:
|
||||||
|
@ -653,8 +653,11 @@ public static void OpenScrollingCapture(TaskSettings taskSettings = null, bool f
|
||||||
scrollingCaptureForm.Show();
|
scrollingCaptureForm.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OpenAutoCapture()
|
public static void OpenAutoCapture(TaskSettings taskSettings = null)
|
||||||
{
|
{
|
||||||
|
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||||
|
|
||||||
|
AutoCaptureForm.Instance.TaskSettings = taskSettings;
|
||||||
AutoCaptureForm.Instance.ForceActivate();
|
AutoCaptureForm.Instance.ForceActivate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -674,11 +677,14 @@ public static void OpenWebpageCapture(TaskSettings taskSettings = null)
|
||||||
webpageCaptureForm.Show();
|
webpageCaptureForm.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void StartAutoCapture()
|
public static void StartAutoCapture(TaskSettings taskSettings = null)
|
||||||
{
|
{
|
||||||
|
if (taskSettings == null) taskSettings = TaskSettings.GetDefaultTaskSettings();
|
||||||
|
|
||||||
if (!AutoCaptureForm.IsRunning)
|
if (!AutoCaptureForm.IsRunning)
|
||||||
{
|
{
|
||||||
AutoCaptureForm form = AutoCaptureForm.Instance;
|
AutoCaptureForm form = AutoCaptureForm.Instance;
|
||||||
|
form.TaskSettings = taskSettings;
|
||||||
form.Show();
|
form.Show();
|
||||||
form.Execute();
|
form.Execute();
|
||||||
}
|
}
|
||||||
|
@ -1004,7 +1010,7 @@ public static void RunShareXAsAdmin(string arguments)
|
||||||
|
|
||||||
public static void OpenQRCode()
|
public static void OpenQRCode()
|
||||||
{
|
{
|
||||||
new QRCodeForm().Show();
|
QRCodeForm.EncodeClipboard().Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void OpenRuler(TaskSettings taskSettings = null)
|
public static void OpenRuler(TaskSettings taskSettings = null)
|
||||||
|
@ -1330,6 +1336,8 @@ public static Image FindMenuIcon<T>(int index)
|
||||||
return Resources.clipboard_list;
|
return Resources.clipboard_list;
|
||||||
case AfterCaptureTasks.ShowInExplorer:
|
case AfterCaptureTasks.ShowInExplorer:
|
||||||
return Resources.folder_stand;
|
return Resources.folder_stand;
|
||||||
|
case AfterCaptureTasks.ScanQRCode:
|
||||||
|
return Resources.barcode_2d;
|
||||||
case AfterCaptureTasks.DoOCR:
|
case AfterCaptureTasks.DoOCR:
|
||||||
return Resources.edit_drop_cap;
|
return Resources.edit_drop_cap;
|
||||||
case AfterCaptureTasks.ShowBeforeUploadWindow:
|
case AfterCaptureTasks.ShowBeforeUploadWindow:
|
||||||
|
|
|
@ -718,6 +718,11 @@ private void DoFileJobs()
|
||||||
{
|
{
|
||||||
Helpers.OpenFolderWithFile(Info.FilePath);
|
Helpers.OpenFolderWithFile(Info.FilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Info.TaskSettings.AfterCaptureJob.HasFlag(AfterCaptureTasks.ScanQRCode) && Info.DataType == EDataType.Image)
|
||||||
|
{
|
||||||
|
QRCodeForm.DecodeFile(Info.FilePath).ShowDialog();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue