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 } }