Browse Source

Replace check AreClose(x, 1) by IsOne in RoundLayoutValue

pull/4104/head
Rustam Sayfutdinov 6 years ago
parent
commit
3307fd577b
  1. 2
      src/Avalonia.Base/Utilities/MathUtilities.cs
  2. 19
      tests/Avalonia.Base.UnitTests/Utilities/MathUtilitiesTests.cs

2
src/Avalonia.Base/Utilities/MathUtilities.cs

@ -221,7 +221,7 @@ namespace Avalonia.Utilities
double newValue;
// If DPI == 1, don't use DPI-aware rounding.
if (!MathUtilities.AreClose(dpiScale, 1.0))
if (!MathUtilities.IsOne(dpiScale))
{
newValue = Math.Round(value * dpiScale) / dpiScale;
// If rounding produces a value unacceptable to layout (NaN, Infinity or MaxValue), use the original value.

19
tests/Avalonia.Base.UnitTests/Utilities/MathUtilitiesTests.cs

@ -157,5 +157,24 @@ namespace Avalonia.Base.UnitTests.Utilities
var actual = MathUtilities.GreaterThanOrClose(1, 1);
Assert.True(actual);
}
[Fact]
public void Round_Layout_Value_Without_DPI_Aware()
{
const double value = 5e-15;
var expectedValue = Math.Round(value);
var actualValue = MathUtilities.RoundLayoutValue(value, 1.0);
Assert.Equal(expectedValue, actualValue);
}
[Fact]
public void Round_Layout_Value_With_DPI_Aware()
{
const double dpiScale = 1.25;
const double value = 42.5;
var expectedValue = Math.Round(value * dpiScale) / dpiScale;
var actualValue = MathUtilities.RoundLayoutValue(value, dpiScale);
Assert.Equal(expectedValue, actualValue);
}
}
}

Loading…
Cancel
Save