namespace Umbraco.Cms.Core.Models; /// /// These are options that are passed to the IImageUrlGenerator implementation to determine the URL that is generated. /// public class ImageUrlGenerationOptions : IEquatable { public ImageUrlGenerationOptions(string? imageUrl) => ImageUrl = imageUrl; public string? ImageUrl { get; } public int? Width { get; set; } public int? Height { get; set; } public int? Quality { get; set; } public ImageCropMode? ImageCropMode { get; set; } public ImageCropAnchor? ImageCropAnchor { get; set; } public FocalPointPosition? FocalPoint { get; set; } public CropCoordinates? Crop { get; set; } public string? CacheBusterValue { get; set; } public string? FurtherOptions { get; set; } public bool Equals(ImageUrlGenerationOptions? other) => other != null && ImageUrl == other.ImageUrl && Width == other.Width && Height == other.Height && Quality == other.Quality && ImageCropMode == other.ImageCropMode && ImageCropAnchor == other.ImageCropAnchor && EqualityComparer.Default.Equals(FocalPoint, other.FocalPoint) && EqualityComparer.Default.Equals(Crop, other.Crop) && CacheBusterValue == other.CacheBusterValue && FurtherOptions == other.FurtherOptions; public override bool Equals(object? obj) => Equals(obj as ImageUrlGenerationOptions); public override int GetHashCode() { var hash = default(HashCode); hash.Add(ImageUrl); hash.Add(Width); hash.Add(Height); hash.Add(Quality); hash.Add(ImageCropMode); hash.Add(ImageCropAnchor); hash.Add(FocalPoint); hash.Add(Crop); hash.Add(CacheBusterValue); hash.Add(FurtherOptions); return hash.ToHashCode(); } /// /// The focal point position, in whatever units the registered IImageUrlGenerator uses, typically a percentage of the /// total image from 0.0 to 1.0. /// public class FocalPointPosition : IEquatable { public FocalPointPosition(decimal left, decimal top) { Left = left; Top = top; } public decimal Left { get; } public decimal Top { get; } public bool Equals(FocalPointPosition? other) => other != null && Left == other.Left && Top == other.Top; public override bool Equals(object? obj) => Equals(obj as FocalPointPosition); public override int GetHashCode() => HashCode.Combine(Left, Top); } /// /// The bounds of the crop within the original image, in whatever units the registered IImageUrlGenerator uses, /// typically a percentage between 0.0 and 1.0. /// public class CropCoordinates : IEquatable { public CropCoordinates(decimal left, decimal top, decimal right, decimal bottom) { Left = left; Top = top; Right = right; Bottom = bottom; } public decimal Left { get; } public decimal Top { get; } public decimal Right { get; } public decimal Bottom { get; } public bool Equals(CropCoordinates? other) => other != null && Left == other.Left && Top == other.Top && Right == other.Right && Bottom == other.Bottom; public override bool Equals(object? obj) => Equals(obj as CropCoordinates); public override int GetHashCode() => HashCode.Combine(Left, Top, Right, Bottom); } }