This commit is contained in:
Absay 2018-07-10 12:36:09 -05:00
commit 98a1b39b5e
84 changed files with 1060 additions and 712 deletions

View file

@ -186,6 +186,7 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2015-2017 Google Inc. & Arjen Nienhuis
Copyright 2017 - 2018 Blob Emoji
Licensed under the Apache License, Version 2.0 (the "License");

View file

@ -37,48 +37,37 @@ public ToolStripRadioButtonMenuItem()
Initialize();
}
public ToolStripRadioButtonMenuItem(string text)
: base(text, null, (EventHandler)null)
public ToolStripRadioButtonMenuItem(string text) : base(text, null, (EventHandler)null)
{
Initialize();
}
public ToolStripRadioButtonMenuItem(Image image)
: base(null, image, (EventHandler)null)
public ToolStripRadioButtonMenuItem(Image image) : base(null, image, (EventHandler)null)
{
Initialize();
}
public ToolStripRadioButtonMenuItem(string text, Image image)
: base(text, image, (EventHandler)null)
public ToolStripRadioButtonMenuItem(string text, Image image) : base(text, image, (EventHandler)null)
{
Initialize();
}
public ToolStripRadioButtonMenuItem(string text, Image image,
EventHandler onClick)
: base(text, image, onClick)
public ToolStripRadioButtonMenuItem(string text, Image image, EventHandler onClick) : base(text, image, onClick)
{
Initialize();
}
public ToolStripRadioButtonMenuItem(string text, Image image,
EventHandler onClick, string name)
: base(text, image, onClick, name)
public ToolStripRadioButtonMenuItem(string text, Image image, EventHandler onClick, string name) : base(text, image, onClick, name)
{
Initialize();
}
public ToolStripRadioButtonMenuItem(string text, Image image,
params ToolStripItem[] dropDownItems)
: base(text, image, dropDownItems)
public ToolStripRadioButtonMenuItem(string text, Image image, params ToolStripItem[] dropDownItems) : base(text, image, dropDownItems)
{
Initialize();
}
public ToolStripRadioButtonMenuItem(string text, Image image,
EventHandler onClick, Keys shortcutKeys)
: base(text, image, onClick)
public ToolStripRadioButtonMenuItem(string text, Image image, EventHandler onClick, Keys shortcutKeys) : base(text, image, onClick)
{
Initialize();
ShortcutKeys = shortcutKeys;
@ -160,32 +149,23 @@ protected override void OnPaint(PaintEventArgs e)
}
// Calculate the position at which to display the RadioButton.
Int32 offset = (ContentRectangle.Height -
RadioButtonRenderer.GetGlyphSize(
e.Graphics, buttonState).Height) / 2;
Point imageLocation = new Point(
ContentRectangle.Location.X + 4,
ContentRectangle.Location.Y + offset);
Int32 offset = (ContentRectangle.Height - RadioButtonRenderer.GetGlyphSize(e.Graphics, buttonState).Height) / 2;
Point imageLocation = new Point(ContentRectangle.Location.X + 4, ContentRectangle.Location.Y + offset);
// If the item is selected and the RadioButton paints with partial
// transparency, such as when theming is enabled, the check mark
// shows through the RadioButton image. In this case, paint a
// non-transparent background first to cover the check mark.
if (Checked && RadioButtonRenderer
.IsBackgroundPartiallyTransparent(buttonState))
if (Checked && RadioButtonRenderer.IsBackgroundPartiallyTransparent(buttonState))
{
Size glyphSize = RadioButtonRenderer
.GetGlyphSize(e.Graphics, buttonState);
Size glyphSize = RadioButtonRenderer.GetGlyphSize(e.Graphics, buttonState);
glyphSize.Height--;
glyphSize.Width--;
Rectangle backgroundRectangle =
new Rectangle(imageLocation, glyphSize);
e.Graphics.FillEllipse(
SystemBrushes.Control, backgroundRectangle);
Rectangle backgroundRectangle = new Rectangle(imageLocation, glyphSize);
e.Graphics.FillEllipse(SystemBrushes.Control, backgroundRectangle);
}
RadioButtonRenderer.DrawRadioButton(
e.Graphics, imageLocation, buttonState);
RadioButtonRenderer.DrawRadioButton(e.Graphics, imageLocation, buttonState);
}
private bool mouseHoverState;
@ -230,13 +210,11 @@ public override bool Enabled
{
get
{
ToolStripMenuItem ownerMenuItem =
OwnerItem as ToolStripMenuItem;
ToolStripMenuItem ownerMenuItem = OwnerItem as ToolStripMenuItem;
// Use the base value in design mode to prevent the designer
// from setting the base value to the calculated value.
if (!DesignMode &&
ownerMenuItem != null && ownerMenuItem.CheckOnClick)
if (!DesignMode && ownerMenuItem != null && ownerMenuItem.CheckOnClick)
{
return base.Enabled && ownerMenuItem.Checked;
}
@ -254,20 +232,19 @@ public override bool Enabled
// CheckedChanged event.
protected override void OnOwnerChanged(EventArgs e)
{
ToolStripMenuItem ownerMenuItem =
OwnerItem as ToolStripMenuItem;
ToolStripMenuItem ownerMenuItem = OwnerItem as ToolStripMenuItem;
if (ownerMenuItem != null && ownerMenuItem.CheckOnClick)
{
ownerMenuItem.CheckedChanged +=
OwnerMenuItem_CheckedChanged;
ownerMenuItem.CheckedChanged += OwnerMenuItem_CheckedChanged;
}
base.OnOwnerChanged(e);
}
// When the checked state of the parent item changes,
// repaint the item so that the new Enabled state is displayed.
private void OwnerMenuItem_CheckedChanged(
object sender, EventArgs e)
private void OwnerMenuItem_CheckedChanged(object sender, EventArgs e)
{
Invalidate();
}

View file

@ -70,6 +70,7 @@ public static class Helpers
public static readonly Version OSVersion = Environment.OSVersion.Version;
private static Cursor[] _cursorList;
public static Cursor[] CursorList
{
get

View file

@ -1711,9 +1711,16 @@ public static void DrawColorPickerIcon(Graphics g, Color color, Rectangle rect,
}
}
public static Rectangle FindAutoCropRectangle(Bitmap bmp, bool sameColorCrop = false)
public static Rectangle FindAutoCropRectangle(Bitmap bmp, bool sameColorCrop = false,
AnchorStyles sides = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right)
{
Rectangle source = new Rectangle(0, 0, bmp.Width, bmp.Height);
if (sides == AnchorStyles.None)
{
return source;
}
Rectangle crop = source;
using (UnsafeBitmap unsafeBitmap = new UnsafeBitmap(bmp, true, ImageLockMode.ReadOnly))
@ -1721,86 +1728,94 @@ public static Rectangle FindAutoCropRectangle(Bitmap bmp, bool sameColorCrop = f
bool leave = false;
ColorBgra checkColor = unsafeBitmap.GetPixel(0, 0);
uint mask = checkColor.Alpha == 0 ? 0xFF000000 : 0xFFFFFFFF;
uint check = checkColor.Bgra & mask;
// Find X (Left to right)
for (int x = 0; x < bmp.Width && !leave; x++)
if (sides.HasFlag(AnchorStyles.Left))
{
for (int y = 0; y < bmp.Height; y++)
// Find X (Left to right)
for (int x = 0; x < bmp.Width && !leave; x++)
{
if (unsafeBitmap.GetPixel(x, y) != checkColor)
for (int y = 0; y < bmp.Height; y++)
{
crop.X = x;
leave = true;
break;
if ((unsafeBitmap.GetPixel(x, y).Bgra & mask) != check)
{
crop.X = x;
crop.Width -= x;
leave = true;
break;
}
}
}
// If all pixels same color
if (!leave)
{
return crop;
}
leave = false;
}
// If all pixels same color
if (!leave)
if (sides.HasFlag(AnchorStyles.Top))
{
return crop;
}
// Find Y (Top to bottom)
for (int y = 0; y < bmp.Height && !leave; y++)
{
for (int x = 0; x < bmp.Width; x++)
{
if ((unsafeBitmap.GetPixel(x, y).Bgra & mask) != check)
{
crop.Y = y;
crop.Height -= y;
leave = true;
break;
}
}
}
leave = false;
leave = false;
}
if (!sameColorCrop)
{
checkColor = unsafeBitmap.GetPixel(0, 0);
checkColor = unsafeBitmap.GetPixel(bmp.Width - 1, bmp.Height - 1);
mask = checkColor.Alpha == 0 ? 0xFF000000 : 0xFFFFFFFF;
check = checkColor.Bgra & mask;
}
// Find Y (Top to bottom)
for (int y = 0; y < bmp.Height && !leave; y++)
if (sides.HasFlag(AnchorStyles.Right))
{
for (int x = 0; x < bmp.Width; x++)
// Find Width (Right to left)
for (int x = bmp.Width - 1; x >= 0 && !leave; x--)
{
if (unsafeBitmap.GetPixel(x, y) != checkColor)
for (int y = 0; y < bmp.Height; y++)
{
crop.Y = y;
leave = true;
break;
if ((unsafeBitmap.GetPixel(x, y).Bgra & mask) != check)
{
crop.Width = x - crop.X + 1;
leave = true;
break;
}
}
}
leave = false;
}
leave = false;
if (!sameColorCrop)
if (sides.HasFlag(AnchorStyles.Bottom))
{
checkColor = unsafeBitmap.GetPixel(bmp.Width - 1, 0);
}
// Find Width (Right to left)
for (int x = bmp.Width - 1; x >= 0 && !leave; x--)
{
for (int y = 0; y < bmp.Height; y++)
// Find Height (Bottom to top)
for (int y = bmp.Height - 1; y >= 0 && !leave; y--)
{
if (unsafeBitmap.GetPixel(x, y) != checkColor)
for (int x = 0; x < bmp.Width; x++)
{
crop.Width = x - crop.X + 1;
leave = true;
break;
}
}
}
leave = false;
if (!sameColorCrop)
{
checkColor = unsafeBitmap.GetPixel(0, bmp.Height - 1);
}
// Find Height (Bottom to top)
for (int y = bmp.Height - 1; y >= 0 && !leave; y--)
{
for (int x = 0; x < bmp.Width; x++)
{
if (unsafeBitmap.GetPixel(x, y) != checkColor)
{
crop.Height = y - crop.Y + 1;
leave = true;
break;
if ((unsafeBitmap.GetPixel(x, y).Bgra & mask) != check)
{
crop.Height = y - crop.Y + 1;
leave = true;
break;
}
}
}
}
@ -1809,10 +1824,11 @@ public static Rectangle FindAutoCropRectangle(Bitmap bmp, bool sameColorCrop = f
return crop;
}
public static Bitmap AutoCropImage(Bitmap bmp, bool sameColorCrop = false)
public static Bitmap AutoCropImage(Bitmap bmp, bool sameColorCrop = false,
AnchorStyles sides = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right)
{
Rectangle source = new Rectangle(0, 0, bmp.Width, bmp.Height);
Rectangle rect = FindAutoCropRectangle(bmp, sameColorCrop);
Rectangle rect = FindAutoCropRectangle(bmp, sameColorCrop, sides);
if (source != rect)
{

View file

@ -63,26 +63,32 @@ public static void OpenURL(string url)
}
}
private static string Encode(string text, string unreservedCharacters)
public static string URLEncode(string text, bool isPath = false)
{
StringBuilder result = new StringBuilder();
if (!string.IsNullOrEmpty(text))
{
foreach (char c in text)
string unreservedCharacters;
if (isPath)
{
if (unreservedCharacters.Contains(c))
unreservedCharacters = Helpers.URLPathCharacters;
}
else
{
unreservedCharacters = Helpers.URLCharacters;
}
foreach (char c in Encoding.UTF8.GetBytes(text))
{
if (unreservedCharacters.IndexOf(c) != -1)
{
result.Append(c);
}
else
{
byte[] bytes = Encoding.UTF8.GetBytes(c.ToString());
foreach (byte b in bytes)
{
result.AppendFormat(CultureInfo.InvariantCulture, "%{0:X2}", b);
}
result.AppendFormat(CultureInfo.InvariantCulture, "%{0:X2}", (int)c);
}
}
}
@ -90,16 +96,6 @@ private static string Encode(string text, string unreservedCharacters)
return result.ToString();
}
public static string URLEncode(string text)
{
return Encode(text, Helpers.URLCharacters);
}
public static string URLPathEncode(string text)
{
return Encode(text, Helpers.URLPathCharacters);
}
public static string HtmlEncode(string text)
{
char[] chars = HttpUtility.HtmlEncode(text).ToCharArray();

View file

@ -31,20 +31,16 @@ namespace ShareX.HelpersLib
{
public class WindowState
{
public Point Location { get; set; }
public Size Size { get; set; }
public bool IsMaximized { get; set; }
public Point Location { get; private set; }
public Size Size { get; private set; }
public bool IsMaximized { get; private set; }
public void ApplyFormState(Form form)
{
if (!Location.IsEmpty && CaptureHelpers.GetScreenBounds().IntersectsWith(new Rectangle(Location, Size)))
if (!Location.IsEmpty && !Size.IsEmpty && CaptureHelpers.GetScreenWorkingArea().Contains(new Rectangle(Location, Size)))
{
form.StartPosition = FormStartPosition.Manual;
form.Location = Location;
}
if (!Size.IsEmpty)
{
form.Size = Size;
}

View file

@ -26,15 +26,24 @@ You should have received a copy of the GNU General Public License
using ShareX.HelpersLib;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace ShareX.ImageEffectsLib
{
[Description("Auto crop")]
internal class AutoCrop : ImageEffect
{
[DefaultValue(AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right)]
public AnchorStyles Sides { get; set; }
public AutoCrop()
{
this.ApplyDefaultPropertyValues();
}
public override Image Apply(Image img)
{
return ImageHelpers.AutoCropImage((Bitmap)img);
return ImageHelpers.AutoCropImage((Bitmap)img, false, Sides);
}
}
}

View file

@ -31,12 +31,13 @@ private void InitializeComponent()
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TextDrawingInputBox));
this.txtInput = new System.Windows.Forms.TextBox();
this.btnTextColor = new ShareX.HelpersLib.ColorButton();
this.flpProperties = new System.Windows.Forms.FlowLayoutPanel();
this.lblFont = new System.Windows.Forms.Label();
this.cbFonts = new System.Windows.Forms.ComboBox();
this.lblTextSize = new System.Windows.Forms.Label();
this.nudTextSize = new System.Windows.Forms.NumericUpDown();
this.btnTextColor = new ShareX.HelpersLib.ColorButton();
this.btnGradient = new System.Windows.Forms.Button();
this.cbBold = new System.Windows.Forms.CheckBox();
this.cbItalic = new System.Windows.Forms.CheckBox();
this.cbUnderline = new System.Windows.Forms.CheckBox();
@ -53,10 +54,20 @@ private void InitializeComponent()
this.tsmiAlignmentBottom = new System.Windows.Forms.ToolStripMenuItem();
this.lblTip = new System.Windows.Forms.Label();
this.btnCancel = new System.Windows.Forms.Button();
this.cmsGradient = new System.Windows.Forms.ContextMenuStrip(this.components);
this.tsmiEnableGradient = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiSecondColor = new System.Windows.Forms.ToolStripMenuItem();
this.tsmiGradientMode = new System.Windows.Forms.ToolStripMenuItem();
this.tsrbmiGradientHorizontal = new ShareX.HelpersLib.ToolStripRadioButtonMenuItem();
this.tsrbmiGradientVertical = new ShareX.HelpersLib.ToolStripRadioButtonMenuItem();
this.tsrbmiGradientForwardDiagonal = new ShareX.HelpersLib.ToolStripRadioButtonMenuItem();
this.tsrbmiGradientBackwardDiagonal = new ShareX.HelpersLib.ToolStripRadioButtonMenuItem();
this.ttTextInput = new System.Windows.Forms.ToolTip(this.components);
this.flpProperties.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.nudTextSize)).BeginInit();
this.cmsAlignmentHorizontal.SuspendLayout();
this.cmsAlignmentVertical.SuspendLayout();
this.cmsGradient.SuspendLayout();
this.SuspendLayout();
//
// txtInput
@ -67,14 +78,6 @@ private void InitializeComponent()
this.txtInput.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtInput_KeyDown);
this.txtInput.KeyUp += new System.Windows.Forms.KeyEventHandler(this.txtInput_KeyUp);
//
// btnTextColor
//
resources.ApplyResources(this.btnTextColor, "btnTextColor");
this.btnTextColor.Color = System.Drawing.Color.Empty;
this.btnTextColor.Name = "btnTextColor";
this.btnTextColor.UseVisualStyleBackColor = true;
this.btnTextColor.ColorChanged += new ShareX.HelpersLib.ColorButton.ColorChangedEventHandler(this.btnTextColor_ColorChanged);
//
// flpProperties
//
resources.ApplyResources(this.flpProperties, "flpProperties");
@ -83,6 +86,7 @@ private void InitializeComponent()
this.flpProperties.Controls.Add(this.lblTextSize);
this.flpProperties.Controls.Add(this.nudTextSize);
this.flpProperties.Controls.Add(this.btnTextColor);
this.flpProperties.Controls.Add(this.btnGradient);
this.flpProperties.Controls.Add(this.cbBold);
this.flpProperties.Controls.Add(this.cbItalic);
this.flpProperties.Controls.Add(this.cbUnderline);
@ -124,11 +128,30 @@ private void InitializeComponent()
0});
this.nudTextSize.ValueChanged += new System.EventHandler(this.nudTextSize_ValueChanged);
//
// btnTextColor
//
resources.ApplyResources(this.btnTextColor, "btnTextColor");
this.btnTextColor.Color = System.Drawing.Color.Empty;
this.btnTextColor.Name = "btnTextColor";
this.ttTextInput.SetToolTip(this.btnTextColor, resources.GetString("btnTextColor.ToolTip"));
this.btnTextColor.UseVisualStyleBackColor = true;
this.btnTextColor.ColorChanged += new ShareX.HelpersLib.ColorButton.ColorChangedEventHandler(this.btnTextColor_ColorChanged);
//
// btnGradient
//
this.btnGradient.Image = global::ShareX.ScreenCaptureLib.Properties.Resources.gradient;
resources.ApplyResources(this.btnGradient, "btnGradient");
this.btnGradient.Name = "btnGradient";
this.ttTextInput.SetToolTip(this.btnGradient, resources.GetString("btnGradient.ToolTip"));
this.btnGradient.UseVisualStyleBackColor = true;
this.btnGradient.Click += new System.EventHandler(this.btnGradient_Click);
//
// cbBold
//
resources.ApplyResources(this.cbBold, "cbBold");
this.cbBold.Image = global::ShareX.ScreenCaptureLib.Properties.Resources.edit_bold;
this.cbBold.Name = "cbBold";
this.ttTextInput.SetToolTip(this.cbBold, resources.GetString("cbBold.ToolTip"));
this.cbBold.UseVisualStyleBackColor = true;
this.cbBold.CheckedChanged += new System.EventHandler(this.cbBold_CheckedChanged);
//
@ -137,6 +160,7 @@ private void InitializeComponent()
resources.ApplyResources(this.cbItalic, "cbItalic");
this.cbItalic.Image = global::ShareX.ScreenCaptureLib.Properties.Resources.edit_italic;
this.cbItalic.Name = "cbItalic";
this.ttTextInput.SetToolTip(this.cbItalic, resources.GetString("cbItalic.ToolTip"));
this.cbItalic.UseVisualStyleBackColor = true;
this.cbItalic.CheckedChanged += new System.EventHandler(this.cbItalic_CheckedChanged);
//
@ -145,6 +169,7 @@ private void InitializeComponent()
resources.ApplyResources(this.cbUnderline, "cbUnderline");
this.cbUnderline.Image = global::ShareX.ScreenCaptureLib.Properties.Resources.edit_underline;
this.cbUnderline.Name = "cbUnderline";
this.ttTextInput.SetToolTip(this.cbUnderline, resources.GetString("cbUnderline.ToolTip"));
this.cbUnderline.UseVisualStyleBackColor = true;
this.cbUnderline.CheckedChanged += new System.EventHandler(this.cbUnderline_CheckedChanged);
//
@ -153,6 +178,7 @@ private void InitializeComponent()
resources.ApplyResources(this.btnAlignmentHorizontal, "btnAlignmentHorizontal");
this.btnAlignmentHorizontal.Image = global::ShareX.ScreenCaptureLib.Properties.Resources.edit_alignment_center;
this.btnAlignmentHorizontal.Name = "btnAlignmentHorizontal";
this.ttTextInput.SetToolTip(this.btnAlignmentHorizontal, resources.GetString("btnAlignmentHorizontal.ToolTip"));
this.btnAlignmentHorizontal.UseVisualStyleBackColor = true;
this.btnAlignmentHorizontal.Click += new System.EventHandler(this.btnAlignmentHorizontal_Click);
//
@ -161,6 +187,7 @@ private void InitializeComponent()
resources.ApplyResources(this.btnAlignmentVertical, "btnAlignmentVertical");
this.btnAlignmentVertical.Image = global::ShareX.ScreenCaptureLib.Properties.Resources.edit_vertical_alignment_middle;
this.btnAlignmentVertical.Name = "btnAlignmentVertical";
this.ttTextInput.SetToolTip(this.btnAlignmentVertical, resources.GetString("btnAlignmentVertical.ToolTip"));
this.btnAlignmentVertical.UseVisualStyleBackColor = true;
this.btnAlignmentVertical.Click += new System.EventHandler(this.btnAlignmentVertical_Click);
//
@ -244,6 +271,72 @@ private void InitializeComponent()
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// cmsGradient
//
this.cmsGradient.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsmiEnableGradient,
this.tsmiSecondColor,
this.tsmiGradientMode});
this.cmsGradient.Name = "cmsGradient";
resources.ApplyResources(this.cmsGradient, "cmsGradient");
//
// tsmiEnableGradient
//
this.tsmiEnableGradient.CheckOnClick = true;
this.tsmiEnableGradient.Name = "tsmiEnableGradient";
resources.ApplyResources(this.tsmiEnableGradient, "tsmiEnableGradient");
this.tsmiEnableGradient.Click += new System.EventHandler(this.tsmiEnableGradient_Click);
//
// tsmiSecondColor
//
this.tsmiSecondColor.Name = "tsmiSecondColor";
resources.ApplyResources(this.tsmiSecondColor, "tsmiSecondColor");
this.tsmiSecondColor.Click += new System.EventHandler(this.tsmiSecondColor_Click);
//
// tsmiGradientMode
//
this.tsmiGradientMode.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.tsrbmiGradientHorizontal,
this.tsrbmiGradientVertical,
this.tsrbmiGradientForwardDiagonal,
this.tsrbmiGradientBackwardDiagonal});
this.tsmiGradientMode.Name = "tsmiGradientMode";
resources.ApplyResources(this.tsmiGradientMode, "tsmiGradientMode");
//
// tsrbmiGradientHorizontal
//
this.tsrbmiGradientHorizontal.CheckOnClick = true;
this.tsrbmiGradientHorizontal.Name = "tsrbmiGradientHorizontal";
resources.ApplyResources(this.tsrbmiGradientHorizontal, "tsrbmiGradientHorizontal");
this.tsrbmiGradientHorizontal.Click += new System.EventHandler(this.tsrbmiGradientHorizontal_Click);
//
// tsrbmiGradientVertical
//
this.tsrbmiGradientVertical.CheckOnClick = true;
this.tsrbmiGradientVertical.Name = "tsrbmiGradientVertical";
resources.ApplyResources(this.tsrbmiGradientVertical, "tsrbmiGradientVertical");
this.tsrbmiGradientVertical.Click += new System.EventHandler(this.tsrbmiGradientVertical_Click);
//
// tsrbmiGradientForwardDiagonal
//
this.tsrbmiGradientForwardDiagonal.CheckOnClick = true;
this.tsrbmiGradientForwardDiagonal.Name = "tsrbmiGradientForwardDiagonal";
resources.ApplyResources(this.tsrbmiGradientForwardDiagonal, "tsrbmiGradientForwardDiagonal");
this.tsrbmiGradientForwardDiagonal.Click += new System.EventHandler(this.tsrbmiGradientForwardDiagonal_Click);
//
// tsrbmiGradientBackwardDiagonal
//
this.tsrbmiGradientBackwardDiagonal.CheckOnClick = true;
this.tsrbmiGradientBackwardDiagonal.Name = "tsrbmiGradientBackwardDiagonal";
resources.ApplyResources(this.tsrbmiGradientBackwardDiagonal, "tsrbmiGradientBackwardDiagonal");
this.tsrbmiGradientBackwardDiagonal.Click += new System.EventHandler(this.tsrbmiGradientBackwardDiagonal_Click);
//
// ttTextInput
//
this.ttTextInput.AutoPopDelay = 5000;
this.ttTextInput.InitialDelay = 200;
this.ttTextInput.ReshowDelay = 100;
//
// TextDrawingInputBox
//
resources.ApplyResources(this, "$this");
@ -265,6 +358,7 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.nudTextSize)).EndInit();
this.cmsAlignmentHorizontal.ResumeLayout(false);
this.cmsAlignmentVertical.ResumeLayout(false);
this.cmsGradient.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
@ -295,5 +389,15 @@ private void InitializeComponent()
private System.Windows.Forms.ToolStripMenuItem tsmiAlignmentBottom;
private System.Windows.Forms.Label lblTip;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnGradient;
private System.Windows.Forms.ContextMenuStrip cmsGradient;
private System.Windows.Forms.ToolStripMenuItem tsmiEnableGradient;
private System.Windows.Forms.ToolStripMenuItem tsmiSecondColor;
private System.Windows.Forms.ToolStripMenuItem tsmiGradientMode;
private HelpersLib.ToolStripRadioButtonMenuItem tsrbmiGradientHorizontal;
private HelpersLib.ToolStripRadioButtonMenuItem tsrbmiGradientVertical;
private HelpersLib.ToolStripRadioButtonMenuItem tsrbmiGradientForwardDiagonal;
private HelpersLib.ToolStripRadioButtonMenuItem tsrbmiGradientBackwardDiagonal;
private System.Windows.Forms.ToolTip ttTextInput;
}
}

