File: Size.cs
Web Access
Project: src\src\Graphics\src\Graphics\Graphics.csproj (Microsoft.Maui.Graphics)
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.Numerics;
 
namespace Microsoft.Maui.Graphics
{
	[DebuggerDisplay("Width={Width}, Height={Height}")]
	[TypeConverter(typeof(Converters.SizeTypeConverter))]
	public partial struct Size
	{
		public static readonly Size Zero;
 
		public Size(double size = 0)
		{
			Width = size;
			Height = size;
		}
 
		public Size(double width, double height)
		{
			Width = width;
			Height = height;
		}
 
		public Size(Vector2 vector)
		{
			Width = vector.X;
			Height = vector.Y;
		}
 
		public bool IsZero => Width == 0 && Height == 0;
 
		[DefaultValue(0d)]
		public double Width { get; set; }
 
		[DefaultValue(0d)]
		public double Height { get; set; }
 
		public static Size operator +(Size s1, Size s2)
		{
			return new Size(s1.Width + s2.Width, s1.Height + s2.Height);
		}
 
		public static Size operator -(Size s1, Size s2)
		{
			return new Size(s1.Width - s2.Width, s1.Height - s2.Height);
		}
 
		public static Size operator *(Size s1, double value)
		{
			return new Size(s1.Width * value, s1.Height * value);
		}
 
		public static Size operator /(Size s1, double value)
		{
			return new Size(s1.Width / value, s1.Height / value);
		}
 
		public static bool operator ==(Size s1, Size s2)
		{
			return s1.Width == s2.Width && s1.Height == s2.Height;
		}
 
		public static bool operator !=(Size s1, Size s2)
		{
			return s1.Width != s2.Width || s1.Height != s2.Height;
		}
 
		public static explicit operator Point(Size size)
		{
			return new Point(size.Width, size.Height);
		}
 
		public bool Equals(Size other)
		{
			return Width.Equals(other.Width) && Height.Equals(other.Height);
		}
 
		public override bool Equals(object obj)
		{
			if (obj is null)
				return false;
			return obj is Size && Equals((Size)obj);
		}
 
		public override int GetHashCode()
		{
			unchecked
			{
				return (Width.GetHashCode() * 397) ^ Height.GetHashCode();
			}
		}
 
		public override string ToString()
		{
			return string.Format("{{Width={0} Height={1}}}", Width.ToString(CultureInfo.InvariantCulture), Height.ToString(CultureInfo.InvariantCulture));
		}
 
		public void Deconstruct(out double width, out double height)
		{
			width = Width;
			height = Height;
		}
		public static implicit operator SizeF(Size s) => new SizeF((float)s.Width, (float)s.Height);
 
		public static bool TryParse(string value, out Size size)
		{
			if (!string.IsNullOrEmpty(value))
			{
				string[] wh = value.Split(',');
				if (wh.Length == 2
					&& double.TryParse(wh[0], NumberStyles.Number, CultureInfo.InvariantCulture, out double w)
					&& double.TryParse(wh[1], NumberStyles.Number, CultureInfo.InvariantCulture, out double h))
				{
					size = new Size(w, h);
					return true;
				}
			}
 
			size = default;
			return false;
		}
	}
}