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 195b3edbde20b446ecbfebe5d6ad0dcd735473ac75Chet Haaseimport android.annotation.CheckResult; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 231d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackbornimport java.io.PrintWriter; 24c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onoratoimport java.util.regex.Matcher; 25c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onoratoimport java.util.regex.Pattern; 261d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Rect holds four integer coordinates for a rectangle. The rectangle is 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * represented by the coordinates of its 4 edges (left, top, right bottom). 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * These fields can be accessed directly. Use width() and height() to retrieve 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the rectangle's width and height. Note: most methods do not check to see that 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the coordinates are sorted correctly (i.e. left <= right and top <= bottom). 33ccdc3ebb9c9bf67ec8e0e30ab117c82bf8485663Chris Craik * <p> 34ccdc3ebb9c9bf67ec8e0e30ab117c82bf8485663Chris Craik * Note that the right and bottom coordinates are exclusive. This means a Rect 35ccdc3ebb9c9bf67ec8e0e30ab117c82bf8485663Chris Craik * being drawn untransformed onto a {@link android.graphics.Canvas} will draw 36ccdc3ebb9c9bf67ec8e0e30ab117c82bf8485663Chris Craik * into the column and row described by its left and top coordinates, but not 37ccdc3ebb9c9bf67ec8e0e30ab117c82bf8485663Chris Craik * those of its bottom and right. 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class Rect implements Parcelable { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int left; 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int top; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int right; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int bottom; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 455d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers /** 465d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers * A helper class for flattened rectange pattern recognition. A separate 475d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers * class to avoid an initialization dependency on a regular expression 485d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers * causing Rect to not be initializable with an ahead-of-time compilation 495d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers * scheme. 505d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers */ 515d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers private static final class UnflattenHelper { 525d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers private static final Pattern FLATTENED_PATTERN = Pattern.compile( 53c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato "(-?\\d+) (-?\\d+) (-?\\d+) (-?\\d+)"); 54c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato 555d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers static Matcher getMatcher(String str) { 565d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers return FLATTENED_PATTERN.matcher(str); 575d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers } 585d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers } 595d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new empty Rect. All coordinates are initialized to 0. 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect() {} 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new rectangle with the specified coordinates. Note: no range 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * checking is performed, so the caller must ensure that left <= right and 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top <= bottom. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 70852be16790d099f95fb2c4fe7b316455662ee97fPin Ting * @param left The X coordinate of the left side of the rectangle 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The Y coordinate of the top of the rectangle 72852be16790d099f95fb2c4fe7b316455662ee97fPin Ting * @param right The X coordinate of the right side of the rectangle 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The Y coordinate of the bottom of the rectangle 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect(int left, int top, int right, int bottom) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a new rectangle, initialized with the values in the specified 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle (which is left unmodified). 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle whose coordinates are copied into the new 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect(Rect r) { 90dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy if (r == null) { 91dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy left = top = right = bottom = 0; 92dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy } else { 93dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy left = r.left; 94dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy top = r.top; 95dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy right = r.right; 96dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy bottom = r.bottom; 97dd4b1fec4c93c7417314febecebfd91e916f5ff6Romain Guy } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 100cc3ec6cdb2b892eb29513e72d8b205acbe997b25Gilles Debunne @Override 10174d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy public boolean equals(Object o) { 10274d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy if (this == o) return true; 10374d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy if (o == null || getClass() != o.getClass()) return false; 10474d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy 10574d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy Rect r = (Rect) o; 10674d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy return left == r.left && top == r.top && right == r.right && bottom == r.bottom; 10774d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy } 10874d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy 10974d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy @Override 11074d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy public int hashCode() { 11174d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy int result = left; 11274d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy result = 31 * result + top; 11374d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy result = 31 * result + right; 11474d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy result = 31 * result + bottom; 11574d7ca133a6db82abba5c0abe443fb001928e72cRomain Guy return result; 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 118cc3ec6cdb2b892eb29513e72d8b205acbe997b25Gilles Debunne @Override 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toString() { 1201d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn StringBuilder sb = new StringBuilder(32); 1211d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append("Rect("); sb.append(left); sb.append(", "); 1221d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(top); sb.append(" - "); sb.append(right); 1231d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(", "); sb.append(bottom); sb.append(")"); 1241d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn return sb.toString(); 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a string representation of the rectangle in a compact form. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String toShortString() { 1311d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn return toShortString(new StringBuilder(32)); 1321d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn } 1331d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn 1341d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn /** 1351d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn * Return a string representation of the rectangle in a compact form. 1361d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn * @hide 1371d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn */ 1381d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn public String toShortString(StringBuilder sb) { 1391d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.setLength(0); 1401d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append('['); sb.append(left); sb.append(','); 1411d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(top); sb.append("]["); sb.append(right); 1421d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn sb.append(','); sb.append(bottom); sb.append(']'); 1431d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn return sb.toString(); 1441d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn } 145c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato 146c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato /** 147c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * Return a string representation of the rectangle in a well-defined format. 148c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * 149c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * <p>You can later recover the Rect from this string through 150c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * {@link #unflattenFromString(String)}. 151c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * 152c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * @return Returns a new String of the form "left top right bottom" 153c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato */ 154c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato public String flattenToString() { 155c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato StringBuilder sb = new StringBuilder(32); 156c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato // WARNING: Do not change the format of this string, it must be 157c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato // preserved because Rects are saved in this flattened format. 158c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato sb.append(left); 159c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato sb.append(' '); 160c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato sb.append(top); 161c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato sb.append(' '); 162c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato sb.append(right); 163c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato sb.append(' '); 164c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato sb.append(bottom); 165c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato return sb.toString(); 166c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato } 167c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato 168c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato /** 169c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * Returns a Rect from a string of the form returned by {@link #flattenToString}, 170c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato * or null if the string is not of that form. 171c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato */ 172c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato public static Rect unflattenFromString(String str) { 1735d5d14fd97aa8d7adf00911a9b337b9a88da41cdIan Rogers Matcher matcher = UnflattenHelper.getMatcher(str); 174c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato if (!matcher.matches()) { 175c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato return null; 176c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato } 177c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato return new Rect(Integer.parseInt(matcher.group(1)), 178c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato Integer.parseInt(matcher.group(2)), 179c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato Integer.parseInt(matcher.group(3)), 180c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato Integer.parseInt(matcher.group(4))); 181c7a63eea8d3d346addaaf892b5bbe0aa80651640Joe Onorato } 1821d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn 1831d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn /** 1841d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn * Print short representation to given writer. 1851d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn * @hide 1861d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn */ 1871d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn public void printShortString(PrintWriter pw) { 1881d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print('['); pw.print(left); pw.print(','); 1891d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(top); pw.print("]["); pw.print(right); 1901d442e0d990b581357f33f5463c7c5cb49b551e8Dianne Hackborn pw.print(','); pw.print(bottom); pw.print(']'); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if the rectangle is empty (left >= right or top >= bottom) 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean isEmpty() { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return left >= right || top >= bottom; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the rectangle's width. This does not check for a valid rectangle 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (i.e. left <= right) so the result may be negative. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int width() { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return right - left; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the rectangle's height. This does not check for a valid rectangle 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (i.e. top <= bottom) so the result may be negative. 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int height() { 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return bottom - top; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the horizontal center of the rectangle. If the computed value 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is fractional, this method returns the largest integer that is 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * less than the computed value. 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int centerX() { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (left + right) >> 1; 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the vertical center of the rectangle. If the computed value 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is fractional, this method returns the largest integer that is 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * less than the computed value. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final int centerY() { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (top + bottom) >> 1; 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the exact horizontal center of the rectangle as a float. 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float exactCenterX() { 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (left + right) * 0.5f; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the exact vertical center of the rectangle as a float. 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final float exactCenterY() { 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (top + bottom) * 0.5f; 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the rectangle to (0,0,0,0) 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setEmpty() { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = right = top = bottom = 0; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the rectangle's coordinates to the specified values. Note: no range 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * checking is performed, so it is up to the caller to ensure that 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * left <= right and top <= bottom. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 260852be16790d099f95fb2c4fe7b316455662ee97fPin Ting * @param left The X coordinate of the left side of the rectangle 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The Y coordinate of the top of the rectangle 262852be16790d099f95fb2c4fe7b316455662ee97fPin Ting * @param right The X coordinate of the right side of the rectangle 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The Y coordinate of the bottom of the rectangle 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(int left, int top, int right, int bottom) { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copy the coordinates from src into this rectangle. 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param src The rectangle whose coordinates are copied into this 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void set(Rect src) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = src.left; 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = src.top; 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = src.right; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = src.bottom; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Offset the rectangle by adding dx to its left and right coordinates, and 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * adding dy to its top and bottom coordinates. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dx The amount to add to the rectangle's left and right coordinates 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dy The amount to add to the rectangle's top and bottom coordinates 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void offset(int dx, int dy) { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left += dx; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top += dy; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right += dx; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom += dy; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Offset the rectangle to a specific (left, top) position, 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * keeping its width and height the same. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newLeft The new "left" coordinate for the rectangle 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param newTop The new "top" coordinate for the rectangle 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void offsetTo(int newLeft, int newTop) { 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right += newLeft - left; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom += newTop - top; 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = newLeft; 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = newTop; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Inset the rectangle by (dx,dy). If dx is positive, then the sides are 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * moved inwards, making the rectangle narrower. If dx is negative, then the 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * sides are moved outwards, making the rectangle wider. The same holds true 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for dy and the top and bottom. 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dx The amount to add(subtract) from the rectangle's left(right) 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param dy The amount to add(subtract) from the rectangle's top(bottom) 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void inset(int dx, int dy) { 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left += dx; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top += dy; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right -= dx; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom -= dy; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 330c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi * Insets the rectangle on all sides specified by the dimensions of the {@code insets} 331c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi * rectangle. 332c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi * @hide 333c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi * @param insets The rectangle specifying the insets on all side. 334c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi */ 335c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi public void inset(Rect insets) { 336c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi left += insets.left; 337c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi top += insets.top; 338c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi right -= insets.right; 339c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi bottom -= insets.bottom; 340c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi } 341c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi 342c6c89a82144f59475242c75d67529fed943ae30bJorim Jaggi /** 3430a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi * Insets the rectangle on all sides specified by the insets. 3440a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi * @hide 3450a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi * @param left The amount to add from the rectangle's left 3460a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi * @param top The amount to add from the rectangle's top 3470a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi * @param right The amount to subtract from the rectangle's right 3480a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi * @param bottom The amount to subtract from the rectangle's bottom 3490a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi */ 3500a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi public void inset(int left, int top, int right, int bottom) { 3510a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi this.left += left; 3520a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi this.top += top; 3530a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi this.right -= right; 3540a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi this.bottom -= bottom; 3550a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi } 3560a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi 3570a932141980b576e0b9bcec9a077f55b7b269a02Jorim Jaggi /** 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if (x,y) is inside the rectangle. The left and top are 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * considered to be inside, while the right and bottom are not. This means 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that for a x,y to be contained: left <= x < right and top <= y < bottom. 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An empty rectangle never contains any point. 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The X coordinate of the point being tested for containment 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The Y coordinate of the point being tested for containment 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff (x,y) are contained by the rectangle, where containment 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * means left <= x < right and top <= y < bottom 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(int x, int y) { 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return left < right && top < bottom // check for empty first 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && x >= left && x < right && y >= top && y < bottom; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true iff the 4 specified sides of a rectangle are inside or equal 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to this rectangle. i.e. is this rectangle a superset of the specified 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. An empty rectangle never contains another rectangle. 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left side of the rectangle being tested for containment 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top of the rectangle being tested for containment 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right side of the rectangle being tested for containment 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom of the rectangle being tested for containment 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the the 4 specified sides of a rectangle are inside or 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * equal to this rectangle 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(int left, int top, int right, int bottom) { 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for empty first 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.left < this.right && this.top < this.bottom 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for containment 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && this.left <= left && this.top <= top 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project && this.right >= right && this.bottom >= bottom; 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true iff the specified rectangle r is inside or equal to this 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. An empty rectangle never contains another rectangle. 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle being tested for containment. 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the specified rectangle r is inside or equal to this 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(Rect r) { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // check for empty first 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return this.left < this.right && this.top < this.bottom 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // now check for containment 405cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy && left <= r.left && top <= r.top && right >= r.right && bottom >= r.bottom; 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the rectangle specified by left,top,right,bottom intersects this 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle, return true and set this rectangle to that intersection, 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * otherwise return false and do not change this rectangle. No check is 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * performed to see if either rectangle is empty. Note: To just test for 413cc3ec6cdb2b892eb29513e72d8b205acbe997b25Gilles Debunne * intersection, use {@link #intersects(Rect, Rect)}. 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left side of the rectangle being intersected with this 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top of the rectangle being intersected with this rectangle 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right side of the rectangle being intersected with this 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom of the rectangle being intersected with this 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the specified rectangle and this rectangle intersect 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (and this rectangle is then set to that intersection) else 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return false and do not change this rectangle. 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4265b3edbde20b446ecbfebe5d6ad0dcd735473ac75Chet Haase @CheckResult 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersect(int left, int top, int right, int bottom) { 428cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.left < right && left < this.right && this.top < bottom && top < this.bottom) { 429cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.left < left) this.left = left; 430cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.top < top) this.top = top; 431cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.right > right) this.right = right; 432cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.bottom > bottom) this.bottom = bottom; 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the specified rectangle intersects this rectangle, return true and set 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this rectangle to that intersection, otherwise return false and do not 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * change this rectangle. No check is performed to see if either rectangle 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is empty. To just test for intersection, use intersects() 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle being intersected with this rectangle. 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the specified rectangle and this rectangle intersect 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (and this rectangle is then set to that intersection) else 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * return false and do not change this rectangle. 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4495b3edbde20b446ecbfebe5d6ad0dcd735473ac75Chet Haase @CheckResult 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersect(Rect r) { 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return intersect(r.left, r.top, r.right, r.bottom); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If rectangles a and b intersect, return true and set this rectangle to 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * that intersection, otherwise return false and do not change this 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rectangle. No check is performed to see if either rectangle is empty. 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * To just test for intersection, use intersects() 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a The first rectangle being intersected with 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param b The second rectangle being intersected with 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the two specified rectangles intersect. If they do, set 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this rectangle to that intersection. If they do not, return 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * false and do not change this rectangle. 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4665b3edbde20b446ecbfebe5d6ad0dcd735473ac75Chet Haase @CheckResult 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean setIntersect(Rect a, Rect b) { 468cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom) { 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = Math.max(a.left, b.left); 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = Math.max(a.top, b.top); 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = Math.min(a.right, b.right); 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = Math.min(a.bottom, b.bottom); 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true if this rectangle intersects the specified rectangle. 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * In no event is this rectangle modified. No check is performed to see 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * if either rectangle is empty. To record the intersection, use intersect() 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * or setIntersect(). 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left side of the rectangle being tested for intersection 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top of the rectangle being tested for intersection 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right side of the rectangle being tested for 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * intersection 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom of the rectangle being tested for intersection 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the specified rectangle intersects this rectangle. In 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * no event is this rectangle modified. 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersects(int left, int top, int right, int bottom) { 493cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy return this.left < right && left < this.right && this.top < bottom && top < this.bottom; 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Returns true iff the two specified rectangles intersect. In no event are 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either of the rectangles modified. To record the intersection, 499cc3ec6cdb2b892eb29513e72d8b205acbe997b25Gilles Debunne * use {@link #intersect(Rect)} or {@link #setIntersect(Rect, Rect)}. 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param a The first rectangle being tested for intersection 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param b The second rectangle being tested for intersection 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true iff the two specified rectangles intersect. In no event are 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * either of the rectangles modified. 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static boolean intersects(Rect a, Rect b) { 507cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy return a.left < b.right && b.left < a.right && a.top < b.bottom && b.top < a.bottom; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Update this Rect to enclose itself and the specified rectangle. If the 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified rectangle is empty, nothing is done. If this rectangle is empty 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is set to the specified rectangle. 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param left The left edge being unioned with this rectangle 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param top The top edge being unioned with this rectangle 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param right The right edge being unioned with this rectangle 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param bottom The bottom edge being unioned with this rectangle 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void union(int left, int top, int right, int bottom) { 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((left < right) && (top < bottom)) { 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((this.left < this.right) && (this.top < this.bottom)) { 523cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.left > left) this.left = left; 524cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.top > top) this.top = top; 525cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.right < right) this.right = right; 526cfef12374c15b11b3c2a1041582be9728152e15dRomain Guy if (this.bottom < bottom) this.bottom = bottom; 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.left = left; 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.top = top; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.right = right; 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this.bottom = bottom; 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Update this Rect to enclose itself and the specified rectangle. If the 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specified rectangle is empty, nothing is done. If this rectangle is empty 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * it is set to the specified rectangle. 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r The rectangle being unioned with this rectangle 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void union(Rect r) { 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project union(r.left, r.top, r.right, r.bottom); 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Update this Rect to enclose itself and the [x,y] coordinate. There is no 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * check to see that this rectangle is non-empty. 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x The x coordinate of the point to add to the rectangle 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y The y coordinate of the point to add to the rectangle 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void union(int x, int y) { 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x < left) { 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = x; 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (x > right) { 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = x; 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (y < top) { 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = y; 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else if (y > bottom) { 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = y; 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Swap top/bottom or left/right if there are flipped (i.e. left > right 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and/or top > bottom). This can be called if 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the edges are computed separately, and may have crossed over each other. 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If the edges are already correct (i.e. left <= right and top <= bottom) 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * then nothing is done. 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void sort() { 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (left > right) { 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int temp = left; 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = right; 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = temp; 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (top > bottom) { 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int temp = top; 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = bottom; 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = temp; 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Parcelable interface methods 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int describeContents() { 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Write this rectangle to the specified parcel. To restore a rectangle from 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a parcel, use readFromParcel() 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param out The parcel to write the rectangle's coordinates into 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void writeToParcel(Parcel out, int flags) { 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(left); 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(top); 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(right); 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project out.writeInt(bottom); 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() { 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return a new rectangle from the data in the specified parcel. 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect createFromParcel(Parcel in) { 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Rect r = new Rect(); 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project r.readFromParcel(in); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return r; 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return an array of rectangles of the specified size. 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rect[] newArray(int size) { 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Rect[size]; 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the rectangle's coordinates from the data stored in the specified 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * parcel. To write a rectangle to a parcel, call writeToParcel(). 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param in The parcel to read the rectangle's coordinates from 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void readFromParcel(Parcel in) { 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project left = in.readInt(); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project top = in.readInt(); 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project right = in.readInt(); 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project bottom = in.readInt(); 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6368169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima 6378169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima /** 6388169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima * Scales up the rect by the given scale. 6398169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima * @hide 6408169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima */ 6418169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima public void scale(float scale) { 6428169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima if (scale != 1.0f) { 64361324e58c549670c015010d0be14c6af76e3e9f7Mitsuru Oshima left = (int) (left * scale + 0.5f); 64461324e58c549670c015010d0be14c6af76e3e9f7Mitsuru Oshima top = (int) (top * scale + 0.5f); 64561324e58c549670c015010d0be14c6af76e3e9f7Mitsuru Oshima right = (int) (right * scale + 0.5f); 64661324e58c549670c015010d0be14c6af76e3e9f7Mitsuru Oshima bottom = (int) (bottom * scale + 0.5f); 6478169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima } 6488169daed2f7a8731d478b884b1f455c747b88478Mitsuru Oshima } 64947cd8e921db73e894f94ec4729ade90da50996f5Chris Craik 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 651