View file

@ -27,6 +27,7 @@ You should have received a copy of the GNU General Public License
using ShareX.ScreenCaptureLib.Properties;
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Windows.Forms;
@ -37,7 +38,7 @@ internal partial class TextDrawingInputBox : Form
public string InputText { get; private set; }
public TextDrawingOptions Options { get; private set; }
public TextDrawingInputBox(string text, TextDrawingOptions options)
public TextDrawingInputBox(string text, TextDrawingOptions options, bool supportGradient)
{
InitializeComponent();
Icon = ShareXResources.Icon;
@ -65,6 +66,32 @@ public TextDrawingInputBox(string text, TextDrawingOptions options)
nudTextSize.SetValue(Options.Size);
btnTextColor.Color = Options.Color;
btnGradient.Visible = supportGradient;
if (supportGradient)
{
tsmiEnableGradient.Checked = Options.Gradient;
tsmiSecondColor.Image = ImageHelpers.CreateColorPickerIcon(Options.Color2, new Rectangle(0, 0, 16, 16));
switch (Options.GradientMode)
{
case LinearGradientMode.Horizontal:
tsrbmiGradientHorizontal.Checked = true;
break;
case LinearGradientMode.Vertical:
tsrbmiGradientVertical.Checked = true;
break;
case LinearGradientMode.ForwardDiagonal:
tsrbmiGradientForwardDiagonal.Checked = true;
break;
case LinearGradientMode.BackwardDiagonal:
tsrbmiGradientBackwardDiagonal.Checked = true;
break;
}
}
cbBold.Checked = Options.Bold;
cbItalic.Checked = Options.Italic;
cbUnderline.Checked = Options.Underline;
@ -110,6 +137,44 @@ private void btnTextColor_ColorChanged(Color color)
UpdateInputBox();
}
private void btnGradient_Click(object sender, EventArgs e)
{
cmsGradient.Show(btnGradient, 1, btnGradient.Height + 1);
}
private void tsmiEnableGradient_Click(object sender, EventArgs e)
{
Options.Gradient = tsmiEnableGradient.Checked;
}
private void tsmiSecondColor_Click(object sender, EventArgs e)
{
ColorPickerForm.PickColor(Options.Color2, out Color newColor, this);
Options.Color2 = newColor;
if (tsmiSecondColor.Image != null) tsmiSecondColor.Image.Dispose();
tsmiSecondColor.Image = ImageHelpers.CreateColorPickerIcon(Options.Color2, new Rectangle(0, 0, 16, 16));
}
private void tsrbmiGradientHorizontal_Click(object sender, EventArgs e)
{
Options.GradientMode = LinearGradientMode.Horizontal;
}
private void tsrbmiGradientVertical_Click(object sender, EventArgs e)
{
Options.GradientMode = LinearGradientMode.Vertical;
}
private void tsrbmiGradientForwardDiagonal_Click(object sender, EventArgs e)
{
Options.GradientMode = LinearGradientMode.ForwardDiagonal;
}
private void tsrbmiGradientBackwardDiagonal_Click(object sender, EventArgs e)
{
Options.GradientMode = LinearGradientMode.BackwardDiagonal;
}
private void cbBold_CheckedChanged(object sender, EventArgs e)
{
Options.Bold = cbBold.Checked;
@ -130,7 +195,7 @@ private void cbUnderline_CheckedChanged(object sender, EventArgs e)
private void btnAlignmentHorizontal_Click(object sender, EventArgs e)
{
cmsAlignmentHorizontal.Show(btnAlignmentHorizontal, 0, btnAlignmentHorizontal.Height + 1);
cmsAlignmentHorizontal.Show(btnAlignmentHorizontal, 1, btnAlignmentHorizontal.Height + 1);
}
private void tsmiAlignmentLeft_Click(object sender, EventArgs e)
@ -156,7 +221,7 @@ private void tsmiAlignmentRight_Click(object sender, EventArgs e)
private void btnAlignmentVertical_Click(object sender, EventArgs e)
{
cmsAlignmentVertical.Show(btnAlignmentVertical, 0, btnAlignmentVertical.Height + 1);
cmsAlignmentVertical.Show(btnAlignmentVertical, 1, btnAlignmentVertical.Height + 1);
}
private void tsmiAlignmentTop_Click(object sender, EventArgs e)

View file

@ -148,22 +148,58 @@
<value>$this</value>
</data>
<data name="&gt;&gt;txtInput.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="btnTextColor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
<data name="flpProperties.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="btnTextColor.Location" type="System.Drawing.Point, System.Drawing">
<value>290, 3</value>
<data name="&gt;&gt;lblFont.Name" xml:space="preserve">
<value>lblFont</value>
</data>
<data name="btnTextColor.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
<data name="&gt;&gt;lblFont.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="btnTextColor.TabIndex" type="System.Int32, mscorlib">
<data name="&gt;&gt;lblFont.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;lblFont.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="&gt;&gt;cbFonts.Name" xml:space="preserve">
<value>cbFonts</value>
</data>
<data name="&gt;&gt;cbFonts.Type" xml:space="preserve">
<value>System.Windows.Forms.ComboBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbFonts.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;cbFonts.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnTextColor.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
<data name="&gt;&gt;lblTextSize.Name" xml:space="preserve">
<value>lblTextSize</value>
</data>
<data name="&gt;&gt;lblTextSize.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblTextSize.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;lblTextSize.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;nudTextSize.Name" xml:space="preserve">
<value>nudTextSize</value>
</data>
<data name="&gt;&gt;nudTextSize.Type" xml:space="preserve">
<value>System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;nudTextSize.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;nudTextSize.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="&gt;&gt;btnTextColor.Name" xml:space="preserve">
<value>btnTextColor</value>
@ -177,8 +213,101 @@
<data name="&gt;&gt;btnTextColor.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="flpProperties.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
<data name="&gt;&gt;btnGradient.Name" xml:space="preserve">
<value>btnGradient</value>
</data>
<data name="&gt;&gt;btnGradient.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnGradient.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;btnGradient.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="&gt;&gt;cbBold.Name" xml:space="preserve">
<value>cbBold</value>
</data>
<data name="&gt;&gt;cbBold.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="&gt;&gt;cbBold.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;cbBold.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="&gt;&gt;cbItalic.Name" xml:space="preserve">
<value>cbItalic</value>
</data>
<data name="&gt;&gt;cbItalic.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="&gt;&gt;cbItalic.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;cbItalic.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="&gt;&gt;cbUnderline.Name" xml:space="preserve">
<value>cbUnderline</value>
</data>
<data name="&gt;&gt;cbUnderline.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="&gt;&gt;cbUnderline.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;cbUnderline.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="&gt;&gt;btnAlignmentHorizontal.Name" xml:space="preserve">
<value>btnAlignmentHorizontal</value>
</data>
<data name="&gt;&gt;btnAlignmentHorizontal.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnAlignmentHorizontal.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;btnAlignmentHorizontal.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="&gt;&gt;btnAlignmentVertical.Name" xml:space="preserve">
<value>btnAlignmentVertical</value>
</data>
<data name="&gt;&gt;btnAlignmentVertical.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnAlignmentVertical.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;btnAlignmentVertical.ZOrder" xml:space="preserve">
<value>10</value>
</data>
<data name="flpProperties.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 5</value>
</data>
<data name="flpProperties.Size" type="System.Drawing.Size, System.Drawing">
<value>518, 32</value>
</data>
<data name="flpProperties.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="flpProperties.WrapContents" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;flpProperties.Name" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;flpProperties.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;flpProperties.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;flpProperties.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="lblFont.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
@ -186,6 +315,9 @@
<data name="lblFont.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblFont.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblFont.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 8</value>
</data>
@ -243,6 +375,9 @@
<data name="lblTextSize.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblTextSize.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblTextSize.Location" type="System.Drawing.Point, System.Drawing">
<value>198, 8</value>
</data>
@ -277,7 +412,7 @@
<value>231, 5</value>
</data>
<data name="nudTextSize.Size" type="System.Drawing.Size, System.Drawing">
<value>53, 20</value>
<value>49, 20</value>
</data>
<data name="nudTextSize.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
@ -297,14 +432,83 @@
<data name="&gt;&gt;nudTextSize.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<metadata name="ttTextInput.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>493, 17</value>
</metadata>
<data name="btnTextColor.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="btnTextColor.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnTextColor.Location" type="System.Drawing.Point, System.Drawing">
<value>286, 3</value>
</data>
<data name="btnTextColor.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
</data>
<data name="btnTextColor.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="btnTextColor.TextAlign" type="System.Drawing.ContentAlignment, System.Drawing">
<value>MiddleLeft</value>
</data>
<data name="btnTextColor.ToolTip" xml:space="preserve">
<value>Text color</value>
</data>
<data name="&gt;&gt;btnTextColor.Name" xml:space="preserve">
<value>btnTextColor</value>
</data>
<data name="&gt;&gt;btnTextColor.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ColorButton, ShareX.HelpersLib, Version=12.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;btnTextColor.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;btnTextColor.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<metadata name="ttTextInput.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>493, 17</value>
</metadata>
<data name="btnGradient.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnGradient.Location" type="System.Drawing.Point, System.Drawing">
<value>316, 3</value>
</data>
<data name="btnGradient.Size" type="System.Drawing.Size, System.Drawing">
<value>26, 24</value>
</data>
<data name="btnGradient.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="btnGradient.ToolTip" xml:space="preserve">
<value>Gradient</value>
</data>
<data name="&gt;&gt;btnGradient.Name" xml:space="preserve">
<value>btnGradient</value>
</data>
<data name="&gt;&gt;btnGradient.Type" xml:space="preserve">
<value>System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;btnGradient.Parent" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;btnGradient.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="cbBold.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="cbBold.Appearance" type="System.Windows.Forms.Appearance, System.Windows.Forms">
<value>Button</value>
</data>
<data name="cbBold.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cbBold.Location" type="System.Drawing.Point, System.Drawing">
<value>320, 3</value>
<value>348, 3</value>
</data>
<data name="cbBold.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
@ -312,6 +516,9 @@
<data name="cbBold.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="cbBold.ToolTip" xml:space="preserve">
<value>Bold</value>
</data>
<data name="&gt;&gt;cbBold.Name" xml:space="preserve">
<value>cbBold</value>
</data>
@ -322,7 +529,7 @@
<value>flpProperties</value>
</data>
<data name="&gt;&gt;cbBold.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="cbItalic.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
@ -330,8 +537,11 @@
<data name="cbItalic.Appearance" type="System.Windows.Forms.Appearance, System.Windows.Forms">
<value>Button</value>
</data>
<data name="cbItalic.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cbItalic.Location" type="System.Drawing.Point, System.Drawing">
<value>350, 3</value>
<value>378, 3</value>
</data>
<data name="cbItalic.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
@ -339,6 +549,9 @@
<data name="cbItalic.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="cbItalic.ToolTip" xml:space="preserve">
<value>Italic</value>
</data>
<data name="&gt;&gt;cbItalic.Name" xml:space="preserve">
<value>cbItalic</value>
</data>
@ -349,7 +562,7 @@
<value>flpProperties</value>
</data>
<data name="&gt;&gt;cbItalic.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="cbUnderline.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
@ -357,8 +570,11 @@
<data name="cbUnderline.Appearance" type="System.Windows.Forms.Appearance, System.Windows.Forms">
<value>Button</value>
</data>
<data name="cbUnderline.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cbUnderline.Location" type="System.Drawing.Point, System.Drawing">
<value>380, 3</value>
<value>408, 3</value>
</data>
<data name="cbUnderline.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
@ -366,6 +582,9 @@
<data name="cbUnderline.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="cbUnderline.ToolTip" xml:space="preserve">
<value>Underline</value>
</data>
<data name="&gt;&gt;cbUnderline.Name" xml:space="preserve">
<value>cbUnderline</value>
</data>
@ -376,13 +595,16 @@
<value>flpProperties</value>
</data>
<data name="&gt;&gt;cbUnderline.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="btnAlignmentHorizontal.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="btnAlignmentHorizontal.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnAlignmentHorizontal.Location" type="System.Drawing.Point, System.Drawing">
<value>410, 3</value>
<value>438, 3</value>
</data>
<data name="btnAlignmentHorizontal.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
@ -390,6 +612,9 @@
<data name="btnAlignmentHorizontal.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="btnAlignmentHorizontal.ToolTip" xml:space="preserve">
<value>Horizontal alignment</value>
</data>
<data name="&gt;&gt;btnAlignmentHorizontal.Name" xml:space="preserve">
<value>btnAlignmentHorizontal</value>
</data>
@ -400,13 +625,16 @@
<value>flpProperties</value>
</data>
<data name="&gt;&gt;btnAlignmentHorizontal.ZOrder" xml:space="preserve">
<value>8</value>
<value>9</value>
</data>
<data name="btnAlignmentVertical.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Left</value>
</data>
<data name="btnAlignmentVertical.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnAlignmentVertical.Location" type="System.Drawing.Point, System.Drawing">
<value>440, 3</value>
<value>468, 3</value>
</data>
<data name="btnAlignmentVertical.Size" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
@ -414,6 +642,9 @@
<data name="btnAlignmentVertical.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="btnAlignmentVertical.ToolTip" xml:space="preserve">
<value>Vertical alignment</value>
</data>
<data name="&gt;&gt;btnAlignmentVertical.Name" xml:space="preserve">
<value>btnAlignmentVertical</value>
</data>
@ -424,35 +655,14 @@
<value>flpProperties</value>
</data>
<data name="&gt;&gt;btnAlignmentVertical.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<data name="flpProperties.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 5</value>
</data>
<data name="flpProperties.Size" type="System.Drawing.Size, System.Drawing">
<value>518, 32</value>
</data>
<data name="flpProperties.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="flpProperties.WrapContents" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="&gt;&gt;flpProperties.Name" xml:space="preserve">
<value>flpProperties</value>
</data>
<data name="&gt;&gt;flpProperties.Type" xml:space="preserve">
<value>System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;flpProperties.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;flpProperties.ZOrder" xml:space="preserve">
<value>5</value>
<value>10</value>
</data>
<data name="btnOK.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="btnOK.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnOK.Location" type="System.Drawing.Point, System.Drawing">
<value>312, 328</value>
</data>
@ -475,11 +685,20 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnOK.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<metadata name="cmsAlignmentHorizontal.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="cmsAlignmentHorizontal.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 70</value>
</data>
<data name="&gt;&gt;cmsAlignmentHorizontal.Name" xml:space="preserve">
<value>cmsAlignmentHorizontal</value>
</data>
<data name="&gt;&gt;cmsAlignmentHorizontal.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tsmiAlignmentLeft.Size" type="System.Drawing.Size, System.Drawing">
<value>109, 22</value>
</data>
@ -498,18 +717,18 @@
<data name="tsmiAlignmentRight.Text" xml:space="preserve">
<value>Right</value>
</data>
<data name="cmsAlignmentHorizontal.Size" type="System.Drawing.Size, System.Drawing">
<value>110, 70</value>
</data>
<data name="&gt;&gt;cmsAlignmentHorizontal.Name" xml:space="preserve">
<value>cmsAlignmentHorizontal</value>
</data>
<data name="&gt;&gt;cmsAlignmentHorizontal.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<metadata name="cmsAlignmentVertical.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>203, 17</value>
</metadata>
<data name="cmsAlignmentVertical.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 70</value>
</data>
<data name="&gt;&gt;cmsAlignmentVertical.Name" xml:space="preserve">
<value>cmsAlignmentVertical</value>
</data>
<data name="&gt;&gt;cmsAlignmentVertical.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tsmiAlignmentTop.Size" type="System.Drawing.Size, System.Drawing">
<value>114, 22</value>
</data>
@ -528,18 +747,12 @@
<data name="tsmiAlignmentBottom.Text" xml:space="preserve">
<value>Bottom</value>
</data>
<data name="cmsAlignmentVertical.Size" type="System.Drawing.Size, System.Drawing">
<value>115, 70</value>
</data>
<data name="&gt;&gt;cmsAlignmentVertical.Name" xml:space="preserve">
<value>cmsAlignmentVertical</value>
</data>
<data name="&gt;&gt;cmsAlignmentVertical.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="lblTip.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblTip.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblTip.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 334</value>
</data>
@ -562,11 +775,14 @@
<value>$this</value>
</data>
<data name="&gt;&gt;lblTip.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="btnCancel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>424, 328</value>
</data>
@ -589,8 +805,65 @@
<value>$this</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<metadata name="cmsGradient.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>373, 17</value>
</metadata>
<data name="cmsGradient.Size" type="System.Drawing.Size, System.Drawing">
<value>175, 70</value>
</data>
<data name="&gt;&gt;cmsGradient.Name" xml:space="preserve">
<value>cmsGradient</value>
</data>
<data name="&gt;&gt;cmsGradient.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tsmiEnableGradient.Size" type="System.Drawing.Size, System.Drawing">
<value>174, 22</value>
</data>
<data name="tsmiEnableGradient.Text" xml:space="preserve">
<value>Enable gradient</value>
</data>
<data name="tsmiSecondColor.Size" type="System.Drawing.Size, System.Drawing">
<value>174, 22</value>
</data>
<data name="tsmiSecondColor.Text" xml:space="preserve">
<value>Second text color...</value>
</data>
<data name="tsmiGradientMode.Size" type="System.Drawing.Size, System.Drawing">
<value>174, 22</value>
</data>
<data name="tsmiGradientMode.Text" xml:space="preserve">
<value>Gradient mode</value>
</data>
<data name="tsrbmiGradientHorizontal.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
</data>
<data name="tsrbmiGradientHorizontal.Text" xml:space="preserve">
<value>Horizontal</value>
</data>
<data name="tsrbmiGradientVertical.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
</data>
<data name="tsrbmiGradientVertical.Text" xml:space="preserve">
<value>Vertical</value>
</data>
<data name="tsrbmiGradientForwardDiagonal.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
</data>
<data name="tsrbmiGradientForwardDiagonal.Text" xml:space="preserve">
<value>Forward diagonal</value>
</data>
<data name="tsrbmiGradientBackwardDiagonal.Size" type="System.Drawing.Size, System.Drawing">
<value>180, 22</value>
</data>
<data name="tsrbmiGradientBackwardDiagonal.Text" xml:space="preserve">
<value>Backward diagonal</value>
</data>
<metadata name="ttTextInput.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>493, 17</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
@ -642,6 +915,54 @@
<data name="&gt;&gt;tsmiAlignmentBottom.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsmiEnableGradient.Name" xml:space="preserve">
<value>tsmiEnableGradient</value>
</data>
<data name="&gt;&gt;tsmiEnableGradient.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsmiSecondColor.Name" xml:space="preserve">
<value>tsmiSecondColor</value>
</data>
<data name="&gt;&gt;tsmiSecondColor.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsmiGradientMode.Name" xml:space="preserve">
<value>tsmiGradientMode</value>
</data>
<data name="&gt;&gt;tsmiGradientMode.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;tsrbmiGradientHorizontal.Name" xml:space="preserve">
<value>tsrbmiGradientHorizontal</value>
</data>
<data name="&gt;&gt;tsrbmiGradientHorizontal.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ToolStripRadioButtonMenuItem, ShareX.HelpersLib, Version=12.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tsrbmiGradientVertical.Name" xml:space="preserve">
<value>tsrbmiGradientVertical</value>
</data>
<data name="&gt;&gt;tsrbmiGradientVertical.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ToolStripRadioButtonMenuItem, ShareX.HelpersLib, Version=12.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tsrbmiGradientForwardDiagonal.Name" xml:space="preserve">
<value>tsrbmiGradientForwardDiagonal</value>
</data>
<data name="&gt;&gt;tsrbmiGradientForwardDiagonal.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ToolStripRadioButtonMenuItem, ShareX.HelpersLib, Version=12.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;tsrbmiGradientBackwardDiagonal.Name" xml:space="preserve">
<value>tsrbmiGradientBackwardDiagonal</value>
</data>
<data name="&gt;&gt;tsrbmiGradientBackwardDiagonal.Type" xml:space="preserve">
<value>ShareX.HelpersLib.ToolStripRadioButtonMenuItem, ShareX.HelpersLib, Version=12.2.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;ttTextInput.Name" xml:space="preserve">
<value>ttTextInput</value>
</data>
<data name="&gt;&gt;ttTextInput.Type" xml:space="preserve">
<value>System.Windows.Forms.ToolTip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>TextDrawingInputBox</value>
</data>

View file

@ -443,6 +443,16 @@ internal static System.Drawing.Bitmap gear {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap gradient {
get {
object obj = ResourceManager.GetObject("gradient", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View file

@ -189,6 +189,9 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="ShapeManager_CreateToolbar_Edit" xml:space="preserve">
<value>Edit</value>
</data>
<data name="layout-center" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layout-center.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ShapeManager_CreateToolbar_AutoCloseEditorOnTask" xml:space="preserve">
<value>Auto close editor on task</value>
</data>
@ -204,8 +207,8 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="folder_open_image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\folder-open-image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ShapeManager_CreateToolbar_DropShadow" xml:space="preserve">
<value>Drop shadow</value>
<data name="disks_black" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\disks-black.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="edit_alignment" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\edit-alignment.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -231,9 +234,6 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="monitor_image" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\monitor-image.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="image_select" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\image-select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ShapeManager_CreateContextMenu_Fixed_size_region_mode" xml:space="preserve">
<value>Fixed size region mode</value>
</data>
@ -342,8 +342,8 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="FFmpegOptionsForm_buttonFFmpegBrowse_Click_Browse_for_ffmpeg_exe" xml:space="preserve">
<value>Browse for ffmpeg.exe</value>
</data>
<data name="layer_flip" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-flip.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="ShapeManager_CreateToolbar_DropShadow" xml:space="preserve">
<value>Drop shadow</value>
</data>
<data name="ShapeManager_CreateContextMenu_Square_shape_magnifier" xml:space="preserve">
<value>Square shape magnifier</value>
@ -384,9 +384,6 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="ShapeManager_CreateToolbar_NewImage" xml:space="preserve">
<value>New image...</value>
</data>
<data name="disks_black" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\disks-black.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="layers_stack_arrange" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layers-stack-arrange.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -411,6 +408,9 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="ShapeManager_CreateContextMenu_Height_" xml:space="preserve">
<value>Height:</value>
</data>
<data name="layers_arrange" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layers-arrange.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ShapeManager_CreateContextMenu_Fill_color___" xml:space="preserve">
<value>Fill color...</value>
</data>
@ -423,9 +423,6 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="ShapeManager_CreateToolbar_CanvasSize" xml:space="preserve">
<value>Canvas size...</value>
</data>
<data name="eraser" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\eraser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FFmpegOptionsForm_DownloaderForm_InstallRequested_Successfully_downloaded_FFmpeg_" xml:space="preserve">
<value>Successfully downloaded FFmpeg.</value>
</data>
@ -450,6 +447,10 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="image__pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\image--pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RegionCaptureForm_ShowExitConfirmation_Text" xml:space="preserve">
<value>There are unsaved changes.
Would you like to close image editor?</value>
</data>
<data name="layout-split" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layout-split.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -465,6 +466,9 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="ShapeManager_CreateToolbar_Rotate180" xml:space="preserve">
<value>Rotate 180°</value>
</data>
<data name="ShapeManager_CreateToolbar_LastRegion" xml:space="preserve">
<value>Capture last region</value>
</data>
<data name="ShapeManager_CreateToolbar_InsertImageFromScreen" xml:space="preserve">
<value>Insert image from screen...</value>
</data>
@ -507,6 +511,9 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="edit_shade" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\edit-shade.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RegionCaptureForm_ShowExitConfirmation_ShareXImageEditor" xml:space="preserve">
<value>ShareX - Image editor</value>
</data>
<data name="arrow_circle_225_left" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\arrow-circle-225-left.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -519,6 +526,9 @@ Distance: {6:0.00} px / Angle: {7:0.00}°</value>
<data name="RectangleTransparent_RectangleTransparent_Rectangle_capture_transparent" xml:space="preserve">
<value>Rectangle capture transparent</value>
</data>
<data name="layer_flip" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-flip.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="FFmpegOptionsForm_DownloaderForm_InstallRequested_Download_of_FFmpeg_failed_" xml:space="preserve">
<value>Download of FFmpeg failed.</value>
</data>
@ -603,11 +613,11 @@ X: {4} Y: {5}</value>
<data name="pencil" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\pencil.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="layers_arrange" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layers-arrange.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="image_select" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\image-select.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ShapeManager_CreateToolbar_LastRegion" xml:space="preserve">
<value>Capture last region</value>
<data name="eraser" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\eraser.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="edit_vertical_alignment_middle" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\edit-vertical-alignment-middle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
@ -618,14 +628,7 @@ X: {4} Y: {5}</value>
<data name="layer_shape_line" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layer-shape-line.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="layout-center" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\layout-center.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="RegionCaptureForm_ShowExitConfirmation_Text" xml:space="preserve">
<value>There are unsaved changes.
Would you like to close image editor?</value>
</data>
<data name="RegionCaptureForm_ShowExitConfirmation_ShareXImageEditor" xml:space="preserve">
<value>ShareX - Image editor</value>
<data name="gradient" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\gradient.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

Binary file not shown.

After

Width:  |  Height:  |  Size: 507 B

View file

@ -162,6 +162,7 @@ public virtual void OnCreating()
{
Manager.IsMoving = true;
Rectangle = new Rectangle(new Point(pos.X - (Options.FixedSize.Width / 2), pos.Y - (Options.FixedSize.Height / 2)), Options.FixedSize);
OnCreated();
}
else
{

View file

@ -36,6 +36,7 @@ public class TextDrawingShape : RectangleDrawingShape
public string Text { get; set; }
public TextDrawingOptions TextOptions { get; set; }
public virtual bool SupportGradient { get; }
public override void OnConfigLoad()
{
@ -130,7 +131,7 @@ private bool ShowTextInputBox()
Manager.Form.Pause();
using (TextDrawingInputBox inputBox = new TextDrawingInputBox(Text, TextOptions))
using (TextDrawingInputBox inputBox = new TextDrawingInputBox(Text, TextOptions, SupportGradient))
{
result = inputBox.ShowDialog(Manager.Form) == DialogResult.OK;
Text = inputBox.InputText;

View file

@ -33,6 +33,8 @@ public class TextOutlineDrawingShape : TextDrawingShape
{
public override ShapeType ShapeType { get; } = ShapeType.DrawingTextOutline;
public override bool SupportGradient { get; } = true;
public override void OnConfigLoad()
{
TextOptions = AnnotationOptions.TextOutlineOptions.Copy();
@ -64,6 +66,8 @@ protected void DrawTextWithOutline(Graphics g, string text, TextDrawingOptions o
{
using (GraphicsPath gp = new GraphicsPath())
{
gp.FillMode = FillMode.Winding;
using (Font font = new Font(options.Font, options.Size, options.Style))
using (StringFormat sf = new StringFormat { Alignment = options.AlignmentHorizontal, LineAlignment = options.AlignmentVertical })
{
@ -71,6 +75,10 @@ protected void DrawTextWithOutline(Graphics g, string text, TextDrawingOptions o
gp.AddString(text, font.FontFamily, (int)font.Style, emSize, rect, sf);
}
RectangleF pathRect = gp.GetBounds();
if (pathRect.IsEmpty) return;
g.SmoothingMode = SmoothingMode.HighQuality;
if (Shadow)
@ -109,10 +117,28 @@ protected void DrawTextWithOutline(Graphics g, string text, TextDrawingOptions o
}
}
using (Brush textBrush = new SolidBrush(textColor))
Brush textBrush = null;
try
{
if (TextOptions.Gradient)
{
textBrush = new LinearGradientBrush(Rectangle.Round(pathRect).Offset(1), textColor, TextOptions.Color2, TextOptions.GradientMode);
}
else
{
textBrush = new SolidBrush(textColor);
}
g.FillPath(textBrush, gp);
}
finally
{
if (textBrush != null)
{
textBrush.Dispose();
}
}
g.SmoothingMode = SmoothingMode.None;
}

View file

@ -24,6 +24,7 @@ You should have received a copy of the GNU General Public License
#endregion License Information (GPL v3)
using System.Drawing;
using System.Drawing.Drawing2D;
namespace ShareX.ScreenCaptureLib
{
@ -62,5 +63,9 @@ public FontStyle Style
return style;
}
}
public bool Gradient { get; set; } = false;
public Color Color2 { get; set; } = Color.FromArgb(240, 240, 240);
public LinearGradientMode GradientMode { get; set; } = LinearGradientMode.Vertical;
}
}

View file

@ -243,6 +243,7 @@
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="Resources\gradient.png" />
<None Include="Resources\layout-center.png" />
<None Include="Resources\layout-split.png" />
<None Include="Resources\layout-split-vertical.png" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:uap2="http://schemas.microsoft.com/appx/manifest/uap/windows10/2" xmlns:uap3="http://schemas.microsoft.com/appx/manifest/uap/windows10/3" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10" xmlns:desktop2="http://schemas.microsoft.com/appx/manifest/desktop/windows10/2" IgnorableNamespaces="desktop2">
<Identity Name="19568ShareX.ShareX" ProcessorArchitecture="x64" Publisher="CN=366A5DE5-2EC7-43FD-B559-05986578C4CC" Version="12.1.2.0" />
<Identity Name="19568ShareX.ShareX" ProcessorArchitecture="x64" Publisher="CN=366A5DE5-2EC7-43FD-B559-05986578C4CC" Version="12.2.0.0" />
<Properties>
<DisplayName>ShareX</DisplayName>
<PublisherDisplayName>ShareX Team</PublisherDisplayName>

View file

@ -156,20 +156,6 @@ public string SendRequestURLEncoded(HttpMethod method, string url, Dictionary<st
return SendRequest(method, url, query, ContentTypeURLEncoded, args, headers, cookies, responseType);
}
protected NameValueCollection SendRequestGetHeaders(HttpMethod method, string url, Stream data, string contentType, Dictionary<string, string> args,
NameValueCollection headers = null, CookieCollection cookies = null)
{
using (HttpWebResponse response = GetResponse(method, url, data, contentType, null, headers, cookies))
{
if (response != null)
{
return response.Headers;
}
return null;
}
}
protected bool SendRequestDownload(HttpMethod method, string url, Stream downloadStream, Dictionary<string, string> args = null,
NameValueCollection headers = null, CookieCollection cookies = null, string contentType = null)
{
@ -290,8 +276,9 @@ protected UploadResult SendRequestFile(string url, Stream data, string fileName,
return result;
}
protected UploadResult SendRequestBytes(string url, Stream data, string fileName, long contentPosition = 0, long contentLength = -1, Dictionary<string, string> args = null,
NameValueCollection headers = null, CookieCollection cookies = null, ResponseType responseType = ResponseType.Text, HttpMethod method = HttpMethod.PUT)
protected UploadResult SendRequestFileRange(string url, Stream data, string fileName, long contentPosition = 0, long contentLength = -1,
Dictionary<string, string> args = null, NameValueCollection headers = null, CookieCollection cookies = null, ResponseType responseType = ResponseType.Text,
HttpMethod method = HttpMethod.PUT)
{
UploadResult result = new UploadResult();
@ -362,7 +349,7 @@ protected UploadResult SendRequestBytes(string url, Stream data, string fileName
return result;
}
private HttpWebResponse GetResponse(HttpMethod method, string url, Stream data = null, string contentType = null, Dictionary<string, string> args = null,
protected HttpWebResponse GetResponse(HttpMethod method, string url, Stream data = null, string contentType = null, Dictionary<string, string> args = null,
NameValueCollection headers = null, CookieCollection cookies = null)
{
IsUploading = true;

View file

@ -32,6 +32,7 @@ You should have received a copy of the GNU General Public License
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net;
using System.Windows.Forms;
namespace ShareX.UploadersLib.FileUploaders
@ -143,7 +144,7 @@ public override UploadResult Upload(Stream stream, string fileName)
string canonicalURI = uploadPath;
if (isPathStyleRequest) canonicalURI = URLHelpers.CombineURL(Settings.Bucket, canonicalURI);
canonicalURI = URLHelpers.AddSlash(canonicalURI, SlashType.Prefix);
canonicalURI = URLHelpers.URLPathEncode(canonicalURI);
canonicalURI = URLHelpers.URLEncode(canonicalURI, true);
string canonicalQueryString = "";
string canonicalHeaders = CreateCanonicalHeaders(headers);
string signedHeaders = GetSignedHeaders(headers);
@ -178,19 +179,25 @@ public override UploadResult Upload(Stream stream, string fileName)
string url = URLHelpers.CombineURL(host, canonicalURI);
url = URLHelpers.ForcePrefix(url, "https://");
NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, url, stream, contentType, null, headers);
if (responseHeaders == null || responseHeaders.Count == 0 || responseHeaders["ETag"] == null)
using (HttpWebResponse response = GetResponse(HttpMethod.PUT, url, stream, contentType, null, headers))
{
Errors.Add("Upload to Amazon S3 failed.");
return null;
if (response != null)
{
NameValueCollection responseHeaders = response.Headers;
if (responseHeaders != null && responseHeaders["ETag"] != null)
{
return new UploadResult
{
IsSuccess = true,
URL = GenerateURL(uploadPath)
};
}
}
}
return new UploadResult
{
IsSuccess = true,
URL = GenerateURL(uploadPath)
};
Errors.Add("Upload to Amazon S3 failed.");
return null;
}
private string GetRegion()
@ -244,7 +251,7 @@ public string GenerateURL(string uploadPath)
{
if (!string.IsNullOrEmpty(Settings.Endpoint) && !string.IsNullOrEmpty(Settings.Bucket))
{
uploadPath = URLHelpers.URLPathEncode(uploadPath);
uploadPath = URLHelpers.URLEncode(uploadPath, true);
string url;

View file

@ -30,6 +30,7 @@ You should have received a copy of the GNU General Public License
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
@ -51,7 +52,8 @@ public override bool CheckConfig(UploadersConfig config)
public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo)
{
return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer, config.AzureStorageEnvironment, config.AzureStorageCustomDomain, config.AzureStorageUploadPath, config.AzureStorageExcludeContainer);
return new AzureStorage(config.AzureStorageAccountName, config.AzureStorageAccountAccessKey, config.AzureStorageContainer,
config.AzureStorageEnvironment, config.AzureStorageCustomDomain, config.AzureStorageUploadPath);
}
public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpAzureStorage;
@ -67,9 +69,9 @@ public sealed class AzureStorage : FileUploader
public string AzureStorageEnvironment { get; private set; }
public string AzureStorageCustomDomain { get; private set; }
public string AzureStorageUploadPath { get; private set; }
public bool AzureStorageExcludeContainer { get; private set; }
public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey, string azureStorageContainer, string azureStorageEnvironment, string customDomain, string uploadPath, bool excludeContainer)
public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey, string azureStorageContainer, string azureStorageEnvironment,
string customDomain, string uploadPath)
{
AzureStorageAccountName = azureStorageAccountName;
AzureStorageAccountAccessKey = azureStorageAccessKey;
@ -77,7 +79,6 @@ public AzureStorage(string azureStorageAccountName, string azureStorageAccessKey
AzureStorageEnvironment = (!string.IsNullOrEmpty(azureStorageEnvironment)) ? azureStorageEnvironment : "blob.core.windows.net";
AzureStorageCustomDomain = customDomain;
AzureStorageUploadPath = uploadPath;
AzureStorageExcludeContainer = excludeContainer;
}
public override UploadResult Upload(Stream stream, string fileName)
@ -91,19 +92,9 @@ public override UploadResult Upload(Stream stream, string fileName)
return null;
}
CreateContainerIfNotExists();
string date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
string targetPath = GetUploadPath(fileName);
string url;
if (AzureStorageContainer == "$root")
{
url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{targetPath}";
}
else
{
url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}/{targetPath}";
}
string uploadPath = GetUploadPath(fileName);
string url = GenerateURL(uploadPath, true);
string contentType = Helpers.GetMimeType(fileName);
NameValueCollection requestHeaders = new NameValueCollection();
@ -112,112 +103,25 @@ public override UploadResult Upload(Stream stream, string fileName)
requestHeaders["x-ms-blob-type"] = "BlockBlob";
string canonicalizedHeaders = $"x-ms-blob-type:BlockBlob\nx-ms-date:{date}\nx-ms-version:{APIVersion}\n";
string canonicalizedResource;
if (AzureStorageContainer == "$root")
{
canonicalizedResource = $"/{AzureStorageAccountName}/{targetPath}";
}
else
{
canonicalizedResource = $"/{AzureStorageAccountName}/{AzureStorageContainer}/{targetPath}";
}
string canonicalizedResource = $"/{AzureStorageAccountName}/{AzureStorageContainer}/{uploadPath}";
string stringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource, stream.Length.ToString(), contentType);
requestHeaders["Authorization"] = $"SharedKey {AzureStorageAccountName}:{stringToSign}";
NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, url, stream, contentType, null, requestHeaders, null);
if (responseHeaders != null)
using (HttpWebResponse response = GetResponse(HttpMethod.PUT, url, stream, contentType, null, requestHeaders, null))
{
string result;
if (!string.IsNullOrEmpty(AzureStorageCustomDomain))
if (response != null && response.Headers != null)
{
if (AzureStorageExcludeContainer)
return new UploadResult
{
result = URLHelpers.CombineURL(AzureStorageCustomDomain, targetPath);
}
else
{
result = URLHelpers.CombineURL(AzureStorageCustomDomain, AzureStorageContainer, targetPath);
}
result = URLHelpers.FixPrefix(result);
}
else
{
result = url;
}
return new UploadResult { IsSuccess = true, URL = result };
}
else
{
Errors.Add("Upload failed.");
return null;
}
}
private void CreateContainerIfNotExists()
{
string date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
string url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}?restype=container";
NameValueCollection requestHeaders = new NameValueCollection();
requestHeaders["Content-Length"] = "0";
requestHeaders["x-ms-date"] = date;
requestHeaders["x-ms-version"] = APIVersion;
string canonicalizedHeaders = $"x-ms-date:{date}\nx-ms-version:{APIVersion}\n";
string canonicalizedResource = $"/{AzureStorageAccountName}/{AzureStorageContainer}\nrestype:container";
string stringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource);
requestHeaders["Authorization"] = $"SharedKey {AzureStorageAccountName}:{stringToSign}";
NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, url, null, null, null, requestHeaders, null);
if (responseHeaders != null)
{
SetContainerACL();
}
else
{
if (Errors.Count > 0)
{
if (Errors[0].Contains("409"))
{
SetContainerACL();
}
else
{
Errors.Add("Upload to Azure storage failed.");
}
IsSuccess = true,
URL = GenerateURL(uploadPath)
};
}
}
}
private void SetContainerACL()
{
string date = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
string url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}?restype=container&comp=acl";
NameValueCollection requestHeaders = new NameValueCollection();
requestHeaders["Content-Length"] = "0";
requestHeaders["x-ms-date"] = date;
requestHeaders["x-ms-version"] = APIVersion;
requestHeaders["x-ms-blob-public-access"] = "container";
string canonicalizedHeaders = $"x-ms-blob-public-access:container\nx-ms-date:{date}\nx-ms-version:{APIVersion}\n";
string canonicalizedResource = $"/{AzureStorageAccountName}/{AzureStorageContainer}\ncomp:acl\nrestype:container";
string stringToSign = GenerateStringToSign(canonicalizedHeaders, canonicalizedResource);
requestHeaders["Authorization"] = $"SharedKey {AzureStorageAccountName}:{stringToSign}";
NameValueCollection responseHeaders = SendRequestGetHeaders(HttpMethod.PUT, url, null, null, null, requestHeaders, null);
if (responseHeaders == null)
{
Errors.Add("There was an issue with setting ACL on the container.");
}
Errors.Add("Upload failed.");
return null;
}
private string GenerateStringToSign(string canonicalizedHeaders, string canonicalizedResource, string contentLength = "", string contentType = "")
@ -255,15 +159,46 @@ private string HashRequest(string stringToSign)
private string GetUploadPath(string fileName)
{
if (!String.IsNullOrEmpty(AzureStorageUploadPath))
string uploadPath;
if (!string.IsNullOrEmpty(AzureStorageUploadPath))
{
string path = NameParser.Parse(NameParserType.FolderPath, AzureStorageUploadPath.Trim('/'));
return URLHelpers.CombineURL(path, fileName);
uploadPath = URLHelpers.CombineURL(path, fileName);
}
else
{
return fileName;
uploadPath = fileName;
}
return Uri.EscapeUriString(uploadPath);
}
public string GenerateURL(string uploadPath, bool isRequest = false)
{
string url;
if (!isRequest && !string.IsNullOrEmpty(AzureStorageCustomDomain))
{
url = URLHelpers.CombineURL(AzureStorageCustomDomain, uploadPath);
url = URLHelpers.FixPrefix(url, "https://");
}
else if (!isRequest && AzureStorageContainer == "$root")
{
url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{uploadPath}";
}
else
{
url = $"https://{AzureStorageAccountName}.{AzureStorageEnvironment}/{AzureStorageContainer}/{uploadPath}";
}
return url;
}
public string GetPreviewURL()
{
string uploadPath = GetUploadPath("example.png");
return GenerateURL(uploadPath);
}
}
}

