19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackbornimport android.os.Parcel; 2044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackbornimport android.os.Parcelable; 2144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 222a6a2c2de8ce2743679f488f056f22cd1adfd726Filip Gruszczynskiimport java.io.PrintWriter; 232a6a2c2de8ce2743679f488f056f22cd1adfd726Filip Gruszczynski 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Point holds two integer coordinates 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackbornpublic class Point implements Parcelable { 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int x; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int y; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point() {} 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point(int x, int y) { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x = x; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y = y; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point(Point src) { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x = src.x; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y = src.y; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the point's x and y coordinates 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(int x, int y) { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x = x; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y = y; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Negate the point's coordinates 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void negate() { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x = -x; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y = -y; 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Offset the point's coordinates by dx, dy 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void offset(int dx, int dy) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x += dx; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y += dy; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the point's coordinates equal (x,y) 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean equals(int x, int y) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.x == x && this.y == y; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy @Override 769f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy public boolean equals(Object o) { 779f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (this == o) return true; 789f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (o == null || getClass() != o.getClass()) return false; 799f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy 809f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy Point point = (Point) o; 819f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy 829f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (x != point.x) return false; 839f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (y != point.y) return false; 849f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy 859f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy return true; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy @Override 899f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy public int hashCode() { 909f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy int result = x; 919f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy result = 31 * result + y; 929f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy return result; 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 959f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy @Override 969f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy public String toString() { 979f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy return "Point(" + x + ", " + y + ")"; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 1002a6a2c2de8ce2743679f488f056f22cd1adfd726Filip Gruszczynski /** @hide */ 1012a6a2c2de8ce2743679f488f056f22cd1adfd726Filip Gruszczynski public void printShortString(PrintWriter pw) { 102b6e66624629448b7a8c8d5d1ec62f87ba109546dFilip Gruszczynski pw.print("["); pw.print(x); pw.print(","); pw.print(y); pw.print("]"); 1032a6a2c2de8ce2743679f488f056f22cd1adfd726Filip Gruszczynski } 1042a6a2c2de8ce2743679f488f056f22cd1adfd726Filip Gruszczynski 10544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 10644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Parcelable interface methods 10744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 10844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn @Override 10944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public int describeContents() { 11044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn return 0; 11144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 11244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 11344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 11444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Write this point to the specified parcel. To restore a point from 11544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * a parcel, use readFromParcel() 11644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * @param out The parcel to write the point's coordinates into 11744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 11844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn @Override 11944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public void writeToParcel(Parcel out, int flags) { 12044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn out.writeInt(x); 12144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn out.writeInt(y); 12244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 12344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 12444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public static final Parcelable.Creator<Point> CREATOR = new Parcelable.Creator<Point>() { 12544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 12644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Return a new point from the data in the specified parcel. 12744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 12844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public Point createFromParcel(Parcel in) { 12944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn Point r = new Point(); 13044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn r.readFromParcel(in); 13144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn return r; 13244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 13344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 13444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 13544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Return an array of rectangles of the specified size. 13644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 13744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public Point[] newArray(int size) { 13844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn return new Point[size]; 13944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 14044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn }; 14144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 14244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 14344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Set the point's coordinates from the data stored in the specified 14444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * parcel. To write a point to a parcel, call writeToParcel(). 14544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * 14644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * @param in The parcel to read the point's coordinates from 14744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 14844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public void readFromParcel(Parcel in) { 14944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn x = in.readInt(); 15044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn y = in.readInt(); 15144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 153