// // System.Drawing.Point.cs // // Author: // Mike Kestner (mkestner@speakeasy.net) // // Copyright (C) 2001 Mike Kestner // Copyright (C) 2004 Novell, Inc. http://www.novell.com // using System; using System.Globalization; namespace Terminal.Gui { /// /// Represents an ordered pair of integer x- and y-coordinates that defines a point in a two-dimensional plane. /// public struct Point { /// /// Gets or sets the x-coordinate of this Point. /// public int X; /// /// Gets or sets the y-coordinate of this Point. /// public int Y; // ----------------------- // Public Shared Members // ----------------------- /// /// Empty Shared Field /// /// /// /// An uninitialized Point Structure. /// public static readonly Point Empty; /// /// Addition Operator /// /// /// /// Translates a Point using the Width and Height /// properties of the given Size. /// public static Point operator + (Point pt, Size sz) { return new Point (pt.X + sz.Width, pt.Y + sz.Height); } /// /// Equality Operator /// /// /// /// Compares two Point objects. The return value is /// based on the equivalence of the X and Y properties /// of the two points. /// public static bool operator == (Point left, Point right) { return ((left.X == right.X) && (left.Y == right.Y)); } /// /// Inequality Operator /// /// /// /// Compares two Point objects. The return value is /// based on the equivalence of the X and Y properties /// of the two points. /// public static bool operator != (Point left, Point right) { return ((left.X != right.X) || (left.Y != right.Y)); } /// /// Subtraction Operator /// /// /// /// Translates a Point using the negation of the Width /// and Height properties of the given Size. /// public static Point operator - (Point pt, Size sz) { return new Point (pt.X - sz.Width, pt.Y - sz.Height); } /// /// Point to Size Conversion /// /// /// /// Returns a Size based on the Coordinates of a given /// Point. Requires explicit cast. /// public static explicit operator Size (Point p) { if (p.X < 0 || p.Y < 0) throw new ArgumentException ("Either Width and Height must be greater or equal to 0."); return new Size (p.X, p.Y); } // ----------------------- // Public Constructors // ----------------------- /// /// Point Constructor /// /// /// /// Creates a Point from a Size value. /// public Point (Size sz) { X = sz.Width; Y = sz.Height; } /// /// Point Constructor /// /// /// /// Creates a Point from a specified x,y coordinate pair. /// public Point (int x, int y) { this.X = x; this.Y = y; } // ----------------------- // Public Instance Members // ----------------------- /// /// IsEmpty Property /// /// /// /// Indicates if both X and Y are zero. /// public bool IsEmpty { get { return ((X == 0) && (Y == 0)); } } /// /// Equals Method /// /// /// /// Checks equivalence of this Point and another object. /// public override bool Equals (object obj) { if (!(obj is Point)) return false; return (this == (Point) obj); } /// /// GetHashCode Method /// /// /// /// Calculates a hashing value. /// public override int GetHashCode () { return X^Y; } /// /// Offset Method /// /// /// /// Moves the Point a specified distance. /// public void Offset (int dx, int dy) { X += dx; Y += dy; } /// /// ToString Method /// /// /// /// Formats the Point as a string in coordinate notation. /// public override string ToString () { return string.Format ("{{X={0},Y={1}}}", X.ToString (CultureInfo.InvariantCulture), Y.ToString (CultureInfo.InvariantCulture)); } /// /// Adds the specified Size to the specified Point. /// /// The Point that is the result of the addition operation. /// The Point to add. /// The Size to add. public static Point Add (Point pt, Size sz) { return new Point (pt.X + sz.Width, pt.Y + sz.Height); } /// /// Translates this Point by the specified Point. /// /// The offset. /// The Point used offset this Point. public void Offset (Point p) { Offset (p.X, p.Y); } /// /// Returns the result of subtracting specified Size from the specified Point. /// /// The Point that is the result of the subtraction operation. /// The Point to be subtracted from. /// The Size to subtract from the Point. public static Point Subtract (Point pt, Size sz) { return new Point (pt.X - sz.Width, pt.Y - sz.Height); } } }