View file

@ -118,7 +118,7 @@ public bool DownloadFile(string path, Stream downloadStream)
{
if (!string.IsNullOrEmpty(path) && OAuthInfo.CheckOAuth(AuthInfo))
{
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLPathEncode(path));
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLEncode(path, true));
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.GET, AuthInfo);
return SendRequestDownload(HttpMethod.GET, query, downloadStream);
}
@ -136,7 +136,7 @@ public UploadResult UploadFile(Stream stream, string path, string fileName)
return null;
}
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLPathEncode(path));
string url = URLHelpers.CombineURL(URLFiles, URLHelpers.URLEncode(path, true));
Dictionary<string, string> args = new Dictionary<string, string>();
args.Add("overwrite", "true");
@ -168,7 +168,7 @@ public CopyContentInfo GetMetadata(string path)
if (OAuthInfo.CheckOAuth(AuthInfo))
{
string url = URLHelpers.CombineURL(URLMetaData, URLHelpers.URLPathEncode(path));
string url = URLHelpers.CombineURL(URLMetaData, URLHelpers.URLEncode(path, true));
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.GET, AuthInfo);
@ -210,7 +210,7 @@ public string CreatePublicURL(string path, CopyURLType urlType = CopyURLType.Def
{
path = path.Trim('/');
string url = URLHelpers.CombineURL(URLLinks, URLHelpers.URLPathEncode(path));
string url = URLHelpers.CombineURL(URLLinks, URLHelpers.URLEncode(path, true));
string query = OAuthManager.GenerateQuery(url, null, HttpMethod.POST, AuthInfo);

View file

@ -150,7 +150,7 @@ public string GenerateURL(string uploadPath)
Domain = URLHelpers.CombineURL("storage.googleapis.com", Bucket);
}
uploadPath = URLHelpers.URLPathEncode(uploadPath);
uploadPath = URLHelpers.URLEncode(uploadPath, true);
string url = URLHelpers.CombineURL(Domain, uploadPath);

View file

@ -144,7 +144,7 @@ public string GetUriPath(string filename)
filename = URLHelpers.URLEncode(filename);
string subFolderPath = GetSubFolderPath();
subFolderPath = URLHelpers.URLPathEncode(subFolderPath);
subFolderPath = URLHelpers.URLEncode(subFolderPath, true);
string httpHomePath = GetHttpHomePath();
@ -157,7 +157,7 @@ public string GetUriPath(string filename)
}
else
{
path = URLHelpers.URLPathEncode(httpHomePath);
path = URLHelpers.URLEncode(httpHomePath, true);
}
if (Port != 80)

