Rect.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 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 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Rect holds four integer coordinates for a rectangle. The rectangle is 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * represented by the coordinates of its 4 edges (left, top, right bottom). 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * These fields can be accessed directly. Use width() and height() to retrieve 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the rectangle's width and height. Note: most methods do not check to see that 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the coordinates are sorted correctly (i.e. left <= right and top <= bottom). 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Rect implements Parcelable { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int left; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int top; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int right; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int bottom; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new empty Rect. All coordinates are initialized to 0. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect() {} 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new rectangle with the specified coordinates. Note: no range 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * checking is performed, so the caller must ensure that left <= right and 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top <= bottom. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The X coordinate of the left side of the rectagle 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The Y coordinate of the top of the rectangle 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The X coordinate of the right side of the rectagle 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The Y coordinate of the bottom of the rectangle 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect(int left, int top, int right, int bottom) { 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new rectangle, initialized with the values in the specified 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle (which is left unmodified). 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle whose coordinates are copied into the new 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect(Rect r) { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = r.left; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = r.top; 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = r.right; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = r.bottom; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean equals(Object obj) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Rect r = (Rect) obj; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (r != null) { 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return left == r.left && top == r.top && right == r.right 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && bottom == r.bottom; 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "Rect(" + left + ", " + top + " - " + right + ", " + bottom + ")"; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a string representation of the rectangle in a compact form. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toShortString() { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return "[" + left + "," + top + "][" + right + "," + bottom + "]"; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the rectangle is empty (left >= right or top >= bottom) 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isEmpty() { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return left >= right || top >= bottom; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the rectangle's width. This does not check for a valid rectangle 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (i.e. left <= right) so the result may be negative. 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int width() { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return right - left; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the rectangle's height. This does not check for a valid rectangle 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (i.e. top <= bottom) so the result may be negative. 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int height() { 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return bottom - top; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the horizontal center of the rectangle. If the computed value 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is fractional, this method returns the largest integer that is 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * less than the computed value. 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int centerX() { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (left + right) >> 1; 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the vertical center of the rectangle. If the computed value 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is fractional, this method returns the largest integer that is 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * less than the computed value. 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int centerY() { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (top + bottom) >> 1; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the exact horizontal center of the rectangle as a float. 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float exactCenterX() { 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (left + right) * 0.5f; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the exact vertical center of the rectangle as a float. 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float exactCenterY() { 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (top + bottom) * 0.5f; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the rectangle to (0,0,0,0) 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setEmpty() { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = right = top = bottom = 0; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the rectangle's coordinates to the specified values. Note: no range 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * checking is performed, so it is up to the caller to ensure that 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * left <= right and top <= bottom. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The X coordinate of the left side of the rectagle 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The Y coordinate of the top of the rectangle 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The X coordinate of the right side of the rectagle 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The Y coordinate of the bottom of the rectangle 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(int left, int top, int right, int bottom) { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy the coordinates from src into this rectangle. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The rectangle whose coordinates are copied into this 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(Rect src) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = src.left; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = src.top; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = src.right; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = src.bottom; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Offset the rectangle by adding dx to its left and right coordinates, and 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * adding dy to its top and bottom coordinates. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dx The amount to add to the rectangle's left and right coordinates 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dy The amount to add to the rectangle's top and bottom coordinates 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void offset(int dx, int dy) { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left += dx; 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top += dy; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right += dx; 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom += dy; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Offset the rectangle to a specific (left, top) position, 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keeping its width and height the same. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newLeft The new "left" coordinate for the rectangle 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newTop The new "top" coordinate for the rectangle 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void offsetTo(int newLeft, int newTop) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right += newLeft - left; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom += newTop - top; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = newLeft; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = newTop; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Inset the rectangle by (dx,dy). If dx is positive, then the sides are 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * moved inwards, making the rectangle narrower. If dx is negative, then the 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sides are moved outwards, making the rectangle wider. The same holds true 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for dy and the top and bottom. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dx The amount to add(subtract) from the rectangle's left(right) 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dy The amount to add(subtract) from the rectangle's top(bottom) 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void inset(int dx, int dy) { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left += dx; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top += dy; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right -= dx; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom -= dy; 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if (x,y) is inside the rectangle. The left and top are 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * considered to be inside, while the right and bottom are not. This means 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that for a x,y to be contained: left <= x < right and top <= y < bottom. 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An empty rectangle never contains any point. 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of the point being tested for containment 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of the point being tested for containment 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff (x,y) are contained by the rectangle, where containment 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * means left <= x < right and top <= y < bottom 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(int x, int y) { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return left < right && top < bottom // check for empty first 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && x >= left && x < right && y >= top && y < bottom; 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true iff the 4 specified sides of a rectangle are inside or equal 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to this rectangle. i.e. is this rectangle a superset of the specified 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. An empty rectangle never contains another rectangle. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left side of the rectangle being tested for containment 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top of the rectangle being tested for containment 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right side of the rectangle being tested for containment 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom of the rectangle being tested for containment 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the the 4 specified sides of a rectangle are inside or 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * equal to this rectangle 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(int left, int top, int right, int bottom) { 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for empty first 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.left < this.right && this.top < this.bottom 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for containment 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && this.left <= left && this.top <= top 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && this.right >= right && this.bottom >= bottom; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true iff the specified rectangle r is inside or equal to this 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. An empty rectangle never contains another rectangle. 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle being tested for containment. 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the specified rectangle r is inside or equal to this 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(Rect r) { 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for empty first 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.left < this.right && this.top < this.bottom 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for containment 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && left <= r.left && top <= r.top 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && right >= r.right && bottom >= r.bottom; 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the rectangle specified by left,top,right,bottom intersects this 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle, return true and set this rectangle to that intersection, 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise return false and do not change this rectangle. No check is 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * performed to see if either rectangle is empty. Note: To just test for 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intersection, use intersects() 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left side of the rectangle being intersected with this 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top of the rectangle being intersected with this rectangle 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right side of the rectangle being intersected with this 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom of the rectangle being intersected with this 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the specified rectangle and this rectangle intersect 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (and this rectangle is then set to that intersection) else 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return false and do not change this rectangle. 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersect(int left, int top, int right, int bottom) { 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.left < right && left < this.right 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && this.top < bottom && top < this.bottom) { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.left < left) { 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.top < top) { 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.right > right) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.bottom > bottom) { 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the specified rectangle intersects this rectangle, return true and set 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this rectangle to that intersection, otherwise return false and do not 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change this rectangle. No check is performed to see if either rectangle 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is empty. To just test for intersection, use intersects() 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle being intersected with this rectangle. 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the specified rectangle and this rectangle intersect 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (and this rectangle is then set to that intersection) else 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return false and do not change this rectangle. 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersect(Rect r) { 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return intersect(r.left, r.top, r.right, r.bottom); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If rectangles a and b intersect, return true and set this rectangle to 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that intersection, otherwise return false and do not change this 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. No check is performed to see if either rectangle is empty. 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To just test for intersection, use intersects() 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a The first rectangle being intersected with 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param b The second rectangle being intersected with 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the two specified rectangles intersect. If they do, set 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this rectangle to that intersection. If they do not, return 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false and do not change this rectangle. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean setIntersect(Rect a, Rect b) { 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (a.left < b.right && b.left < a.right 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && a.top < b.bottom && b.top < a.bottom) { 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = Math.max(a.left, b.left); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = Math.max(a.top, b.top); 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = Math.min(a.right, b.right); 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = Math.min(a.bottom, b.bottom); 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this rectangle intersects the specified rectangle. 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In no event is this rectangle modified. No check is performed to see 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if either rectangle is empty. To record the intersection, use intersect() 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or setIntersect(). 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left side of the rectangle being tested for intersection 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top of the rectangle being tested for intersection 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right side of the rectangle being tested for 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intersection 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom of the rectangle being tested for intersection 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the specified rectangle intersects this rectangle. In 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no event is this rectangle modified. 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersects(int left, int top, int right, int bottom) { 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.left < right && left < this.right 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && this.top < bottom && top < this.bottom; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true iff the two specified rectangles intersect. In no event are 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either of the rectangles modified. To record the intersection, 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use intersect() or setIntersect(). 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a The first rectangle being tested for intersection 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param b The second rectangle being tested for intersection 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the two specified rectangles intersect. In no event are 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either of the rectangles modified. 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean intersects(Rect a, Rect b) { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return a.left < b.right && b.left < a.right 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && a.top < b.bottom && b.top < a.bottom; 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Update this Rect to enclose itself and the specified rectangle. If the 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified rectangle is empty, nothing is done. If this rectangle is empty 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is set to the specified rectangle. 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left edge being unioned with this rectangle 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top edge being unioned with this rectangle 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right edge being unioned with this rectangle 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom edge being unioned with this rectangle 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void union(int left, int top, int right, int bottom) { 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((left < right) && (top < bottom)) { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((this.left < this.right) && (this.top < this.bottom)) { 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.left > left) 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.top > top) 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.right < right) 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (this.bottom < bottom) 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Update this Rect to enclose itself and the specified rectangle. If the 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified rectangle is empty, nothing is done. If this rectangle is empty 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is set to the specified rectangle. 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle being unioned with this rectangle 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void union(Rect r) { 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project union(r.left, r.top, r.right, r.bottom); 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Update this Rect to enclose itself and the [x,y] coordinate. There is no 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * check to see that this rectangle is non-empty. 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The x coordinate of the point to add to the rectangle 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The y coordinate of the point to add to the rectangle 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void union(int x, int y) { 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < left) { 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = x; 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (x > right) { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = x; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (y < top) { 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = y; 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (y > bottom) { 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = y; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Swap top/bottom or left/right if there are flipped (i.e. left > right 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and/or top > bottom). This can be called if 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the edges are computed separately, and may have crossed over each other. 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the edges are already correct (i.e. left <= right and top <= bottom) 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * then nothing is done. 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sort() { 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (left > right) { 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int temp = left; 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = right; 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = temp; 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (top > bottom) { 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int temp = top; 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = bottom; 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = temp; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parcelable interface methods 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Write this rectangle to the specified parcel. To restore a rectangle from 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a parcel, use readFromParcel() 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param out The parcel to write the rectangle's coordinates into 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel out, int flags) { 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(left); 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(top); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(right); 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(bottom); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() { 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new rectangle from the data in the specified parcel. 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect createFromParcel(Parcel in) { 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Rect r = new Rect(); 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project r.readFromParcel(in); 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return r; 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return an array of rectangles of the specified size. 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect[] newArray(int size) { 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Rect[size]; 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the rectangle's coordinates from the data stored in the specified 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parcel. To write a rectangle to a parcel, call writeToParcel(). 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param in The parcel to read the rectangle's coordinates from 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel in) { 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = in.readInt(); 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = in.readInt(); 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = in.readInt(); 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = in.readInt(); 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 521