File: SizeF.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.SizeFTypeConverter))]
	public partial struct SizeF
	{
		public static readonly SizeF Zero;
 
		public SizeF(float size = 0)
		{
			Width = size;
			Height = size;
		}
 
		public SizeF(float width, float height)
		{
			Width = width;
			Height = height;
		}
 
		public SizeF(Vector2 vector)
		{
			Width = vector.X;
			Height = vector.Y;
		}
 
		public bool IsZero => Width == 0 && Height == 0;
 
		[DefaultValue(0f)]
		public float Width { get; set; }
 
		[DefaultValue(0f)]
		public float Height { get; set; }
 
		public SizeF TransformNormalBy(in Matrix3x2 transform)
		{
			return (SizeF)Vector2.TransformNormal((Vector2)this, transform);
		}
 
		public static SizeF operator +(SizeF s1, SizeF s2)
		{
			return new SizeF(s1.Width + s2.Width, s1.Height + s2.Height);
		}
 
		public static SizeF operator -(SizeF s1, SizeF s2)
		{
			return new SizeF(s1.Width - s2.Width, s1.Height - s2.Height);
		}
 
		public static SizeF operator *(SizeF s1, float value)
		{
			return new SizeF(s1.Width * value, s1.Height * value);
		}
 
		public static SizeF operator /(SizeF s1, float value)
		{
			return new SizeF(s1.Width / value, s1.Height / value);
		}
 
		public static bool operator ==(SizeF s1, SizeF s2)
		{
			return s1.Width == s2.Width && s1.Height == s2.Height;
		}
 
		public static bool operator !=(SizeF s1, SizeF s2)
		{
			return s1.Width != s2.Width || s1.Height != s2.Height;
		}
 
		public static explicit operator PointF(SizeF size)
		{
			return new PointF(size.Width, size.Height);
		}
 
		public static explicit operator Vector2(SizeF size)
		{
			return new Vector2(size.Width, size.Height);
		}
 
		public static explicit operator SizeF(Vector2 size)
		{
			return new SizeF(size.X, size.Y);
		}
 
		public bool Equals(SizeF 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 SizeF && Equals((SizeF)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 float width, out float height)
		{
			width = Width;
			height = Height;
		}
 
		public static implicit operator Size(SizeF s) => new Size(s.Width, s.Height);
 
		public static bool TryParse(string value, out SizeF sizeF)
		{
			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))
				{
					sizeF = new Size(w, h);
					return true;
				}
			}
 
			sizeF = default;
			return false;
		}
	}
}