View file

@ -235,7 +235,7 @@ public override UploadResult Upload(Stream stream, string fileName)
do
{
result = SendRequestBytes(sessionUrl, stream, fileName, position, MaxSegmentSize);
result = SendRequestFileRange(sessionUrl, stream, fileName, position, MaxSegmentSize);
if (result.IsSuccess)
{

View file

@ -165,6 +165,8 @@ private void InitializeComponent()
this.txtPolrAPIHostname = new System.Windows.Forms.TextBox();
this.lblPolrAPIHostname = new System.Windows.Forms.Label();
this.tpFirebaseDynamicLinks = new System.Windows.Forms.TabPage();
this.lblFirebaseDomainExample = new System.Windows.Forms.Label();
this.lblFirebaseDomain = new System.Windows.Forms.Label();
this.cbFirebaseIsShort = new System.Windows.Forms.CheckBox();
this.txtFirebaseDomain = new System.Windows.Forms.TextBox();
this.txtFirebaseWebAPIKey = new System.Windows.Forms.TextBox();
@ -230,7 +232,6 @@ private void InitializeComponent()
this.tpDropbox = new System.Windows.Forms.TabPage();
this.cbDropboxUseDirectLink = new System.Windows.Forms.CheckBox();
this.cbDropboxAutoCreateShareableLink = new System.Windows.Forms.CheckBox();
this.pbDropboxLogo = new System.Windows.Forms.PictureBox();
this.lblDropboxPath = new System.Windows.Forms.Label();
this.txtDropboxPath = new System.Windows.Forms.TextBox();
this.oauth2Dropbox = new ShareX.UploadersLib.OAuthControl();
@ -251,7 +252,6 @@ private void InitializeComponent()
this.cbGoogleDriveIsPublic = new System.Windows.Forms.CheckBox();
this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthControl();
this.tpPuush = new System.Windows.Forms.TabPage();
this.pbPuush = new System.Windows.Forms.PictureBox();
this.lblPuushAPIKey = new System.Windows.Forms.Label();
this.txtPuushAPIKey = new System.Windows.Forms.TextBox();
this.llPuushForgottenPassword = new System.Windows.Forms.LinkLabel();
@ -309,7 +309,8 @@ private void InitializeComponent()
this.txtGoogleCloudStorageBucket = new System.Windows.Forms.TextBox();
this.oauth2GoogleCloudStorage = new ShareX.UploadersLib.OAuthControl();
this.tpAzureStorage = new System.Windows.Forms.TabPage();
this.cbAzureStorageExcludeContainer = new System.Windows.Forms.CheckBox();
this.lblAzureStorageURLPreview = new System.Windows.Forms.Label();
this.lblAzureStorageURLPreviewLabel = new System.Windows.Forms.Label();
this.txtAzureStorageUploadPath = new System.Windows.Forms.TextBox();
this.lblAzureStorageUploadPath = new System.Windows.Forms.Label();
this.cbAzureStorageEnvironment = new System.Windows.Forms.ComboBox();
@ -650,7 +651,6 @@ private void InitializeComponent()
this.lblWidthHint = new System.Windows.Forms.Label();
this.ttlvMain = new ShareX.HelpersLib.TabToListView();
this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl();
this.lblFirebaseDomain = new System.Windows.Forms.Label();
this.tpOtherUploaders.SuspendLayout();
this.tcOtherUploaders.SuspendLayout();
this.tpTwitter.SuspendLayout();
@ -681,11 +681,9 @@ private void InitializeComponent()
((System.ComponentModel.ISupportInitialize)(this.nudFTPPort)).BeginInit();
this.gbFTPS.SuspendLayout();
this.tpDropbox.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbDropboxLogo)).BeginInit();
this.tpOneDrive.SuspendLayout();
this.tpGoogleDrive.SuspendLayout();
this.tpPuush.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pbPuush)).BeginInit();
this.tpBox.SuspendLayout();
this.tpAmazonS3.SuspendLayout();
this.gbAmazonS3Advanced.SuspendLayout();
@ -1746,6 +1744,7 @@ private void InitializeComponent()
//
// tpFirebaseDynamicLinks
//
this.tpFirebaseDynamicLinks.Controls.Add(this.lblFirebaseDomainExample);
this.tpFirebaseDynamicLinks.Controls.Add(this.lblFirebaseDomain);
this.tpFirebaseDynamicLinks.Controls.Add(this.cbFirebaseIsShort);
this.tpFirebaseDynamicLinks.Controls.Add(this.txtFirebaseDomain);
@ -1755,6 +1754,16 @@ private void InitializeComponent()
this.tpFirebaseDynamicLinks.Name = "tpFirebaseDynamicLinks";
this.tpFirebaseDynamicLinks.UseVisualStyleBackColor = true;
//
// lblFirebaseDomainExample
//
resources.ApplyResources(this.lblFirebaseDomainExample, "lblFirebaseDomainExample");
this.lblFirebaseDomainExample.Name = "lblFirebaseDomainExample";
//
// lblFirebaseDomain
//
resources.ApplyResources(this.lblFirebaseDomain, "lblFirebaseDomain");
this.lblFirebaseDomain.Name = "lblFirebaseDomain";
//
// cbFirebaseIsShort
//
resources.ApplyResources(this.cbFirebaseIsShort, "cbFirebaseIsShort");
@ -2247,7 +2256,6 @@ private void InitializeComponent()
this.tpDropbox.BackColor = System.Drawing.SystemColors.Window;
this.tpDropbox.Controls.Add(this.cbDropboxUseDirectLink);
this.tpDropbox.Controls.Add(this.cbDropboxAutoCreateShareableLink);
this.tpDropbox.Controls.Add(this.pbDropboxLogo);
this.tpDropbox.Controls.Add(this.lblDropboxPath);
this.tpDropbox.Controls.Add(this.txtDropboxPath);
this.tpDropbox.Controls.Add(this.oauth2Dropbox);
@ -2268,14 +2276,6 @@ private void InitializeComponent()
this.cbDropboxAutoCreateShareableLink.UseVisualStyleBackColor = true;
this.cbDropboxAutoCreateShareableLink.CheckedChanged += new System.EventHandler(this.cbDropboxAutoCreateShareableLink_CheckedChanged);
//
// pbDropboxLogo
//
this.pbDropboxLogo.Cursor = System.Windows.Forms.Cursors.Hand;
resources.ApplyResources(this.pbDropboxLogo, "pbDropboxLogo");
this.pbDropboxLogo.Name = "pbDropboxLogo";
this.pbDropboxLogo.TabStop = false;
this.pbDropboxLogo.Click += new System.EventHandler(this.pbDropboxLogo_Click);
//
// lblDropboxPath
//
resources.ApplyResources(this.lblDropboxPath, "lblDropboxPath");
@ -2421,7 +2421,6 @@ private void InitializeComponent()
// tpPuush
//
this.tpPuush.BackColor = System.Drawing.SystemColors.Window;
this.tpPuush.Controls.Add(this.pbPuush);
this.tpPuush.Controls.Add(this.lblPuushAPIKey);
this.tpPuush.Controls.Add(this.txtPuushAPIKey);
this.tpPuush.Controls.Add(this.llPuushForgottenPassword);
@ -2433,15 +2432,6 @@ private void InitializeComponent()
resources.ApplyResources(this.tpPuush, "tpPuush");
this.tpPuush.Name = "tpPuush";
//
// pbPuush
//
this.pbPuush.Cursor = System.Windows.Forms.Cursors.Hand;
this.pbPuush.Image = global::ShareX.UploadersLib.Properties.Resources.puush_256;
resources.ApplyResources(this.pbPuush, "pbPuush");
this.pbPuush.Name = "pbPuush";
this.pbPuush.TabStop = false;
this.pbPuush.Click += new System.EventHandler(this.pbPuush_Click);
//
// lblPuushAPIKey
//
resources.ApplyResources(this.lblPuushAPIKey, "lblPuushAPIKey");
@ -2833,7 +2823,8 @@ private void InitializeComponent()
// tpAzureStorage
//
this.tpAzureStorage.BackColor = System.Drawing.SystemColors.Window;
this.tpAzureStorage.Controls.Add(this.cbAzureStorageExcludeContainer);
this.tpAzureStorage.Controls.Add(this.lblAzureStorageURLPreview);
this.tpAzureStorage.Controls.Add(this.lblAzureStorageURLPreviewLabel);
this.tpAzureStorage.Controls.Add(this.txtAzureStorageUploadPath);
this.tpAzureStorage.Controls.Add(this.lblAzureStorageUploadPath);
this.tpAzureStorage.Controls.Add(this.cbAzureStorageEnvironment);
@ -2850,12 +2841,15 @@ private void InitializeComponent()
resources.ApplyResources(this.tpAzureStorage, "tpAzureStorage");
this.tpAzureStorage.Name = "tpAzureStorage";
//
// cbAzureStorageExcludeContainer
// lblAzureStorageURLPreview
//
resources.ApplyResources(this.cbAzureStorageExcludeContainer, "cbAzureStorageExcludeContainer");
this.cbAzureStorageExcludeContainer.Name = "cbAzureStorageExcludeContainer";
this.cbAzureStorageExcludeContainer.UseVisualStyleBackColor = true;
this.cbAzureStorageExcludeContainer.CheckedChanged += new System.EventHandler(this.cbAzureStorageExcludeContainer_CheckedChanged);
resources.ApplyResources(this.lblAzureStorageURLPreview, "lblAzureStorageURLPreview");
this.lblAzureStorageURLPreview.Name = "lblAzureStorageURLPreview";
//
// lblAzureStorageURLPreviewLabel
//
resources.ApplyResources(this.lblAzureStorageURLPreviewLabel, "lblAzureStorageURLPreviewLabel");
this.lblAzureStorageURLPreviewLabel.Name = "lblAzureStorageURLPreviewLabel";
//
// txtAzureStorageUploadPath
//
@ -5304,11 +5298,6 @@ private void InitializeComponent()
this.actRapidShareAccountType.Name = "actRapidShareAccountType";
this.actRapidShareAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
//
// lblFirebaseDomain
//
resources.ApplyResources(this.lblFirebaseDomain, "lblFirebaseDomain");
this.lblFirebaseDomain.Name = "lblFirebaseDomain";
//
// UploadersConfigForm
//
resources.ApplyResources(this, "$this");
@ -5373,14 +5362,12 @@ private void InitializeComponent()
this.gbFTPS.PerformLayout();
this.tpDropbox.ResumeLayout(false);
this.tpDropbox.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbDropboxLogo)).EndInit();
this.tpOneDrive.ResumeLayout(false);
this.tpOneDrive.PerformLayout();
this.tpGoogleDrive.ResumeLayout(false);
this.tpGoogleDrive.PerformLayout();
this.tpPuush.ResumeLayout(false);
this.tpPuush.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.pbPuush)).EndInit();
this.tpBox.ResumeLayout(false);
this.tpBox.PerformLayout();
this.tpAmazonS3.ResumeLayout(false);
@ -5559,7 +5546,6 @@ private void InitializeComponent()
internal System.Windows.Forms.TabPage tpFileUploaders;
private System.Windows.Forms.TabControl tcFileUploaders;
private System.Windows.Forms.CheckBox cbDropboxAutoCreateShareableLink;
private System.Windows.Forms.PictureBox pbDropboxLogo;
private System.Windows.Forms.Label lblDropboxPath;
private System.Windows.Forms.TextBox txtDropboxPath;
private System.Windows.Forms.Button btnCopyShowFiles;
@ -5955,7 +5941,6 @@ private void InitializeComponent()
private System.Windows.Forms.Label lblPuushEmail;
private System.Windows.Forms.Label lblPuushPassword;
internal System.Windows.Forms.TabPage tpPuush;
private System.Windows.Forms.PictureBox pbPuush;
private System.Windows.Forms.CheckBox cbHastebinUseFileExtension;
private System.Windows.Forms.Label lblOwnCloudHostExample;
internal System.Windows.Forms.TabPage tpPastie;
@ -6108,7 +6093,9 @@ private void InitializeComponent()
private System.Windows.Forms.Label lblGoogleCloudStoragePathPreview;
private System.Windows.Forms.TextBox txtAzureStorageUploadPath;
private System.Windows.Forms.Label lblAzureStorageUploadPath;
private System.Windows.Forms.CheckBox cbAzureStorageExcludeContainer;
private System.Windows.Forms.Label lblFirebaseDomain;
private System.Windows.Forms.Label lblAzureStorageURLPreview;
private System.Windows.Forms.Label lblAzureStorageURLPreviewLabel;
private System.Windows.Forms.Label lblFirebaseDomainExample;
}
}

