using System.Drawing; using System.Numerics; namespace Peridot; /// /// Represetns a RGBA color with floating point values. /// All components must be between 0.0 and 1.0. /// public partial struct ColorF : IEquatable { private Vector4 m_rgba; /// /// Constructs a new ColorF from components. /// /// Red component. /// Green component. /// Blue component. /// Alpha component. public ColorF(float r, float g, float b, float a) { m_rgba = new(r, g, b, a); } /// /// Constructs a new ColorF from a Color. /// /// Color. public ColorF(Color color) { m_rgba = new Vector4(color.R, color.G, color.B, color.A) * (1f / 255f); } /// /// Constructs a new ColorF from a Vector4. /// /// Color. public ColorF(Vector4 color) { m_rgba = color; } /// /// Constructs a new gray color. /// /// public ColorF(float grayColor) { m_rgba = new Vector4(grayColor, grayColor, grayColor, 1f); } /// /// Constructs a new gray color. /// /// /// public ColorF(float grayColor, float alpha) { m_rgba = new Vector4(grayColor, grayColor, grayColor, alpha); } /// /// The red color component. /// public float R { get => m_rgba.X; set => m_rgba.X = value; } /// /// The green color component. /// public float G { get => m_rgba.Y; set => m_rgba.Y = value; } /// /// The blue color component. /// public float B { get => m_rgba.Z; set => m_rgba.Z = value; } /// /// The alpha color component. /// public float A { get => m_rgba.W; set => m_rgba.W = value; } /// /// Gets or sets components RGBA as a . /// public Vector4 AsVector { get => m_rgba; set => m_rgba = value; } /// public bool Equals(ColorF other) { return m_rgba.Equals(other.m_rgba); } /// public override bool Equals(object? obj) { return obj != null && obj is ColorF other && Equals(other); } /// public override int GetHashCode() { return m_rgba.GetHashCode(); } /// public override string ToString() { return $"{{R: {R}, G: {G}, B: {B}, A: {A}}}"; } }