RaUI/Source/ryControls/HtmlRenderer/Adapters/Entities/RSize.cs
zilinsoft 3262955f2f ### 2023-11-07更新
------
#### RaUIV4    V4.0.2311.0701
- *.[全新]整合了MyDb、ryControls、MyDb_MySQL等dll文件到RaUI一个项目。
- *.[新增]新增ApkOp类,可以轻松获取APK信息。
- *.[新增]新增JsonExt扩展类,让Json操作更简单。
- *.[新增]新增WebP类,可以支持webp格式的图片。
- *.[改进]ryQuickSQL中的AddField方法改为自动替换已存在的同名值。
- *.[修复]ryQuickSQL中的AddFieldCalc方法无法正常计算的BUG。
2023-11-07 16:37:53 +08:00

346 lines
12 KiB
C#

// "Therefore those skilled at the unorthodox
// are infinite as heaven and earth,
// inexhaustible as the great rivers.
// When they come to an end,
// they begin again,
// like the days and months;
// they die and are reborn,
// like the four seasons."
//
// - Sun Tsu,
// "The Art of War"
using System;
namespace TheArtOfDev.HtmlRenderer.Adapters.Entities
{
/// <summary>
/// Stores an ordered pair of floating-point numbers, typically the width and height of a rectangle.
/// </summary>
public struct RSize
{
#region Fields and Consts
/// <summary>
/// Gets a <see cref="RSize" /> structure that has a
/// <see
/// cref="RSize.Height" />
/// and
/// <see
/// cref="RSize.Width" />
/// value of 0.
/// </summary>
/// <returns>
/// A <see cref="RSize" /> structure that has a
/// <see
/// cref="RSize.Height" />
/// and
/// <see
/// cref="RSize.Width" />
/// value of 0.
/// </returns>
/// <filterpriority>1</filterpriority>
public static readonly RSize Empty = new RSize();
private double _height;
private double _width;
#endregion
/// <summary>
/// Initializes a new instance of the <see cref="RSize" /> structure from the specified existing
/// <see
/// cref="RSize" />
/// structure.
/// </summary>
/// <param name="size">
/// The <see cref="RSize" /> structure from which to create the new
/// <see
/// cref="RSize" />
/// structure.
/// </param>
public RSize(RSize size)
{
_width = size._width;
_height = size._height;
}
/// <summary>
/// Initializes a new instance of the <see cref="RSize" /> structure from the specified <see cref="RPoint" /> structure.
/// </summary>
/// <param name="pt">The <see cref="RPoint" /> structure from which to initialize this <see cref="RSize" /> structure.</param>
public RSize(RPoint pt)
{
_width = pt.X;
_height = pt.Y;
}
/// <summary>
/// Initializes a new instance of the <see cref="RSize" /> structure from the specified dimensions.
/// </summary>
/// <param name="width">
/// The width component of the new <see cref="RSize" /> structure.
/// </param>
/// <param name="height">
/// The height component of the new <see cref="RSize" /> structure.
/// </param>
public RSize(double width, double height)
{
_width = width;
_height = height;
}
/// <summary>
/// Gets a value that indicates whether this <see cref="RSize" /> structure has zero width and height.
/// </summary>
/// <returns>
/// This property returns true when this <see cref="RSize" /> structure has both a width and height of zero; otherwise, false.
/// </returns>
/// <filterpriority>1</filterpriority>
public bool IsEmpty
{
get
{
if (Math.Abs(_width) < 0.0001)
return Math.Abs(_height) < 0.0001;
else
return false;
}
}
/// <summary>
/// Gets or sets the horizontal component of this <see cref="RSize" /> structure.
/// </summary>
/// <returns>
/// The horizontal component of this <see cref="RSize" /> structure, typically measured in pixels.
/// </returns>
/// <filterpriority>1</filterpriority>
public double Width
{
get { return _width; }
set { _width = value; }
}
internal void HeightExpand(double dShiftDown)
{
this._height += dShiftDown;
}
/// <summary>
/// Gets or sets the vertical component of this <see cref="RSize" /> structure.
/// </summary>
/// <returns>
/// The vertical component of this <see cref="RSize" /> structure, typically measured in pixels.
/// </returns>
/// <filterpriority>1</filterpriority>
public double Height
{
get { return _height; }
set { _height = value; }
}
/// <summary>
/// Converts the specified <see cref="RSize" /> structure to a
/// <see cref="RPoint" /> structure.
/// </summary>
/// <returns>The <see cref="RPoint" /> structure to which this operator converts.</returns>
/// <param name="size">The <see cref="RSize" /> structure to be converted
/// </param>
public static explicit operator RPoint(RSize size)
{
return new RPoint(size.Width, size.Height);
}
/// <summary>
/// Adds the width and height of one <see cref="RSize" /> structure to the width and height of another
/// <see
/// cref="RSize" />
/// structure.
/// </summary>
/// <returns>
/// A <see cref="RSize" /> structure that is the result of the addition operation.
/// </returns>
/// <param name="sz1">
/// The first <see cref="RSize" /> structure to add.
/// </param>
/// <param name="sz2">
/// The second <see cref="RSize" /> structure to add.
/// </param>
/// <filterpriority>3</filterpriority>
public static RSize operator +(RSize sz1, RSize sz2)
{
return Add(sz1, sz2);
}
/// <summary>
/// Subtracts the width and height of one <see cref="RSize" /> structure from the width and height of another
/// <see
/// cref="RSize" />
/// structure.
/// </summary>
/// <returns>
/// A <see cref="RSize" /> that is the result of the subtraction operation.
/// </returns>
/// <param name="sz1">
/// The <see cref="RSize" /> structure on the left side of the subtraction operator.
/// </param>
/// <param name="sz2">
/// The <see cref="RSize" /> structure on the right side of the subtraction operator.
/// </param>
/// <filterpriority>3</filterpriority>
public static RSize operator -(RSize sz1, RSize sz2)
{
return Subtract(sz1, sz2);
}
/// <summary>
/// Tests whether two <see cref="RSize" /> structures are equal.
/// </summary>
/// <returns>
/// This operator returns true if <paramref name="sz1" /> and <paramref name="sz2" /> have equal width and height; otherwise, false.
/// </returns>
/// <param name="sz1">
/// The <see cref="RSize" /> structure on the left side of the equality operator.
/// </param>
/// <param name="sz2">
/// The <see cref="RSize" /> structure on the right of the equality operator.
/// </param>
/// <filterpriority>3</filterpriority>
public static bool operator ==(RSize sz1, RSize sz2)
{
if (Math.Abs(sz1.Width - sz2.Width) < 0.001)
return Math.Abs(sz1.Height - sz2.Height) < 0.001;
else
return false;
}
/// <summary>
/// Tests whether two <see cref="RSize" /> structures are different.
/// </summary>
/// <returns>
/// This operator returns true if <paramref name="sz1" /> and <paramref name="sz2" /> differ either in width or height; false if
/// <paramref
/// name="sz1" />
/// and <paramref name="sz2" /> are equal.
/// </returns>
/// <param name="sz1">
/// The <see cref="RSize" /> structure on the left of the inequality operator.
/// </param>
/// <param name="sz2">
/// The <see cref="RSize" /> structure on the right of the inequality operator.
/// </param>
/// <filterpriority>3</filterpriority>
public static bool operator !=(RSize sz1, RSize sz2)
{
return !(sz1 == sz2);
}
/// <summary>
/// Adds the width and height of one <see cref="RSize" /> structure to the width and height of another
/// <see
/// cref="RSize" />
/// structure.
/// </summary>
/// <returns>
/// A <see cref="RSize" /> structure that is the result of the addition operation.
/// </returns>
/// <param name="sz1">
/// The first <see cref="RSize" /> structure to add.
/// </param>
/// <param name="sz2">
/// The second <see cref="RSize" /> structure to add.
/// </param>
public static RSize Add(RSize sz1, RSize sz2)
{
return new RSize(sz1.Width + sz2.Width, sz1.Height + sz2.Height);
}
/// <summary>
/// Subtracts the width and height of one <see cref="RSize" /> structure from the width and height of another
/// <see
/// cref="RSize" />
/// structure.
/// </summary>
/// <returns>
/// A <see cref="RSize" /> structure that is a result of the subtraction operation.
/// </returns>
/// <param name="sz1">
/// The <see cref="RSize" /> structure on the left side of the subtraction operator.
/// </param>
/// <param name="sz2">
/// The <see cref="RSize" /> structure on the right side of the subtraction operator.
/// </param>
public static RSize Subtract(RSize sz1, RSize sz2)
{
return new RSize(sz1.Width - sz2.Width, sz1.Height - sz2.Height);
}
/// <summary>
/// Tests to see whether the specified object is a <see cref="RSize" /> structure with the same dimensions as this
/// <see
/// cref="RSize" />
/// structure.
/// </summary>
/// <returns>
/// This method returns true if <paramref name="obj" /> is a <see cref="RSize" /> and has the same width and height as this
/// <see
/// cref="RSize" />
/// ; otherwise, false.
/// </returns>
/// <param name="obj">
/// The <see cref="T:System.Object" /> to test.
/// </param>
/// <filterpriority>1</filterpriority>
public override bool Equals(object obj)
{
if (!(obj is RSize))
return false;
var sizeF = (RSize)obj;
if (Math.Abs(sizeF.Width - Width) < 0.001 && Math.Abs(sizeF.Height - Height) < 0.001)
return sizeF.GetType() == GetType();
else
return false;
}
/// <summary>
/// Returns a hash code for this <see cref="RSize" /> structure.
/// </summary>
/// <returns>
/// An integer value that specifies a hash value for this <see cref="RSize" /> structure.
/// </returns>
/// <filterpriority>1</filterpriority>
public override int GetHashCode()
{
return base.GetHashCode();
}
/// <summary>
/// Converts a <see cref="RSize" /> structure to a <see cref="RPoint" /> structure.
/// </summary>
/// <returns>
/// Returns a <see cref="RPoint" /> structure.
/// </returns>
public RPoint ToPointF()
{
return (RPoint)this;
}
/// <summary>
/// Creates a human-readable string that represents this <see cref="RSize" /> structure.
/// </summary>
/// <returns>
/// A string that represents this <see cref="RSize" /> structure.
/// </returns>
/// <filterpriority>1</filterpriority>
/// <PermissionSet>
/// <IPermission
/// class="System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/// version="1" Flags="UnmanagedCode" />
/// </PermissionSet>
public override string ToString()
{
return "{Width=" + _width + ", Height=" + _height + "}";
}
}
}