summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Core/Size.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Core/Size.cs')
-rw-r--r--Xamarin.Forms.Core/Size.cs110
1 files changed, 110 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core/Size.cs b/Xamarin.Forms.Core/Size.cs
new file mode 100644
index 00000000..4e709a10
--- /dev/null
+++ b/Xamarin.Forms.Core/Size.cs
@@ -0,0 +1,110 @@
+using System;
+using System.ComponentModel;
+using System.Diagnostics;
+using System.Globalization;
+
+namespace Xamarin.Forms
+{
+ [DebuggerDisplay("Width={Width}, Height={Height}")]
+ public struct Size
+ {
+ double _width;
+ double _height;
+
+ public static readonly Size Zero;
+
+ public Size(double width, double height)
+ {
+ if (double.IsNaN(width))
+ throw new ArgumentException("NaN is not a valid value for width");
+ if (double.IsNaN(height))
+ throw new ArgumentException("NaN is not a valid value for height");
+ _width = width;
+ _height = height;
+ }
+
+ public bool IsZero
+ {
+ get { return (_width == 0) && (_height == 0); }
+ }
+
+ [DefaultValue(0d)]
+ public double Width
+ {
+ get { return _width; }
+ set
+ {
+ if (double.IsNaN(value))
+ throw new ArgumentException("NaN is not a valid value for Width");
+ _width = value;
+ }
+ }
+
+ [DefaultValue(0d)]
+ public double Height
+ {
+ get { return _height; }
+ set
+ {
+ if (double.IsNaN(value))
+ throw new ArgumentException("NaN is not a valid value for Height");
+ _height = value;
+ }
+ }
+
+ 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 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 (ReferenceEquals(null, obj))
+ 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));
+ }
+ }
+} \ No newline at end of file