using System; using NvAPIWrapper.Native.Display; using NvAPIWrapper.Native.Display.Structures; using NvAPIWrapper.Native.Interfaces.Display; namespace NvAPIWrapper.Display { /// public class ColorData : IColorData, IEquatable { /// /// Creates an instance of to modify the color data /// /// The color data color format. /// The color data color space. /// The color data dynamic range. /// The color data color depth. /// The color data selection policy. /// The color data desktop color depth. public ColorData( ColorDataFormat colorFormat = ColorDataFormat.Auto, ColorDataColorimetry colorimetry = ColorDataColorimetry.Auto, ColorDataDynamicRange? dynamicRange = null, ColorDataDepth? colorDepth = null, ColorDataSelectionPolicy? colorSelectionPolicy = null, ColorDataDesktopDepth? desktopColorDepth = null ) { ColorFormat = colorFormat; Colorimetry = colorimetry; DynamicRange = dynamicRange; ColorDepth = colorDepth; SelectionPolicy = colorSelectionPolicy; DesktopColorDepth = desktopColorDepth; } internal ColorData(IColorData colorData) { ColorDepth = colorData.ColorDepth; DynamicRange = colorData.DynamicRange; ColorFormat = colorData.ColorFormat; Colorimetry = colorData.Colorimetry; SelectionPolicy = colorData.SelectionPolicy; DesktopColorDepth = colorData.DesktopColorDepth; } /// public ColorDataDepth? ColorDepth { get; } /// public ColorDataFormat ColorFormat { get; } /// public ColorDataColorimetry Colorimetry { get; } /// public ColorDataDesktopDepth? DesktopColorDepth { get; } /// public ColorDataDynamicRange? DynamicRange { get; } /// public ColorDataSelectionPolicy? SelectionPolicy { get; } /// public bool Equals(ColorData other) { if (ReferenceEquals(null, other)) { return false; } if (ReferenceEquals(this, other)) { return true; } return ColorDepth == other.ColorDepth && ColorFormat == other.ColorFormat && Colorimetry == other.Colorimetry && DesktopColorDepth == other.DesktopColorDepth && DynamicRange == other.DynamicRange && SelectionPolicy == other.SelectionPolicy; } /// /// Compares two instances of for equality. /// /// The first instance. /// The second instance. /// true if two instances are equal; otherwise false. public static bool operator ==(ColorData left, ColorData 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 !=(ColorData left, ColorData 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((ColorData) obj); } /// public override int GetHashCode() { unchecked { var hashCode = ColorDepth.GetHashCode(); hashCode = (hashCode * 397) ^ (int) ColorFormat; hashCode = (hashCode * 397) ^ (int) Colorimetry; hashCode = (hashCode * 397) ^ DesktopColorDepth.GetHashCode(); hashCode = (hashCode * 397) ^ DynamicRange.GetHashCode(); hashCode = (hashCode * 397) ^ SelectionPolicy.GetHashCode(); return hashCode; } } internal ColorDataV1 AsColorDataV1(ColorDataCommand command) { return new ColorDataV1( command, ColorFormat, Colorimetry ); } internal ColorDataV2 AsColorDataV2(ColorDataCommand command) { return new ColorDataV2( command, ColorFormat, Colorimetry, DynamicRange ?? ColorDataDynamicRange.Auto ); } internal ColorDataV3 AsColorDataV3(ColorDataCommand command) { return new ColorDataV3( command, ColorFormat, Colorimetry, DynamicRange ?? ColorDataDynamicRange.Auto, ColorDepth ?? ColorDataDepth.Default ); } internal ColorDataV4 AsColorDataV4(ColorDataCommand command) { return new ColorDataV4( command, ColorFormat, Colorimetry, DynamicRange ?? ColorDataDynamicRange.Auto, ColorDepth ?? ColorDataDepth.Default, SelectionPolicy ?? ColorDataSelectionPolicy.Default ); } internal ColorDataV5 AsColorDataV5(ColorDataCommand command) { return new ColorDataV5( command, ColorFormat, Colorimetry, DynamicRange ?? ColorDataDynamicRange.Auto, ColorDepth ?? ColorDataDepth.Default, SelectionPolicy ?? ColorDataSelectionPolicy.Default, DesktopColorDepth ?? ColorDataDesktopDepth.Default ); } } }