//
// 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);
}
}
}