31 lines
1.2 KiB
C#
31 lines
1.2 KiB
C#
namespace Dashboard
|
|
{
|
|
public static class MeasurementExtensions
|
|
{
|
|
public static bool IsRelative(this LayoutUnit unit) => unit switch {
|
|
LayoutUnit.Star or LayoutUnit.Percent => true,
|
|
_ => false,
|
|
};
|
|
public static bool IsAbsolute(this LayoutUnit unit) => !IsRelative(unit);
|
|
|
|
public static string ToShortString(this LayoutUnit unit) => unit switch {
|
|
LayoutUnit.Pixel => "px",
|
|
LayoutUnit.Point => "pt",
|
|
LayoutUnit.Millimeter => "mm",
|
|
LayoutUnit.Star => "*",
|
|
LayoutUnit.Percent => "%",
|
|
_ => throw new Exception("Unknown unit."),
|
|
};
|
|
|
|
public static bool WithinTolerance(this float value, float reference, float absTol, float relTol)
|
|
=> value.CompareTolerance(reference, absTol, relTol) == 0;
|
|
|
|
public static int CompareTolerance(this float value, float reference, float absTol, float relTol)
|
|
{
|
|
float tolerance = Math.Max(absTol, Math.Abs(reference) * relTol);
|
|
float difference = value - reference;
|
|
return difference < -tolerance ? -1 : difference > tolerance ? 1 : 0;
|
|
}
|
|
}
|
|
}
|