| File: System\Drawing\SizeF.cs | Web Access |
| Project: src\runtime\src\libraries\System.Drawing.Primitives\src\System.Drawing.Primitives.csproj (System.Drawing.Primitives) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Numerics; namespace System.Drawing { /// <summary> /// Represents the size of a rectangular region with an ordered pair of width and height. /// </summary> [Serializable] [System.Runtime.CompilerServices.TypeForwardedFrom("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] [TypeConverter("System.Drawing.SizeFConverter, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] public struct SizeF : IEquatable<SizeF> { /// <summary> /// Initializes a new instance of the <see cref='System.Drawing.SizeF'/> class. /// </summary> public static readonly SizeF Empty; private float width; // Do not rename (binary serialization) private float height; // Do not rename (binary serialization) /// <summary> /// Initializes a new instance of the <see cref='System.Drawing.SizeF'/> class from the specified /// existing <see cref='System.Drawing.SizeF'/>. /// </summary> public SizeF(SizeF size) { width = size.width; height = size.height; } /// <summary> /// Initializes a new instance of the <see cref='System.Drawing.SizeF'/> class from the specified /// <see cref='System.Drawing.PointF'/>. /// </summary> public SizeF(PointF pt) { width = pt.X; height = pt.Y; } /// <summary> /// Initializes a new instance of the <see cref='System.Drawing.SizeF'/> struct from the specified /// <see cref="System.Numerics.Vector2"/>. /// </summary> public SizeF(Vector2 vector) { width = vector.X; height = vector.Y; } /// <summary> /// Creates a new <see cref="System.Numerics.Vector2"/> from this <see cref="System.Drawing.SizeF"/>. /// </summary> public Vector2 ToVector2() => new Vector2(width, height); /// <summary> /// Initializes a new instance of the <see cref='System.Drawing.SizeF'/> class from the specified dimensions. /// </summary> public SizeF(float width, float height) { this.width = width; this.height = height; } /// <summary> /// Converts the specified <see cref="System.Drawing.SizeF"/> to a <see cref="System.Numerics.Vector2"/>. /// </summary> public static explicit operator Vector2(SizeF size) => size.ToVector2(); /// <summary> /// Converts the specified <see cref="System.Numerics.Vector2"/> to a <see cref="System.Drawing.SizeF"/>. /// </summary> public static explicit operator SizeF(Vector2 vector) => new SizeF(vector); /// <summary> /// Performs vector addition of two <see cref='System.Drawing.SizeF'/> objects. /// </summary> public static SizeF operator +(SizeF sz1, SizeF sz2) => Add(sz1, sz2); /// <summary> /// Contracts a <see cref='System.Drawing.SizeF'/> by another <see cref='System.Drawing.SizeF'/> /// </summary> public static SizeF operator -(SizeF sz1, SizeF sz2) => Subtract(sz1, sz2); /// <summary> /// Multiplies <see cref="SizeF"/> by a <see cref="float"/> producing <see cref="SizeF"/>. /// </summary> /// <param name="left">Multiplier of type <see cref="float"/>.</param> /// <param name="right">Multiplicand of type <see cref="SizeF"/>.</param> /// <returns>Product of type <see cref="SizeF"/>.</returns> public static SizeF operator *(float left, SizeF right) => Multiply(right, left); /// <summary> /// Multiplies <see cref="SizeF"/> by a <see cref="float"/> producing <see cref="SizeF"/>. /// </summary> /// <param name="left">Multiplicand of type <see cref="SizeF"/>.</param> /// <param name="right">Multiplier of type <see cref="float"/>.</param> /// <returns>Product of type <see cref="SizeF"/>.</returns> public static SizeF operator *(SizeF left, float right) => Multiply(left, right); /// <summary> /// Divides <see cref="SizeF"/> by a <see cref="float"/> producing <see cref="SizeF"/>. /// </summary> /// <param name="left">Dividend of type <see cref="SizeF"/>.</param> /// <param name="right">Divisor of type <see cref="int"/>.</param> /// <returns>Result of type <see cref="SizeF"/>.</returns> public static SizeF operator /(SizeF left, float right) => new SizeF(left.width / right, left.height / right); /// <summary> /// Tests whether two <see cref='System.Drawing.SizeF'/> objects are identical. /// </summary> public static bool operator ==(SizeF sz1, SizeF sz2) => sz1.Width == sz2.Width && sz1.Height == sz2.Height; /// <summary> /// Tests whether two <see cref='System.Drawing.SizeF'/> objects are different. /// </summary> public static bool operator !=(SizeF sz1, SizeF sz2) => !(sz1 == sz2); /// <summary> /// Converts the specified <see cref='System.Drawing.SizeF'/> to a <see cref='System.Drawing.PointF'/>. /// </summary> public static explicit operator PointF(SizeF size) => new PointF(size.Width, size.Height); /// <summary> /// Tests whether this <see cref='System.Drawing.SizeF'/> has zero width and height. /// </summary> [Browsable(false)] public readonly bool IsEmpty => width == 0 && height == 0; /// <summary> /// Represents the horizontal component of this <see cref='System.Drawing.SizeF'/>. /// </summary> public float Width { readonly get => width; set => width = value; } /// <summary> /// Represents the vertical component of this <see cref='System.Drawing.SizeF'/>. /// </summary> public float Height { readonly get => height; set => height = value; } /// <summary> /// Performs vector addition of two <see cref='System.Drawing.SizeF'/> objects. /// </summary> public static SizeF Add(SizeF sz1, SizeF sz2) => new SizeF(sz1.Width + sz2.Width, sz1.Height + sz2.Height); /// <summary> /// Contracts a <see cref='System.Drawing.SizeF'/> by another <see cref='System.Drawing.SizeF'/>. /// </summary> public static SizeF Subtract(SizeF sz1, SizeF sz2) => new SizeF(sz1.Width - sz2.Width, sz1.Height - sz2.Height); /// <summary> /// Tests to see whether the specified object is a <see cref='System.Drawing.SizeF'/> with the same dimensions /// as this <see cref='System.Drawing.SizeF'/>. /// </summary> public override readonly bool Equals([NotNullWhen(true)] object? obj) => obj is SizeF && Equals((SizeF)obj); public readonly bool Equals(SizeF other) => this == other; public override readonly int GetHashCode() => HashCode.Combine(Width, Height); public readonly PointF ToPointF() => (PointF)this; public readonly Size ToSize() => Size.Truncate(this); /// <summary> /// Creates a human-readable string that represents this <see cref='System.Drawing.SizeF'/>. /// </summary> public override readonly string ToString() => $"{{Width={width}, Height={height}}}"; /// <summary> /// Multiplies <see cref="SizeF"/> by a <see cref="float"/> producing <see cref="SizeF"/>. /// </summary> /// <param name="size">Multiplicand of type <see cref="SizeF"/>.</param> /// <param name="multiplier">Multiplier of type <see cref="float"/>.</param> /// <returns>Product of type SizeF.</returns> private static SizeF Multiply(SizeF size, float multiplier) => new SizeF(size.width * multiplier, size.height * multiplier); } }