View file

@ -668,7 +668,7 @@ public void LoadSettings()
cbAzureStorageEnvironment.Text = Config.AzureStorageEnvironment;
txtAzureStorageCustomDomain.Text = Config.AzureStorageCustomDomain;
txtAzureStorageUploadPath.Text = Config.AzureStorageUploadPath;
cbAzureStorageExcludeContainer.Checked = Config.AzureStorageExcludeContainer;
UpdateAzureStorageStatus();
#endregion Azure Storage
@ -1679,11 +1679,6 @@ private void eiFTP_ImportRequested(object obj)
#region Dropbox
private void pbDropboxLogo_Click(object sender, EventArgs e)
{
URLHelpers.OpenURL("https://www.dropbox.com");
}
private void oauth2Dropbox_OpenButtonClicked()
{
OAuth2Info oauth = new OAuth2Info(APIKeys.DropboxConsumerKey, APIKeys.DropboxConsumerSecret);
@ -1861,11 +1856,6 @@ private bool PuushValidationCheck()
return result;
}
private void pbPuush_Click(object sender, EventArgs e)
{
URLHelpers.OpenURL(Puush.PuushURL);
}
private void llPuushForgottenPassword_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
URLHelpers.OpenURL(Puush.PuushResetPasswordURL);
@ -2850,6 +2840,12 @@ private void btnLithiioGetAPIKey_Click(object sender, EventArgs e)
private void txtAzureStorageAccountName_TextChanged(object sender, EventArgs e)
{
Config.AzureStorageAccountName = txtAzureStorageAccountName.Text;
UpdateAzureStorageStatus();
}
private void btnAzureStoragePortal_Click(object sender, EventArgs e)
{
URLHelpers.OpenURL("https://portal.azure.com/?feature.customportal=false#blade/HubsExtension/Resources/resourceType/Microsoft.Storage%2FStorageAccounts");
}
private void txtAzureStorageAccessKey_TextChanged(object sender, EventArgs e)
@ -2860,31 +2856,25 @@ private void txtAzureStorageAccessKey_TextChanged(object sender, EventArgs e)
private void txtAzureStorageContainer_TextChanged(object sender, EventArgs e)
{
Config.AzureStorageContainer = txtAzureStorageContainer.Text;
UpdateAzureStorageStatus();
}
private void cbAzureStorageEnvironment_SelectedIndexChanged(object sender, EventArgs e)
{
Config.AzureStorageEnvironment = cbAzureStorageEnvironment.Text;
}
private void txtAzureStorageCustomDomain_TextChanged(object sender, EventArgs e)
{
Config.AzureStorageCustomDomain = txtAzureStorageCustomDomain.Text;
UpdateAzureStorageStatus();
}
private void txtAzureStorageUploadPath_TextChanged(object sender, EventArgs e)
{
Config.AzureStorageUploadPath = txtAzureStorageUploadPath.Text;
UpdateAzureStorageStatus();
}
private void cbAzureStorageExcludeContainer_CheckedChanged(object sender, EventArgs e)
private void txtAzureStorageCustomDomain_TextChanged(object sender, EventArgs e)
{
Config.AzureStorageExcludeContainer = cbAzureStorageExcludeContainer.Checked;
}
private void btnAzureStoragePortal_Click(object sender, EventArgs e)
{
URLHelpers.OpenURL("https://portal.azure.com/?feature.customportal=false#blade/HubsExtension/Resources/resourceType/Microsoft.Storage%2FStorageAccounts");
Config.AzureStorageCustomDomain = txtAzureStorageCustomDomain.Text;
UpdateAzureStorageStatus();
}
#endregion Azure Storage

