DragAndDrop core
This commit is contained in:
84
Lattice.Core.Geometry/Size.cs
Normal file
84
Lattice.Core.Geometry/Size.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
namespace Lattice.Core.Geometry;
|
||||
|
||||
/// <summary>
|
||||
/// Представляет размеры в двумерном пространстве с шириной и высотой.
|
||||
/// Эта структура является платформонезависимой и может использоваться
|
||||
/// во всех слоях системы Lattice.
|
||||
/// </summary>
|
||||
public struct Size : IEquatable<Size>
|
||||
{
|
||||
/// <summary>
|
||||
/// Получает размер с нулевой шириной и высотой.
|
||||
/// </summary>
|
||||
public static readonly Size Zero = new(0, 0);
|
||||
|
||||
/// <summary>
|
||||
/// Ширина.
|
||||
/// </summary>
|
||||
public double Width { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Высота.
|
||||
/// </summary>
|
||||
public double Height { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Получает признак того, что размер является пустым (нулевая ширина или высота).
|
||||
/// </summary>
|
||||
public bool IsEmpty => Width <= 0 || Height <= 0;
|
||||
|
||||
/// <summary>
|
||||
/// Инициализирует новый размер с указанными значениями.
|
||||
/// </summary>
|
||||
/// <param name="width">Ширина.</param>
|
||||
/// <param name="height">Высота.</param>
|
||||
public Size(double width, double height)
|
||||
{
|
||||
Width = width;
|
||||
Height = height;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создает размер из System.Drawing.Size.
|
||||
/// </summary>
|
||||
public static Size FromDrawingSize(System.Drawing.Size size) =>
|
||||
new(size.Width, size.Height);
|
||||
|
||||
/// <summary>
|
||||
/// Преобразует размер в System.Drawing.Size.
|
||||
/// </summary>
|
||||
public System.Drawing.Size ToDrawingSize() =>
|
||||
new((int)Width, (int)Height);
|
||||
|
||||
/// <summary>
|
||||
/// Определяет, равен ли этот размер другому размеру.
|
||||
/// </summary>
|
||||
public bool Equals(Size other) =>
|
||||
Math.Abs(Width - other.Width) < double.Epsilon &&
|
||||
Math.Abs(Height - other.Height) < double.Epsilon;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override bool Equals(object? obj) =>
|
||||
obj is Size size && Equals(size);
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override int GetHashCode() =>
|
||||
HashCode.Combine(Width, Height);
|
||||
|
||||
/// <summary>
|
||||
/// Определяет, равны ли два размера.
|
||||
/// </summary>
|
||||
public static bool operator ==(Size left, Size right) =>
|
||||
left.Equals(right);
|
||||
|
||||
/// <summary>
|
||||
/// Определяет, не равны ли два размера.
|
||||
/// </summary>
|
||||
public static bool operator !=(Size left, Size right) =>
|
||||
!left.Equals(right);
|
||||
|
||||
/// <summary>
|
||||
/// Возвращает строковое представление размера.
|
||||
/// </summary>
|
||||
public override string ToString() => $"{Width} × {Height}";
|
||||
}
|
||||
Reference in New Issue
Block a user