19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  this work for additional information regarding copyright ownership.
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  the License.  You may obtain a copy of the License at
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  See the License for the specific language governing permissions and
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *  limitations under the License.
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Denis M. Kishenko
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.geom.Point2D;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.Serializable;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Point class represents a point location with coordinates X, Y in current
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * coordinate system.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Point extends Point2D implements Serializable {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant serialVersionUID.
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final long serialVersionUID = -5276940640259749850L;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The X coordinate of Point.
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int x;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Y coordinate of Point.
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int y;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new point with (0, O) coordinates, the origin of
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * coordinate system.
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Point() {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setLocation(0, 0);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new point with (x, y) coordinates.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the X coordinate of Point.
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Y coordinate of Point.
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Point(int x, int y) {
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setLocation(x, y);
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new point, giving it the same location as the parameter p.
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param p
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Point object giving the coordinates of the new point.
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Point(Point p) {
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setLocation(p.x, p.y);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Compares current Point with the specified object.
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param obj
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Object to be compared.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if the Object being compared is a Point whose coordinates
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         are equal to the coordinates of this Point, false otherwise.
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.geom.Point2D#equals(Object)
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean equals(Object obj) {
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (obj == this) {
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (obj instanceof Point) {
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Point p = (Point)obj;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return x == p.x && y == p.y;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns string representation of the current Point object.
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a string representation of the current Point object.
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getClass().getName() + "[x=" + x + ",y=" + y + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets X coordinate of Point as a double.
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return X coordinate of the point as a double.
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.geom.Point2D#getX()
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double getX() {
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return x;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets Y coordinate of Point as a double.
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Y coordinate of the point as a double.
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.geom.Point2D#getY()
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double getY() {
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return y;
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the location of the Point as a new Point object.
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return a copy of the Point.
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Point getLocation() {
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Point(x, y);
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the location of the Point to the same coordinates as p.
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param p
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Point that gives the new location.
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLocation(Point p) {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setLocation(p.x, p.y);
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the location of the Point to the coordinates X, Y.
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the X coordinate of the Point's new location.
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Y coordinate of the Point's new location.
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLocation(int x, int y) {
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.x = x;
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.y = y;
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the location of Point to the specified double coordinates.
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the X the Point's new location.
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Y the Point's new location.
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.geom.Point2D#setLocation(double, double)
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setLocation(double x, double y) {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        x = x < Integer.MIN_VALUE ? Integer.MIN_VALUE : x > Integer.MAX_VALUE ? Integer.MAX_VALUE
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                : x;
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        y = y < Integer.MIN_VALUE ? Integer.MIN_VALUE : y > Integer.MAX_VALUE ? Integer.MAX_VALUE
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                : y;
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setLocation((int)Math.round(x), (int)Math.round(y));
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Moves the Point to the specified (x, y) location.
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param x
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the X coordinate of the new location.
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param y
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Y coordinate of the new location.
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void move(int x, int y) {
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setLocation(x, y);
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Translates current Point moving it from the position (x, y) to the new
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * position given by (x+dx, x+dy) coordinates.
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param dx
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the horizontal delta - the Point is moved to this distance
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            along X axis.
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param dy
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the vertical delta - the Point is moved to this distance along
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            Y axis.
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void translate(int dx, int dy) {
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        x += dx;
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        y += dy;
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
212