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