Size.java revision b3a78b2ca9655396e2d73950221d187b7e5bb3ba
1b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin/* 2b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Copyright (C) 2013 The Android Open Source Project 3b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * 4b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * you may not use this file except in compliance with the License. 6b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * You may obtain a copy of the License at 7b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * 8b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * 10b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * See the License for the specific language governing permissions and 14b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * limitations under the License. 15b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 16b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 17b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkinpackage android.util; 18b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 19b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin/** 20b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Immutable class for describing width and height dimensions in pixels. 21b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 22b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkinpublic final class Size { 23b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin /** 24b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Create a new immutable Size instance. 25b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * 26b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * @param width The width of the size, in pixels 27b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * @param height The height of the size, in pixels 28b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 29b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin public Size(int width, int height) { 30b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin mWidth = width; 31b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin mHeight = height; 32b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 33b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 34b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin /** 35b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Get the width of the size (in pixels). 36b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * @return width 37b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 38b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin public int getWidth() { 39b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return mWidth; 40b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 41b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 42b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin /** 43b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Get the height of the size (in pixels). 44b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * @return height 45b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 46b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin public int getHeight() { 47b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return mHeight; 48b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 49b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 50b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin /** 51b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Check if this size is equal to another size. 52b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * <p> 53b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Two sizes are equal if and only if both their widths and heights are 54b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * equal. 55b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * </p> 56b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * <p> 57b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * A size object is never equal to any other type of object. 58b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * </p> 59b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * 60b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * @return {@code true} if the objects were equal, {@code false} otherwise 61b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 62b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin @Override 63b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin public boolean equals(final Object obj) { 64b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin if (obj == null) { 65b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return false; 66b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 67b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin if (this == obj) { 68b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return true; 69b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 70b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin if (obj instanceof Size) { 71b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin Size other = (Size) obj; 72b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return mWidth == other.mWidth && mHeight == other.mHeight; 73b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 74b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return false; 75b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 76b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 77b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin /** 78b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * Return the size represented as a string with the format {@code "WxH"} 79b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * 80b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * @return string representation of the size 81b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 82b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin @Override 83b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin public String toString() { 84b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return mWidth + "x" + mHeight; 85b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 86b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 87b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin /** 88b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin * {@inheritDoc} 89b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin */ 90b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin @Override 91b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin public int hashCode() { 92b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin // assuming most sizes are <2^16, doing a rotate will give us perfect hashing 93b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin return mHeight ^ ((mWidth << (Integer.SIZE / 2)) | (mWidth >>> (Integer.SIZE / 2))); 94b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin } 95b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin 96b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin private final int mWidth; 97b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin private final int mHeight; 98b3a78b2ca9655396e2d73950221d187b7e5bb3baIgor Murashkin}; 99