namespace Colourful.Implementation.RGB
{
///
/// Trivial implementation of
///
public sealed class RGBWorkingSpace : IRGBWorkingSpace
{
///
/// Constructs RGB working space using a reference white, companding, and chromacity coordinates.
///
public RGBWorkingSpace(XYZColor referenceWhite, ICompanding companding, RGBPrimariesChromaticityCoordinates chromaticityCoordinates)
{
WhitePoint = referenceWhite;
Companding = companding;
ChromaticityCoordinates = chromaticityCoordinates;
}
///
/// Reference white point
///
public XYZColor WhitePoint { get; }
///
/// Chromacity coordinates
///
public RGBPrimariesChromaticityCoordinates ChromaticityCoordinates { get; }
///
/// Companding
///
public ICompanding Companding { get; }
#region Overrides
///
public bool Equals(IRGBWorkingSpace other)
{
if (other == null)
return false;
if (ReferenceEquals(this, other))
return true;
return Equals(WhitePoint, other.WhitePoint)
&& ChromaticityCoordinates.Equals(other.ChromaticityCoordinates)
&& Companding.Equals(other.Companding);
}
///
public override bool Equals(object obj) => obj is IRGBWorkingSpace other && Equals(other);
///
public override int GetHashCode()
{
unchecked
{
var hashCode = WhitePoint.GetHashCode();
hashCode = (hashCode * 397) ^ ChromaticityCoordinates.GetHashCode();
hashCode = (hashCode * 397) ^ (Companding != null ? Companding.GetHashCode() : 0);
return hashCode;
}
}
///
public static bool operator ==(RGBWorkingSpace left, RGBWorkingSpace right) => Equals(left, right);
///
public static bool operator !=(RGBWorkingSpace left, RGBWorkingSpace right) => !Equals(left, right);
#endregion
}
}