View file

@ -3222,7 +3222,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="cbPolrUseAPIv1.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 128</value>
<value>16, 136</value>
</data>
<data name="cbPolrUseAPIv1.Size" type="System.Drawing.Size, System.Drawing">
<value>137, 17</value>
@ -3252,7 +3252,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="cbPolrIsSecret.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 104</value>
<value>16, 112</value>
</data>
<data name="cbPolrIsSecret.Size" type="System.Drawing.Size, System.Drawing">
<value>91, 17</value>
@ -3276,7 +3276,7 @@ store.book[0].title</value>
<value>1</value>
</data>
<data name="txtPolrAPIKey.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 72</value>
<value>16, 80</value>
</data>
<data name="txtPolrAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>296, 20</value>
@ -3303,7 +3303,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="lblPolrAPIKey.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 56</value>
<value>13, 64</value>
</data>
<data name="lblPolrAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 13</value>
@ -3401,11 +3401,38 @@ store.book[0].title</value>
<data name="&gt;&gt;tpPolr.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="lblFirebaseDomainExample.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblFirebaseDomainExample.Location" type="System.Drawing.Point, System.Drawing">
<value>368, 84</value>
</data>
<data name="lblFirebaseDomainExample.Size" type="System.Drawing.Size, System.Drawing">
<value>131, 13</value>
</data>
<data name="lblFirebaseDomainExample.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="lblFirebaseDomainExample.Text" xml:space="preserve">
<value>Example: google.page.link</value>
</data>
<data name="&gt;&gt;lblFirebaseDomainExample.Name" xml:space="preserve">
<value>lblFirebaseDomainExample</value>
</data>
<data name="&gt;&gt;lblFirebaseDomainExample.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblFirebaseDomainExample.Parent" xml:space="preserve">
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;lblFirebaseDomainExample.ZOrder" xml:space="preserve">
<value>0</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>13, 55</value>
<value>13, 64</value>
</data>
<data name="lblFirebaseDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>46, 13</value>
@ -3426,7 +3453,7 @@ store.book[0].title</value>
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;lblFirebaseDomain.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="cbFirebaseIsShort.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3435,7 +3462,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="cbFirebaseIsShort.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 97</value>
<value>16, 112</value>
</data>
<data name="cbFirebaseIsShort.Size" type="System.Drawing.Size, System.Drawing">
<value>70, 17</value>
@ -3456,13 +3483,13 @@ store.book[0].title</value>
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;cbFirebaseIsShort.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="txtFirebaseDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 71</value>
<value>16, 80</value>
</data>
<data name="txtFirebaseDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>120, 20</value>
<value>344, 20</value>
</data>
<data name="txtFirebaseDomain.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
@ -3477,13 +3504,13 @@ store.book[0].title</value>
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;txtFirebaseDomain.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="txtFirebaseWebAPIKey.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 32</value>
</data>
<data name="txtFirebaseWebAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 20</value>
<value>344, 20</value>
</data>
<data name="txtFirebaseWebAPIKey.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
@ -3498,7 +3525,7 @@ store.book[0].title</value>
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;txtFirebaseWebAPIKey.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="lblFirebaseWebAPIKey.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -3510,13 +3537,13 @@ store.book[0].title</value>
<value>13, 16</value>
</data>
<data name="lblFirebaseWebAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>74, 13</value>
<value>73, 13</value>
</data>
<data name="lblFirebaseWebAPIKey.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="lblFirebaseWebAPIKey.Text" xml:space="preserve">
<value>Web API Key:</value>
<value>Web API key:</value>
</data>
<data name="&gt;&gt;lblFirebaseWebAPIKey.Name" xml:space="preserve">
<value>lblFirebaseWebAPIKey</value>
@ -3528,7 +3555,7 @@ store.book[0].title</value>
<value>tpFirebaseDynamicLinks</value>
</data>
<data name="&gt;&gt;lblFirebaseWebAPIKey.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="tpFirebaseDynamicLinks.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 22</value>
@ -5088,7 +5115,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="cbDropboxUseDirectLink.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 368</value>
<value>16, 296</value>
</data>
<data name="cbDropboxUseDirectLink.Size" type="System.Drawing.Size, System.Drawing">
<value>93, 17</value>
@ -5118,7 +5145,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="cbDropboxAutoCreateShareableLink.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 344</value>
<value>16, 272</value>
</data>
<data name="cbDropboxAutoCreateShareableLink.Size" type="System.Drawing.Size, System.Drawing">
<value>125, 17</value>
@ -5141,146 +5168,6 @@ store.book[0].title</value>
<data name="&gt;&gt;cbDropboxAutoCreateShareableLink.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="pbDropboxLogo.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="pbDropboxLogo.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pbDropboxLogo.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 16</value>
</data>
<data name="pbDropboxLogo.Size" type="System.Drawing.Size, System.Drawing">
<value>248, 64</value>
</data>
<data name="pbDropboxLogo.TabIndex" type="System.Int32, mscorlib">
<value>19</value>
</data>
<data name="&gt;&gt;pbDropboxLogo.Name" xml:space="preserve">
<value>pbDropboxLogo</value>
</data>
<data name="&gt;&gt;pbDropboxLogo.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pbDropboxLogo.Parent" xml:space="preserve">
<value>tpDropbox</value>
</data>
<data name="&gt;&gt;pbDropboxLogo.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="lblDropboxPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -5288,7 +5175,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="lblDropboxPath.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 296</value>
<value>13, 224</value>
</data>
<data name="lblDropboxPath.Size" type="System.Drawing.Size, System.Drawing">
<value>68, 13</value>
@ -5309,10 +5196,10 @@ store.book[0].title</value>
<value>tpDropbox</value>
</data>
<data name="&gt;&gt;lblDropboxPath.ZOrder" xml:space="preserve">
<value>3</value>
<value>2</value>
</data>
<data name="txtDropboxPath.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 312</value>
<value>16, 240</value>
</data>
<data name="txtDropboxPath.Size" type="System.Drawing.Size, System.Drawing">
<value>320, 20</value>
@ -5330,10 +5217,10 @@ store.book[0].title</value>
<value>tpDropbox</value>
</data>
<data name="&gt;&gt;txtDropboxPath.ZOrder" xml:space="preserve">
<value>4</value>
<value>3</value>
</data>
<data name="oauth2Dropbox.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 88</value>
<value>16, 16</value>
</data>
<data name="oauth2Dropbox.Size" type="System.Drawing.Size, System.Drawing">
<value>328, 200</value>
@ -5351,7 +5238,7 @@ store.book[0].title</value>
<value>tpDropbox</value>
</data>
<data name="&gt;&gt;oauth2Dropbox.ZOrder" xml:space="preserve">
<value>5</value>
<value>4</value>
</data>
<data name="tpDropbox.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 202</value>
@ -5764,33 +5651,6 @@ store.book[0].title</value>
<data name="&gt;&gt;tpGoogleDrive.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="pbPuush.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="pbPuush.Location" type="System.Drawing.Point, System.Drawing">
<value>8, 8</value>
</data>
<data name="pbPuush.Size" type="System.Drawing.Size, System.Drawing">
<value>256, 86</value>
</data>
<data name="pbPuush.SizeMode" type="System.Windows.Forms.PictureBoxSizeMode, System.Windows.Forms">
<value>AutoSize</value>
</data>
<data name="pbPuush.TabIndex" type="System.Int32, mscorlib">
<value>18</value>
</data>
<data name="&gt;&gt;pbPuush.Name" xml:space="preserve">
<value>pbPuush</value>
</data>
<data name="&gt;&gt;pbPuush.Type" xml:space="preserve">
<value>System.Windows.Forms.PictureBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;pbPuush.Parent" xml:space="preserve">
<value>tpPuush</value>
</data>
<data name="&gt;&gt;pbPuush.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblPuushAPIKey.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
@ -5798,7 +5658,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="lblPuushAPIKey.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 264</value>
<value>13, 176</value>
</data>
<data name="lblPuushAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>47, 13</value>
@ -5819,10 +5679,10 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;lblPuushAPIKey.ZOrder" xml:space="preserve">
<value>1</value>
<value>0</value>
</data>
<data name="txtPuushAPIKey.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 280</value>
<value>16, 192</value>
</data>
<data name="txtPuushAPIKey.Size" type="System.Drawing.Size, System.Drawing">
<value>248, 20</value>
@ -5840,7 +5700,7 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;txtPuushAPIKey.ZOrder" xml:space="preserve">
<value>2</value>
<value>1</value>
</data>
<data name="llPuushForgottenPassword.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -5849,7 +5709,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="llPuushForgottenPassword.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 200</value>
<value>13, 112</value>
</data>
<data name="llPuushForgottenPassword.Size" type="System.Drawing.Size, System.Drawing">
<value>106, 13</value>
@ -5870,13 +5730,13 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;llPuushForgottenPassword.ZOrder" xml:space="preserve">
<value>3</value>
<value>2</value>
</data>
<data name="btnPuushLogin.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="btnPuushLogin.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 224</value>
<value>16, 136</value>
</data>
<data name="btnPuushLogin.Size" type="System.Drawing.Size, System.Drawing">
<value>248, 32</value>
@ -5897,10 +5757,10 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;btnPuushLogin.ZOrder" xml:space="preserve">
<value>4</value>
<value>3</value>
</data>
<data name="txtPuushPassword.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 168</value>
<value>16, 80</value>
</data>
<data name="txtPuushPassword.Size" type="System.Drawing.Size, System.Drawing">
<value>248, 20</value>
@ -5918,10 +5778,10 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;txtPuushPassword.ZOrder" xml:space="preserve">
<value>5</value>
<value>4</value>
</data>
<data name="txtPuushEmail.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 120</value>
<value>16, 32</value>
</data>
<data name="txtPuushEmail.Size" type="System.Drawing.Size, System.Drawing">
<value>248, 20</value>
@ -5939,7 +5799,7 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;txtPuushEmail.ZOrder" xml:space="preserve">
<value>6</value>
<value>5</value>
</data>
<data name="lblPuushEmail.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -5948,7 +5808,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="lblPuushEmail.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 104</value>
<value>13, 16</value>
</data>
<data name="lblPuushEmail.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 13</value>
@ -5969,7 +5829,7 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;lblPuushEmail.ZOrder" xml:space="preserve">
<value>7</value>
<value>6</value>
</data>
<data name="lblPuushPassword.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -5978,7 +5838,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="lblPuushPassword.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 152</value>
<value>13, 64</value>
</data>
<data name="lblPuushPassword.Size" type="System.Drawing.Size, System.Drawing">
<value>56, 13</value>
@ -5999,16 +5859,16 @@ store.book[0].title</value>
<value>tpPuush</value>
</data>
<data name="&gt;&gt;lblPuushPassword.ZOrder" xml:space="preserve">
<value>8</value>
<value>7</value>
</data>
<data name="tpPuush.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 202</value>
<value>4, 40</value>
</data>
<data name="tpPuush.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>
</data>
<data name="tpPuush.Size" type="System.Drawing.Size, System.Drawing">
<value>178, 0</value>
<value>972, 519</value>
</data>
<data name="tpPuush.TabIndex" type="System.Int32, mscorlib">
<value>26</value>
@ -6824,13 +6684,13 @@ store.book[0].title</value>
<value>13, 112</value>
</data>
<data name="lblAmazonS3Endpoints.Size" type="System.Drawing.Size, System.Drawing">
<value>49, 13</value>
<value>57, 13</value>
</data>
<data name="lblAmazonS3Endpoints.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="lblAmazonS3Endpoints.Text" xml:space="preserve">
<value>Regions:</value>
<value>Endpoints:</value>
</data>
<data name="&gt;&gt;lblAmazonS3Endpoints.Name" xml:space="preserve">
<value>lblAmazonS3Endpoints</value>
@ -7079,7 +6939,7 @@ store.book[0].title</value>
<value>1</value>
</data>
<data name="txtGoogleCloudStorageObjectPrefix.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 367</value>
<value>16, 320</value>
</data>
<data name="txtGoogleCloudStorageObjectPrefix.Size" type="System.Drawing.Size, System.Drawing">
<value>320, 20</value>
@ -7106,16 +6966,16 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="lblGoogleCloudStorageObjectPrefix.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 351</value>
<value>13, 304</value>
</data>
<data name="lblGoogleCloudStorageObjectPrefix.Size" type="System.Drawing.Size, System.Drawing">
<value>32, 13</value>
<value>68, 13</value>
</data>
<data name="lblGoogleCloudStorageObjectPrefix.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="lblGoogleCloudStorageObjectPrefix.Text" xml:space="preserve">
<value>Path:</value>
<value>Upload path:</value>
</data>
<data name="&gt;&gt;lblGoogleCloudStorageObjectPrefix.Name" xml:space="preserve">
<value>lblGoogleCloudStorageObjectPrefix</value>
@ -7136,7 +6996,7 @@ store.book[0].title</value>
<value>NoControl</value>
</data>
<data name="lblGoogleCloudStorageDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 303</value>
<value>13, 352</value>
</data>
<data name="lblGoogleCloudStorageDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>82, 13</value>
@ -7160,7 +7020,7 @@ store.book[0].title</value>
<value>4</value>
</data>
<data name="txtGoogleCloudStorageDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 319</value>
<value>16, 368</value>
</data>
<data name="txtGoogleCloudStorageDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>320, 20</value>
@ -7279,36 +7139,66 @@ store.book[0].title</value>
<data name="&gt;&gt;tpGoogleCloudStorage.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="cbAzureStorageExcludeContainer.AutoSize" type="System.Boolean, mscorlib">
<data name="lblAzureStorageURLPreview.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbAzureStorageExcludeContainer.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<data name="lblAzureStorageURLPreview.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="cbAzureStorageExcludeContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 299</value>
<data name="lblAzureStorageURLPreview.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 325</value>
</data>
<data name="cbAzureStorageExcludeContainer.Size" type="System.Drawing.Size, System.Drawing">
<value>230, 17</value>
<data name="lblAzureStorageURLPreview.Size" type="System.Drawing.Size, System.Drawing">
<value>45, 13</value>
</data>
<data name="cbAzureStorageExcludeContainer.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
<data name="lblAzureStorageURLPreview.TabIndex" type="System.Int32, mscorlib">
<value>14</value>
</data>
<data name="cbAzureStorageExcludeContainer.Text" xml:space="preserve">
<value>Exclude container name from returned URL</value>
<data name="lblAzureStorageURLPreview.Text" xml:space="preserve">
<value>Preview</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.Name" xml:space="preserve">
<value>cbAzureStorageExcludeContainer</value>
<data name="&gt;&gt;lblAzureStorageURLPreview.Name" xml:space="preserve">
<value>lblAzureStorageURLPreview</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.Type" xml:space="preserve">
<value>System.Windows.Forms.CheckBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
<data name="&gt;&gt;lblAzureStorageURLPreview.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.Parent" xml:space="preserve">
<data name="&gt;&gt;lblAzureStorageURLPreview.Parent" xml:space="preserve">
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;cbAzureStorageExcludeContainer.ZOrder" xml:space="preserve">
<data name="&gt;&gt;lblAzureStorageURLPreview.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="lblAzureStorageURLPreviewLabel.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblAzureStorageURLPreviewLabel.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
</data>
<data name="lblAzureStorageURLPreviewLabel.Location" type="System.Drawing.Point, System.Drawing">
<value>13, 304</value>
</data>
<data name="lblAzureStorageURLPreviewLabel.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 13</value>
</data>
<data name="lblAzureStorageURLPreviewLabel.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="lblAzureStorageURLPreviewLabel.Text" xml:space="preserve">
<value>URL preview:</value>
</data>
<data name="&gt;&gt;lblAzureStorageURLPreviewLabel.Name" xml:space="preserve">
<value>lblAzureStorageURLPreviewLabel</value>
</data>
<data name="&gt;&gt;lblAzureStorageURLPreviewLabel.Type" xml:space="preserve">
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="&gt;&gt;lblAzureStorageURLPreviewLabel.Parent" xml:space="preserve">
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageURLPreviewLabel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="txtAzureStorageUploadPath.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 223</value>
</data>
@ -7328,7 +7218,10 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageUploadPath.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="lblAzureStorageUploadPath.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblAzureStorageUploadPath.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -7337,13 +7230,13 @@ store.book[0].title</value>
<value>13, 207</value>
</data>
<data name="lblAzureStorageUploadPath.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 13</value>
<value>68, 13</value>
</data>
<data name="lblAzureStorageUploadPath.TabIndex" type="System.Int32, mscorlib">
<value>9</value>
</data>
<data name="lblAzureStorageUploadPath.Text" xml:space="preserve">
<value>Upload Path:</value>
<value>Upload path:</value>
</data>
<data name="&gt;&gt;lblAzureStorageUploadPath.Name" xml:space="preserve">
<value>lblAzureStorageUploadPath</value>
@ -7355,7 +7248,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageUploadPath.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<data name="cbAzureStorageEnvironment.Items" xml:space="preserve">
<value>blob.core.windows.net</value>
@ -7388,7 +7281,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;cbAzureStorageEnvironment.ZOrder" xml:space="preserve">
<value>3</value>
<value>4</value>
</data>
<data name="lblAzureStorageEnvironment.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7418,7 +7311,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageEnvironment.ZOrder" xml:space="preserve">
<value>4</value>
<value>5</value>
</data>
<data name="btnAzureStoragePortal.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -7445,7 +7338,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;btnAzureStoragePortal.ZOrder" xml:space="preserve">
<value>5</value>
<value>6</value>
</data>
<data name="txtAzureStorageContainer.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 128</value>
@ -7466,7 +7359,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageContainer.ZOrder" xml:space="preserve">
<value>6</value>
<value>7</value>
</data>
<data name="lblAzureStorageContainer.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7496,7 +7389,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageContainer.ZOrder" xml:space="preserve">
<value>7</value>
<value>8</value>
</data>
<data name="txtAzureStorageAccessKey.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 80</value>
@ -7517,7 +7410,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageAccessKey.ZOrder" xml:space="preserve">
<value>8</value>
<value>9</value>
</data>
<data name="lblAzureStorageAccessKey.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7550,7 +7443,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageAccessKey.ZOrder" xml:space="preserve">
<value>9</value>
<value>10</value>
</data>
<data name="txtAzureStorageAccountName.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 32</value>
@ -7571,7 +7464,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageAccountName.ZOrder" xml:space="preserve">
<value>10</value>
<value>11</value>
</data>
<data name="lblAzureStorageAccountName.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
@ -7604,7 +7497,7 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageAccountName.ZOrder" xml:space="preserve">
<value>11</value>
<value>12</value>
</data>
<data name="txtAzureStorageCustomDomain.Location" type="System.Drawing.Point, System.Drawing">
<value>16, 273</value>
@ -7625,7 +7518,10 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;txtAzureStorageCustomDomain.ZOrder" xml:space="preserve">
<value>12</value>
<value>13</value>
</data>
<data name="lblAzureStorageCustomDomain.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="lblAzureStorageCustomDomain.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>NoControl</value>
@ -7634,13 +7530,13 @@ store.book[0].title</value>
<value>13, 257</value>
</data>
<data name="lblAzureStorageCustomDomain.Size" type="System.Drawing.Size, System.Drawing">
<value>100, 13</value>
<value>82, 13</value>
</data>
<data name="lblAzureStorageCustomDomain.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="lblAzureStorageCustomDomain.Text" xml:space="preserve">
<value>Custom Domain:</value>
<value>Custom domain:</value>
</data>
<data name="&gt;&gt;lblAzureStorageCustomDomain.Name" xml:space="preserve">
<value>lblAzureStorageCustomDomain</value>
@ -7652,10 +7548,10 @@ store.book[0].title</value>
<value>tpAzureStorage</value>
</data>
<data name="&gt;&gt;lblAzureStorageCustomDomain.ZOrder" xml:space="preserve">
<value>13</value>
<value>14</value>
</data>
<data name="tpAzureStorage.Location" type="System.Drawing.Point, System.Drawing">
<value>4, 40</value>
<value>4, 202</value>
</data>
<data name="tpAzureStorage.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>3, 3, 3, 3</value>

