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 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Point holds two integer coordinates 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackbornpublic class Point implements Parcelable { 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int x; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int y; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point() {} 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point(int x, int y) { 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x = x; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y = y; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Point(Point src) { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x = src.x; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y = src.y; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the point's x and y coordinates 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(int x, int y) { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.x = x; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.y = y; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Negate the point's coordinates 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void negate() { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x = -x; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y = -y; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Offset the point's coordinates by dx, dy 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final void offset(int dx, int dy) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project x += dx; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project y += dy; 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the point's coordinates equal (x,y) 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean equals(int x, int y) { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.x == x && this.y == y; 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy @Override 749f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy public boolean equals(Object o) { 759f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (this == o) return true; 769f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (o == null || getClass() != o.getClass()) return false; 779f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy 789f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy Point point = (Point) o; 799f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy 809f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (x != point.x) return false; 819f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy if (y != point.y) return false; 829f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy 839f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy return true; 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy @Override 879f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy public int hashCode() { 889f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy int result = x; 899f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy result = 31 * result + y; 909f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy return result; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy @Override 949f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy public String toString() { 959f8af6546deb26d8bddb0c1b23d554fe5380b9d3Romain Guy return "Point(" + x + ", " + y + ")"; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 9744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 9844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 9944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Parcelable interface methods 10044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 10144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn @Override 10244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public int describeContents() { 10344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn return 0; 10444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 10544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 10644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 10744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Write this point to the specified parcel. To restore a point from 10844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * a parcel, use readFromParcel() 10944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * @param out The parcel to write the point's coordinates into 11044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 11144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn @Override 11244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public void writeToParcel(Parcel out, int flags) { 11344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn out.writeInt(x); 11444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn out.writeInt(y); 11544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 11644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 11744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public static final Parcelable.Creator<Point> CREATOR = new Parcelable.Creator<Point>() { 11844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 11944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Return a new point from the data in the specified parcel. 12044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 12144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public Point createFromParcel(Parcel in) { 12244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn Point r = new Point(); 12344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn r.readFromParcel(in); 12444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn return r; 12544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 12644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 12744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 12844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Return an array of rectangles of the specified size. 12944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 13044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public Point[] newArray(int size) { 13144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn return new Point[size]; 13244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 13344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn }; 13444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn 13544bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn /** 13644bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * Set the point's coordinates from the data stored in the specified 13744bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * parcel. To write a point to a parcel, call writeToParcel(). 13844bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * 13944bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn * @param in The parcel to read the point's coordinates from 14044bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn */ 14144bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn public void readFromParcel(Parcel in) { 14244bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn x = in.readInt(); 14344bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn y = in.readInt(); 14444bc17c6b517aef35a390c81b5aa79c4f284f744Dianne Hackborn } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 146