ShareX/ShareX.HelpersLib/NameParser/CodeMenuEntryPixelInfo.cs
Jake 8af8f470a5 Update color picker format options to include 0-1 colors
I used capital letters R, G, and B since they had not been used yet. This format of colors is used with a number of things, most notably Unity, and this will save me and hopefully others from having to convert normal colors to 0-1 range every so often, which I say is a win.
I have it set to round to 3 decimal places, but that's totally arbitrary and any precision will work, although some level of rounding seems sensible. I could probably make it so users can specify their own rounding precision, however this would be somewhat more effort to implement and would be a more significant deviation from the rest of the formatting rules, so I'll only add that if someone else says it'll actually be accepted. 
Also, why is banker rounding the default smh c # is is dumb
2020-09-24 16:40:23 -07:00

66 lines
4 KiB
C#

#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright (c) 2007-2020 ShareX Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using System;
using System.Drawing;
namespace ShareX.HelpersLib
{
public class CodeMenuEntryPixelInfo : CodeMenuEntry
{
protected override string Prefix { get; } = "$";
public static readonly CodeMenuEntryPixelInfo r = new CodeMenuEntryPixelInfo("r", "Red color (0-255)");
public static readonly CodeMenuEntryPixelInfo g = new CodeMenuEntryPixelInfo("g", "Green color (0-255)");
public static readonly CodeMenuEntryPixelInfo b = new CodeMenuEntryPixelInfo("b", "Blue color (0-255)");
public static readonly CodeMenuEntryPixelInfo R = new CodeMenuEntryPixelInfo("R", "Red color (0-1.000)");
public static readonly CodeMenuEntryPixelInfo G = new CodeMenuEntryPixelInfo("G", "Green color (0-1.000)");
public static readonly CodeMenuEntryPixelInfo B = new CodeMenuEntryPixelInfo("B", "Blue color (0-1.000)");
public static readonly CodeMenuEntryPixelInfo hex = new CodeMenuEntryPixelInfo("hex", "Hex color value (Lowercase)");
public static readonly CodeMenuEntryPixelInfo HEX = new CodeMenuEntryPixelInfo("HEX", "Hex color value (Uppercase)");
public static readonly CodeMenuEntryPixelInfo x = new CodeMenuEntryPixelInfo("x", "X position");
public static readonly CodeMenuEntryPixelInfo y = new CodeMenuEntryPixelInfo("y", "Y position");
public static readonly CodeMenuEntryPixelInfo n = new CodeMenuEntryPixelInfo("n", "New line");
public CodeMenuEntryPixelInfo(string value, string description) : base(value, description)
{
}
public static string Parse(string input, Color color, Point position)
{
return input.Replace(r.ToPrefixString(), color.R.ToString(), StringComparison.InvariantCulture).
Replace(g.ToPrefixString(), color.G.ToString(), StringComparison.InvariantCulture).
Replace(b.ToPrefixString(), color.B.ToString(), StringComparison.InvariantCulture).
Replace(R.ToPrefixString(), Math.Round(color.R / 255.0, 3, MidpointRounding.AwayFromZero).ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace(G.ToPrefixString(), Math.Round(color.G / 255.0, 3, MidpointRounding.AwayFromZero).ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace(B.ToPrefixString(), Math.Round(color.B / 255.0, 3, MidpointRounding.AwayFromZero).ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace(HEX.ToPrefixString(), ColorHelpers.ColorToHex(color), StringComparison.InvariantCulture).
Replace(hex.ToPrefixString(), ColorHelpers.ColorToHex(color).ToLowerInvariant(), StringComparison.InvariantCultureIgnoreCase).
Replace(x.ToPrefixString(), position.X.ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace(y.ToPrefixString(), position.Y.ToString(), StringComparison.InvariantCultureIgnoreCase).
Replace(n.ToPrefixString(), Environment.NewLine, StringComparison.InvariantCultureIgnoreCase);
}
}
}