From 022dde4754d39600ce3e5a488bdf6ad7e20ff8d4 Mon Sep 17 00:00:00 2001 From: Clint Rutkas Date: Fri, 19 Nov 2021 14:08:14 -0800 Subject: [PATCH] #14020 and #12630 - Show color as a float and as a decimal value --- .../ColorPickerUI/Helpers/ColorHelper.cs | 8 ++++++ .../Helpers/ColorRepresentationHelper.cs | 25 +++++++++++++++++++ .../ViewModels/ColorEditorViewModel.cs | 12 +++++++++ .../Helpers/ColorRepresentationHelperTest.cs | 2 ++ .../Enumerations/ColorRepresentationType.cs | 12 +++++++++ .../ViewModels/ColorPickerViewModel.cs | 6 +++++ 6 files changed, 65 insertions(+) diff --git a/src/modules/colorPicker/ColorPickerUI/Helpers/ColorHelper.cs b/src/modules/colorPicker/ColorPickerUI/Helpers/ColorHelper.cs index d242a9e561..7015201b23 100644 --- a/src/modules/colorPicker/ColorPickerUI/Helpers/ColorHelper.cs +++ b/src/modules/colorPicker/ColorPickerUI/Helpers/ColorHelper.cs @@ -44,6 +44,14 @@ namespace ColorPicker.Helpers return (cyan, magenta, yellow, blackKey); } + /// + /// Convert a given to a float color styling(0.1f, 0.1f, 0.1f) + /// + /// The to convert + /// The int / 255d for each value to get value between 0 and 1 + internal static (double red, double green, double blue) ConvertToDouble(Color color) + => (color.R / 255d, color.G / 255d, color.B / 255d); + /// /// Convert a given to a HSB color (hue, saturation, brightness) /// diff --git a/src/modules/colorPicker/ColorPickerUI/Helpers/ColorRepresentationHelper.cs b/src/modules/colorPicker/ColorPickerUI/Helpers/ColorRepresentationHelper.cs index 8fafa440cb..ece620088b 100644 --- a/src/modules/colorPicker/ColorPickerUI/Helpers/ColorRepresentationHelper.cs +++ b/src/modules/colorPicker/ColorPickerUI/Helpers/ColorRepresentationHelper.cs @@ -46,6 +46,8 @@ namespace ColorPicker.Helpers ColorRepresentationType.RGB => ColorToRGB(color), ColorRepresentationType.CIELAB => ColorToCIELAB(color), ColorRepresentationType.CIEXYZ => ColorToCIEXYZ(color), + ColorRepresentationType.RGBfloat => ColorToFloat(color), + ColorRepresentationType.Decimal => ColorToDecimal(color), // Fall-back value, when "_userSettings.CopiedColorRepresentation.Value" is incorrect _ => ColorToHex(color), @@ -99,6 +101,29 @@ namespace ColorPicker.Helpers + $", {brightness.ToString(CultureInfo.InvariantCulture)}%)"; } + /// + /// Return a representation float color styling(0.1f, 0.1f, 0.1f) + /// + /// The to convert + /// a string value (0.1f, 0.1f, 0.1f) + private static string ColorToFloat(Color color) + { + var (red, green, blue) = ColorHelper.ConvertToDouble(color); + var precison = 2; + + return $"({Math.Round(red, precison)}f, {Math.Round(green, precison)}f, {Math.Round(blue, precison)}f, 1)"; + } + + /// + /// Return a representation decimal color value + /// + /// The to convert + /// a string value number + private static string ColorToDecimal(Color color) + { + return $"{color.R + (color.G * 256) + (color.B * 65536)}"; + } + /// /// Return a representation of a HSI color /// diff --git a/src/modules/colorPicker/ColorPickerUI/ViewModels/ColorEditorViewModel.cs b/src/modules/colorPicker/ColorPickerUI/ViewModels/ColorEditorViewModel.cs index 87ed3edae5..65cd33d61a 100644 --- a/src/modules/colorPicker/ColorPickerUI/ViewModels/ColorEditorViewModel.cs +++ b/src/modules/colorPicker/ColorPickerUI/ViewModels/ColorEditorViewModel.cs @@ -216,6 +216,18 @@ namespace ColorPicker.ViewModels FormatName = ColorRepresentationType.CIEXYZ.ToString(), Convert = (Color color) => { return ColorRepresentationHelper.GetStringRepresentationFromMediaColor(color, ColorRepresentationType.CIEXYZ); }, }); + _allColorRepresentations.Add( + new ColorFormatModel() + { + FormatName = ColorRepresentationType.RGBfloat.ToString(), + Convert = (Color color) => { return ColorRepresentationHelper.GetStringRepresentationFromMediaColor(color, ColorRepresentationType.RGBfloat); }, + }); + _allColorRepresentations.Add( + new ColorFormatModel() + { + FormatName = ColorRepresentationType.Decimal.ToString(), + Convert = (Color color) => { return ColorRepresentationHelper.GetStringRepresentationFromMediaColor(color, ColorRepresentationType.Decimal); }, + }); _userSettings.VisibleColorFormats.CollectionChanged += VisibleColorFormats_CollectionChanged; diff --git a/src/modules/colorPicker/UnitTest-ColorPickerUI/Helpers/ColorRepresentationHelperTest.cs b/src/modules/colorPicker/UnitTest-ColorPickerUI/Helpers/ColorRepresentationHelperTest.cs index 5b1f26f916..e8f32b2be0 100644 --- a/src/modules/colorPicker/UnitTest-ColorPickerUI/Helpers/ColorRepresentationHelperTest.cs +++ b/src/modules/colorPicker/UnitTest-ColorPickerUI/Helpers/ColorRepresentationHelperTest.cs @@ -24,6 +24,8 @@ namespace Microsoft.ColorPicker.UnitTests [DataRow(ColorRepresentationType.RGB, "rgb(0, 0, 0)")] [DataRow(ColorRepresentationType.CIELAB, "CIELab(0, 0, 0)")] [DataRow(ColorRepresentationType.CIEXYZ, "xyz(0, 0, 0)")] + [DataRow(ColorRepresentationType.RGBfloat, "(0.00f, 0.00f, 0.00f, 1)")] + [DataRow(ColorRepresentationType.Decimal, "0")] public void GetStringRepresentationTest(ColorRepresentationType type, string expected) { diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Enumerations/ColorRepresentationType.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Enumerations/ColorRepresentationType.cs index 5b592f22a1..b99ab73305 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Enumerations/ColorRepresentationType.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/Enumerations/ColorRepresentationType.cs @@ -65,5 +65,17 @@ namespace Microsoft.PowerToys.Settings.UI.Library.Enumerations /// Color presentation as CIEXYZ color space (X[0..95], Y[0..100], Z[0..109] /// CIEXYZ = 10, + + /// + /// Color presentation as RGB float (red[0..1], green[0..1], blue[0..1]) + /// + RGBfloat = 11, + + /// + /// Color presentation as integer decimal value 0-16777215 + /// +#pragma warning disable CA1720 // Identifier contains type name + Decimal = 12, +#pragma warning restore CA1720 // Identifier contains type name } } diff --git a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ColorPickerViewModel.cs b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ColorPickerViewModel.cs index e69324ea4f..92024daec5 100644 --- a/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ColorPickerViewModel.cs +++ b/src/settings-ui/Microsoft.PowerToys.Settings.UI.Library/ViewModels/ColorPickerViewModel.cs @@ -55,6 +55,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels { ColorRepresentationType.RGB, "RGB - rgb(100, 50, 75)" }, { ColorRepresentationType.CIELAB, "CIE LAB - CIELab(76, 21, 80)" }, { ColorRepresentationType.CIEXYZ, "CIE XYZ - xyz(56, 50, 7)" }, + { ColorRepresentationType.RGBfloat, "(1.0f, 0.7f, 0.00f)" }, + { ColorRepresentationType.Decimal, "16755200" }, }; GeneralSettingsConfig = settingsRepository.SettingsConfig; @@ -198,6 +200,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels var ncolFormatName = ColorRepresentationType.NCol.ToString(); var cielabFormatName = ColorRepresentationType.CIELAB.ToString(); var ciexyzFormatName = ColorRepresentationType.CIEXYZ.ToString(); + var rgbFloatFormatName = ColorRepresentationType.RGBfloat.ToString(); + var decimalFormatName = ColorRepresentationType.Decimal.ToString(); formatsUnordered.Add(new ColorFormatModel(hexFormatName, "ef68ff", visibleFormats.ContainsKey(hexFormatName) && visibleFormats[hexFormatName])); formatsUnordered.Add(new ColorFormatModel(rgbFormatName, "rgb(239, 104, 255)", visibleFormats.ContainsKey(rgbFormatName) && visibleFormats[rgbFormatName])); @@ -210,6 +214,8 @@ namespace Microsoft.PowerToys.Settings.UI.Library.ViewModels formatsUnordered.Add(new ColorFormatModel(ncolFormatName, "R10, 50%, 75%", visibleFormats.ContainsKey(ncolFormatName) && visibleFormats[ncolFormatName])); formatsUnordered.Add(new ColorFormatModel(cielabFormatName, "CIELab(66, 72, -52)", visibleFormats.ContainsKey(cielabFormatName) && visibleFormats[cielabFormatName])); formatsUnordered.Add(new ColorFormatModel(ciexyzFormatName, "xyz(59, 35, 98)", visibleFormats.ContainsKey(ciexyzFormatName) && visibleFormats[ciexyzFormatName])); + formatsUnordered.Add(new ColorFormatModel(rgbFloatFormatName, "(0.94f, 0.41f, 1.00f, 1)", visibleFormats.ContainsKey(rgbFloatFormatName) && visibleFormats[rgbFloatFormatName])); + formatsUnordered.Add(new ColorFormatModel(decimalFormatName, "15689983", visibleFormats.ContainsKey(decimalFormatName) && visibleFormats[decimalFormatName])); foreach (var storedColorFormat in _colorPickerSettings.Properties.VisibleColorFormats) {