19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this work for additional information regarding copyright ownership. 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the "License"); you may not use this file except in compliance with 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the License. You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @author Denis M. Kishenko 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @version $Revision$ 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage java.awt.geom; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Rectangle; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.Shape; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Class RectangularShape represents a Shape whose data is (at least 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * partially) described by a rectangular frame. This includes shapes which are 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * obviously rectangular (such as Rectangle2D) as well as shapes like Arc2D 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which are largely determined by the rectangle they fit inside. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic abstract class RectangularShape implements Shape, Cloneable { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Instantiates a new rectangular shape. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected RectangularShape() { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the x coordinate of the upper left corner of the rectangle. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the x coordinate of the upper left corner of the rectangle. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getX(); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the y coordinate of the upper left corner of the rectangle. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the y coordinate of the upper left corner of the rectangle. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getY(); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the width of the rectangle. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the width of the rectangle. 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getWidth(); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the height of the rectangle. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the height of the rectangle. 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract double getHeight(); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Checks if this is an empty rectangle: one with zero as its width or 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * height. 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true, if the width or height is empty. 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract boolean isEmpty(); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the data for the bounding rectangle in terms of double values. 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the upper left corner of the rectangle. 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the upper left corner of the rectangle. 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param w 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the width of the rectangle. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param h 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the height of the rectangle. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public abstract void setFrame(double x, double y, double w, double h); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the minimum x value of the bounding rectangle (the x coordinate of 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the upper left corner of the rectangle). 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the minimum x value of the bounding rectangle. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getMinX() { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getX(); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the minimum y value of the bounding rectangle (the y coordinate of 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the upper left corner of the rectangle). 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the minimum y value of the bounding rectangle. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getMinY() { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getY(); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the maximum x value of the bounding rectangle (the x coordinate of 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the upper left corner of the rectangle plus the rectangle's width). 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the maximum x value of the bounding rectangle. 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getMaxX() { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getX() + getWidth(); 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the maximum y value of the bounding rectangle (the y coordinate of 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the upper left corner of the rectangle plus the rectangle's height). 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the maximum y value of the bounding rectangle. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getMaxY() { 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getY() + getHeight(); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the x coordinate of the center of the rectangle. 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the x coordinate of the center of the rectangle. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getCenterX() { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getX() + getWidth() / 2.0; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Gets the y coordinate of the center of the rectangle. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the y coordinate of the center of the rectangle. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public double getCenterY() { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getY() + getHeight() / 2.0; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Places the rectangle's size and location data in a new Rectangle2D object 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and returns it. 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the bounding rectangle as a new Rectangle2D object. 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle2D getFrame() { 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Rectangle2D.Double(getX(), getY(), getWidth(), getHeight()); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the bounding rectangle in terms of a Point2D which gives its upper 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * left corner and a Dimension2D object giving its width and height. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param loc 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new upper left corner coordinate. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param size 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the new size dimensions. 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFrame(Point2D loc, Dimension2D size) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFrame(loc.getX(), loc.getY(), size.getWidth(), size.getHeight()); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the bounding rectangle to match the data contained in the specified 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Rectangle2D. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param r 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the rectangle that gives the new frame data. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFrame(Rectangle2D r) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFrame(r.getX(), r.getY(), r.getWidth(), r.getHeight()); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the framing rectangle given two opposite corners. Any two corners 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may be used in any order as long as they are diagonally opposite one 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another. 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x1 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of one of the corner points. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y1 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of one of the corner points. 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param x2 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the other corner point. 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param y2 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the other corner point. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFrameFromDiagonal(double x1, double y1, double x2, double y2) { 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double rx, ry, rw, rh; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (x1 < x2) { 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rx = x1; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rw = x2 - x1; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rx = x2; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rw = x1 - x2; 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (y1 < y2) { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ry = y1; 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rh = y2 - y1; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ry = y2; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project rh = y1 - y2; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFrame(rx, ry, rw, rh); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the framing rectangle given two opposite corners. Any two corners 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * may be used in any order as long as they are diagonally opposite one 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * another. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p1 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * one of the corner points. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param p2 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the other corner point. 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFrameFromDiagonal(Point2D p1, Point2D p2) { 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFrameFromDiagonal(p1.getX(), p1.getY(), p2.getX(), p2.getY()); 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the framing rectangle given the center point and one corner. Any 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * corner may be used. 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param centerX 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of the center point. 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param centerY 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of the center point. 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cornerX 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the x coordinate of one of the corner points. 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cornerY 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the y coordinate of one of the corner points. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFrameFromCenter(double centerX, double centerY, double cornerX, double cornerY) { 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double width = Math.abs(cornerX - centerX); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project double height = Math.abs(cornerY - centerY); 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFrame(centerX - width, centerY - height, width * 2.0, height * 2.0); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets the framing rectangle given the center point and one corner. Any 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * corner may be used. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param center 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the center point. 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param corner 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * a corner point. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setFrameFromCenter(Point2D center, Point2D corner) { 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFrameFromCenter(center.getX(), center.getY(), corner.getX(), corner.getY()); 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(Point2D point) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return contains(point.getX(), point.getY()); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean intersects(Rectangle2D rect) { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return intersects(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight()); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean contains(Rectangle2D rect) { 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return contains(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight()); 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Rectangle getBounds() { 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int x1 = (int)Math.floor(getMinX()); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int y1 = (int)Math.floor(getMinY()); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int x2 = (int)Math.ceil(getMaxX()); 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int y2 = (int)Math.ceil(getMaxY()); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new Rectangle(x1, y1, x2 - x1, y2 - y1); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PathIterator getPathIterator(AffineTransform t, double flatness) { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new FlatteningPathIterator(getPathIterator(t), flatness); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public Object clone() { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return super.clone(); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (CloneNotSupportedException e) { 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new InternalError(); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 298