View file

@ -245,7 +245,9 @@ public void GooglePhotosRefreshAlbumList()
private void UpdateAmazonS3Status()
{
lblAmazonS3PathPreview.Text = new AmazonS3(Config.AmazonS3Settings).GetPreviewURL();
AmazonS3 s3 = new AmazonS3(Config.AmazonS3Settings);
lblAmazonS3PathPreview.Text = s3.GetPreviewURL();
}
#endregion Amazon S3
@ -254,18 +256,30 @@ private void UpdateAmazonS3Status()
private void UpdateGoogleCloudStorageStatus()
{
GoogleCloudStorage GCS = new GoogleCloudStorage(Config.GoogleCloudStorageOAuth2Info)
GoogleCloudStorage gcs = new GoogleCloudStorage(Config.GoogleCloudStorageOAuth2Info)
{
Bucket = Config.GoogleCloudStorageBucket,
Domain = Config.GoogleCloudStorageDomain,
Prefix = Config.GoogleCloudStorageObjectPrefix
};
lblGoogleCloudStoragePathPreview.Text = GCS.GetPreviewURL();
lblGoogleCloudStoragePathPreview.Text = gcs.GetPreviewURL();
}
#endregion Google Cloud Storage
#region Azure Storage
private void UpdateAzureStorageStatus()
{
AzureStorage azure = new AzureStorage(Config.AzureStorageAccountName, Config.AzureStorageAccountAccessKey, Config.AzureStorageContainer,
Config.AzureStorageEnvironment, Config.AzureStorageCustomDomain, Config.AzureStorageUploadPath);
lblAzureStorageURLPreview.Text = azure.GetPreviewURL();
}
#endregion Azure Storage
#region Google Drive
private void GoogleDriveRefreshFolders()

View file

@ -373,7 +373,6 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
public string AzureStorageEnvironment = "blob.core.windows.net";
public string AzureStorageCustomDomain = "";
public string AzureStorageUploadPath = "";
public bool AzureStorageExcludeContainer = false;
#endregion Azure Storage

View file

@ -72,7 +72,7 @@ public static string Title
public static string TitleLong => $"{Title} ({Build})";
public static bool Dev { get; } = true;
public static bool Dev { get; } = false;
public static bool MultiInstance { get; private set; }
public static bool Portable { get; private set; }
public static bool PortableApps { get; private set; }

View file

@ -592,7 +592,7 @@ public static Icon GetProgressIcon(int percentage)
using (StringFormat sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center })
{
g.DrawString(percentage.ToString(), font, Brushes.Black, size.Width / 2, size.Height / 2, sf);
g.DrawString(percentage.ToString(), font, Brushes.White, size.Width / 2, size.Height / 2 - 1, sf);
g.DrawString(percentage.ToString(), font, Brushes.White, size.Width / 2, (size.Height / 2) - 1, sf);
}
return Icon.FromHandle(bmp.GetHicon());