make color types public and add stream based tests to prevent future breaking as observed in #52

This commit is contained in:
Eliot Jones
2019-08-13 20:48:22 +01:00
parent fc2d532b82
commit f55091f3d2
5 changed files with 128 additions and 5 deletions

View File

@@ -1,11 +1,21 @@
namespace UglyToad.PdfPig.Graphics.Colors
using System;
using System.Collections.Generic;
namespace UglyToad.PdfPig.Graphics.Colors
{
/// <summary>
/// A color with cyan, magenta, yellow and black (K) components.
/// </summary>
internal class CMYKColor : IColor
public class CMYKColor : IColor, IEquatable<CMYKColor>
{
/// <summary>
/// CMYK Black value (0, 0, 0, 1).
/// </summary>
public static IColor Black { get; } = new CMYKColor(0, 0, 0, 1);
/// <summary>
/// CMYK White value (all 0).
/// </summary>
public static IColor White { get; } = new CMYKColor(0, 0, 0, 0);
/// <inheritdoc/>
@@ -50,6 +60,43 @@
(1 - Y) * (1 - K));
}
/// <inheritdoc />
public override bool Equals(object obj)
{
return Equals(obj as CMYKColor);
}
/// <inheritdoc />
public bool Equals(CMYKColor other)
{
return other != null &&
C == other.C &&
M == other.M &&
Y == other.Y &&
K == other.K;
}
/// <inheritdoc />
public override int GetHashCode()
{
var hashCode = -492570696;
hashCode = hashCode * -1521134295 + C.GetHashCode();
hashCode = hashCode * -1521134295 + M.GetHashCode();
hashCode = hashCode * -1521134295 + Y.GetHashCode();
hashCode = hashCode * -1521134295 + K.GetHashCode();
return hashCode;
}
/// <summary>
/// Equals.
/// </summary>
public static bool operator ==(CMYKColor color1, CMYKColor color2) => EqualityComparer<CMYKColor>.Default.Equals(color1, color2);
/// <summary>
/// Not Equals.
/// </summary>
public static bool operator !=(CMYKColor color1, CMYKColor color2) => !(color1 == color2);
/// <inheritdoc />
public override string ToString()
{

View File

@@ -1,11 +1,21 @@
namespace UglyToad.PdfPig.Graphics.Colors
using System;
using System.Collections.Generic;
namespace UglyToad.PdfPig.Graphics.Colors
{
/// <summary>
/// A grayscale color with a single gray component.
/// </summary>
internal class GrayColor : IColor
public class GrayColor : IColor, IEquatable<GrayColor>
{
/// <summary>
/// Gray Black value (0).
/// </summary>
public static GrayColor Black { get; } = new GrayColor(0);
/// <summary>
/// Gray White value (1).
/// </summary>
public static GrayColor White { get; } = new GrayColor(1);
/// <inheritdoc/>
@@ -30,6 +40,32 @@
return (Gray, Gray, Gray);
}
/// <inheritdoc />
public override bool Equals(object obj)
{
return Equals(obj as GrayColor);
}
/// <inheritdoc />
public bool Equals(GrayColor other)
{
return other != null &&
Gray == other.Gray;
}
/// <inheritdoc />
public override int GetHashCode() => Gray.GetHashCode();
/// <summary>
/// Equals.
/// </summary>
public static bool operator ==(GrayColor color1, GrayColor color2) => EqualityComparer<GrayColor>.Default.Equals(color1, color2);
/// <summary>
/// Not Equals.
/// </summary>
public static bool operator !=(GrayColor color1, GrayColor color2) => !(color1 == color2);
/// <inheritdoc />
public override string ToString()
{

View File

@@ -6,7 +6,7 @@
/// <summary>
/// A color with red, green and blue components.
/// </summary>
internal class RGBColor : IColor, IEquatable<RGBColor>
public class RGBColor : IColor, IEquatable<RGBColor>
{
/// <summary>
/// RGB Black value (all 0).
@@ -78,9 +78,15 @@
/// <inheritdoc />
public override int GetHashCode() => (R, G, B).GetHashCode();
/// <summary>
/// Equals.
/// </summary>
public static bool operator ==(RGBColor color1, RGBColor color2) =>
EqualityComparer<RGBColor>.Default.Equals(color1, color2);
/// <summary>
/// Not Equals.
/// </summary>
public static bool operator !=(RGBColor color1, RGBColor color2) => !(color1 == color2);
/// <inheritdoc />