using System; using NvAPIWrapper.Native.Display; using NvAPIWrapper.Native.Display.Structures; using NvAPIWrapper.Native.Interfaces.Display; namespace NvAPIWrapper.Display { /// public class HDRColorData : IHDRColorData, IEquatable { /// /// Creates an instance of . /// /// The hdr mode. /// The display color space configurations. /// The color data color format. /// The color data dynamic range. /// The color data color depth. public HDRColorData( ColorDataHDRMode hdrMode, MasteringDisplayColorData masteringDisplayData, ColorDataFormat? colorFormat = null, ColorDataDynamicRange? dynamicRange = null, ColorDataDepth? colorDepth = null ) { HDRMode = hdrMode; MasteringDisplayData = masteringDisplayData; ColorFormat = colorFormat; DynamicRange = dynamicRange; ColorDepth = colorDepth; } internal HDRColorData(IHDRColorData colorData) { HDRMode = colorData.HDRMode; MasteringDisplayData = colorData.MasteringDisplayData; ColorDepth = colorData.ColorDepth; ColorFormat = colorData.ColorFormat; DynamicRange = colorData.DynamicRange; } /// public bool Equals(HDRColorData other) { if (ReferenceEquals(null, other)) { return false; } if (ReferenceEquals(this, other)) { return true; } return ColorDepth == other.ColorDepth && ColorFormat == other.ColorFormat && DynamicRange == other.DynamicRange && HDRMode == other.HDRMode && MasteringDisplayData.Equals(other.MasteringDisplayData); } /// public ColorDataDepth? ColorDepth { get; } /// public ColorDataFormat? ColorFormat { get; } /// public ColorDataDynamicRange? DynamicRange { get; } /// public ColorDataHDRMode HDRMode { get; } /// public MasteringDisplayColorData MasteringDisplayData { get; } /// /// Compares two instances of for equality. /// /// The first instance. /// The second instance. /// true if two instances are equal; otherwise false. public static bool operator ==(HDRColorData left, HDRColorData right) { return left?.Equals(right) == true; } /// /// Compares two instances of for inequality. /// /// The first instance. /// The second instance. /// true if two instances are not equal; otherwise false. public static bool operator !=(HDRColorData left, HDRColorData right) { return !(left == right); } /// public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) { return false; } if (ReferenceEquals(this, obj)) { return true; } if (obj.GetType() != GetType()) { return false; } return Equals((HDRColorData) obj); } /// public override int GetHashCode() { unchecked { var hashCode = ColorDepth.GetHashCode(); hashCode = (hashCode * 397) ^ ColorFormat.GetHashCode(); hashCode = (hashCode * 397) ^ DynamicRange.GetHashCode(); hashCode = (hashCode * 397) ^ (int) HDRMode; hashCode = (hashCode * 397) ^ MasteringDisplayData.GetHashCode(); return hashCode; } } internal HDRColorDataV1 AsHDRColorDataV1(ColorDataHDRCommand command) { return new HDRColorDataV1( command, HDRMode, MasteringDisplayData ); } internal HDRColorDataV2 AsHDRColorDataV2(ColorDataHDRCommand command) { return new HDRColorDataV2( command, HDRMode, MasteringDisplayData, ColorFormat ?? ColorDataFormat.Auto, DynamicRange ?? ColorDataDynamicRange.Auto, ColorDepth ?? ColorDataDepth.Default ); } } }