diff --git a/Sources/ModelingEvolution.Drawing.Tests/ColorTests.cs b/Sources/ModelingEvolution.Drawing.Tests/ColorTests.cs index 78ac43d..3eae488 100644 --- a/Sources/ModelingEvolution.Drawing.Tests/ColorTests.cs +++ b/Sources/ModelingEvolution.Drawing.Tests/ColorTests.cs @@ -69,6 +69,23 @@ public void TryParse_ReturnsExpectedResult(string input, bool expectedResult) Assert.Equal(expectedResult, result); } + [Theory] + [InlineData("#FF0000", 255, 0, 0, 255)] + [InlineData("#00FF00", 0, 255, 0, 255)] + [InlineData("#0000FF", 0, 0, 255, 255)] + [InlineData("#80808080", 128, 128, 128, 128)] + [InlineData("0xFF0000", 255, 0, 0, 255)] + [InlineData("rgba(255,128,64,0.5)", 255, 128, 64, 127)] + public void TryParse_ValidInputs_ReturnsExpectedColor(string input, byte r, byte g, byte b, byte a) + { + Color.TryParse(input, out var color).Should().BeTrue(); + + color.R.Should().Be(r); + color.G.Should().Be(g); + color.B.Should().Be(b); + color.A.Should().Be(a); + } + [Fact] public void JsonSerialization_RoundTrip_PreservesValues() { diff --git a/Sources/ModelingEvolution.Drawing/Color.cs b/Sources/ModelingEvolution.Drawing/Color.cs index a612966..7cf7f34 100644 --- a/Sources/ModelingEvolution.Drawing/Color.cs +++ b/Sources/ModelingEvolution.Drawing/Color.cs @@ -112,8 +112,11 @@ public static bool TryParse([NotNullWhen(true)] string s, IFormatProvider? provi s = s.StartsWith("#") ? s[1..] : s; if (!uint.TryParse(s, NumberStyles.HexNumber, provider, out var value)) return false; - - result = new Color(value); + + uint alpha = 255; + if (s.Length == 8) + alpha = 0; + result = new Color(value | alpha << ARGBAlphaShift); return true; }