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;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.awt.geom.Dimension2D;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.Serializable;
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.apache.harmony.misc.HashCode;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The Dimension represents the size (width and height) of a component. The
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * width and height values can be negative, but in that case the behavior of
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * some methods is unexpected.
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @since Android 1.0
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Dimension extends Dimension2D implements Serializable {
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The Constant serialVersionUID.
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private static final long serialVersionUID = 4723952579491349524L;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The width dimension.
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int width;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The height dimension.
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int height;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new Dimension with the same data as the specified
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Dimension.
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param d
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Dimension to copy the data from when creating the new
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            Dimension object.
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Dimension(Dimension d) {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this(d.width, d.height);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new Dimension with zero width and height.
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Dimension() {
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this(0, 0);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Instantiates a new Dimension with the specified width and height.
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param width
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the width of the new Dimension.
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param height
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the height of the new Dimension.
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Dimension(int width, int height) {
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setSize(width, height);
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the hash code of the Dimension.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the hash code of the Dimension.
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int hashCode() {
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        HashCode hash = new HashCode();
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hash.append(width);
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        hash.append(height);
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return hash.hashCode();
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Compares this Dimension object with the specified object.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param obj
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Object to be compared.
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return true, if the specified Object is a Dimension with the same width
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *         and height data as this Dimension.
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean equals(Object obj) {
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (obj == this) {
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return true;
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (obj instanceof Dimension) {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            Dimension d = (Dimension)obj;
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return (d.width == width && d.height == height);
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the String associated to this Dimension object.
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the String associated to this Dimension object.
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // The output format based on 1.5 release behaviour. It could be
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // obtained in the following way
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // System.out.println(new Dimension().toString())
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return getClass().getName() + "[width=" + width + ",height=" + height + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the size of this Dimension object with the specified width and
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * height.
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param width
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the width of the Dimension.
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param height
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the height of the Dimension.
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSize(int width, int height) {
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.width = width;
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.height = height;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the size of this Dimension object by copying the data from the
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * specified Dimension object.
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param d
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the Dimension that gives the new size values.
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSize(Dimension d) {
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setSize(d.width, d.height);
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the size of this Dimension object with the specified double width
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * and height.
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param width
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the width of the Dimension.
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param height
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            the height of the Dimension.
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.geom.Dimension2D#setSize(double, double)
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setSize(double width, double height) {
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setSize((int)Math.ceil(width), (int)Math.ceil(height));
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the size of the Dimension.
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the size of the Dimension.
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public Dimension getSize() {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return new Dimension(width, height);
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the height of the Dimension.
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the height of the Dimension.
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.geom.Dimension2D#getHeight()
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double getHeight() {
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return height;
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Gets the width of the Dimension.
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the width of the Dimension.
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @see java.awt.geom.Dimension2D#getWidth()
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public double getWidth() {
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return width;
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
202