Neuerstellung

- Quelle: https://github.com/oxyplot/oxyplot
This commit is contained in:
2023-09-02 09:24:59 +02:00
commit 9520c1fa4a
810 changed files with 117869 additions and 0 deletions

View File

@@ -0,0 +1,168 @@

#if OXYPLOT_COREDRAWING
namespace OxyPlot.Core.Drawing
#else
namespace OxyPlot.WindowsForms
#endif
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// Describes a GDI+ Pen.
/// </summary>
public class GraphicsPenDescription
{
/// <summary>
/// Initializes a new instance of the <see cref="GraphicsPenDescription" /> class.
/// </summary>
/// <param name="color">The color.</param>
/// <param name="thickness">The thickness.</param>
/// <param name="dashArray">The dash array.</param>
/// <param name="lineJoin">The line join.</param>
public GraphicsPenDescription(OxyColor color, double thickness, double[] dashArray = null, OxyPlot.LineJoin lineJoin = OxyPlot.LineJoin.Miter)
{
Color = color;
Thickness = thickness;
DashArray = dashArray;
LineJoin = lineJoin;
cachedHashCode = ComputeHashCode();
}
/// <summary>
/// Gets the color of the pen.
/// </summary>
/// <value>The color.</value>
public OxyColor Color { get; }
/// <summary>
/// Gets the line thickness.
/// </summary>
/// <value>The line thickness.</value>
public double Thickness { get; }
/// <summary>
/// Gets the dash array.
/// </summary>
/// <value>The dash array.</value>
public double[] DashArray { get; }
/// <summary>
/// Gets the line join type.
/// </summary>
/// <value>The line join type.</value>
public LineJoin LineJoin { get; }
/// <summary>
/// The HashCode of the <see cref="GraphicsPenDescription" /> instance, as computed in the constructor.
/// </summary>
private readonly int cachedHashCode;
/// <summary>
/// Determines whether the specified <see cref="System.Object" /> is equal to this instance.
/// </summary>
/// <param name="obj">The <see cref="System.Object" /> to compare with this instance.</param>
/// <returns><c>true</c> if the specified <see cref="System.Object" /> is equal to this instance; otherwise, <c>false</c> .</returns>
public override bool Equals(object obj)
{
var description = obj as GraphicsPenDescription;
return description != null &&
Color.Equals(description.Color) &&
Thickness == description.Thickness &&
DashArraysEquals(DashArray, description.DashArray) &&
LineJoin == description.LineJoin;
}
/// <summary>
/// Returns a hash code for this instance.
/// </summary>
/// <returns>A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table.</returns>
public override int GetHashCode()
{
return cachedHashCode;
}
/// <summary>
/// Computes the HashCode for the instance.
/// </summary>
/// <returns>The HashCode for the instance.</returns>
private int ComputeHashCode()
{
var hashCode = 754997215;
unchecked
{
hashCode = hashCode * -1521134295 + Color.GetHashCode();
hashCode = hashCode * -1521134295 + Thickness.GetHashCode();
hashCode = hashCode * -1521134295 + ComputeDashArrayHashCode(DashArray);
hashCode = hashCode * -1521134295 + LineJoin.GetHashCode();
}
return hashCode;
}
/// <summary>
/// Computes a HashCode for the given array based on every element in the array.
/// </summary>
/// <param name="array">The array</param>
/// <returns>A HashCode</returns>
private static int ComputeDashArrayHashCode(double[] array)
{
if (array == null)
{
return -1;
}
int hashCode = array.Length;
for (int i = 0; i < array.Length; i++)
{
unchecked
{
hashCode = hashCode * 31 + array[i].GetHashCode();
}
}
return hashCode;
}
/// <summary>
/// Determines whether two arrays are equivalent.
/// </summary>
/// <param name="l">The left array.</param>
/// <param name="r">The right array.</param>
/// <returns><c>true</c> if the arrays are the same array, are both null, or have the same elements; otherwise <c>false</c></returns>
private static bool DashArraysEquals(double[] l, double[] r)
{
if (l == r)
{
return true;
}
if (l == null || r == null)
{
return false;
}
if (l.Length != r.Length)
{
return false;
}
for (int i = 0; i < l.Length; i++)
{
if (l[i] != r[i])
{
return false;
}
}
return true;
}
}
}