Point.h revision 35801cea5f301c0e1d7a93b15a8f73f98e6b1033
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_UI_POINT 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_UI_POINT 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/TypeHelpers.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Point 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int x; 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int y; 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // we don't provide copy-ctor and operator= on purpose 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // because we want the compiler generated versions 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Default constructor doesn't initialize the Point 3435801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian inline Point() { 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 3635801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian inline Point(int x, int y) : x(x), y(y) { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool operator == (const Point& rhs) const { 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return (x == rhs.x) && (y == rhs.y); 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool operator != (const Point& rhs) const { 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return !operator == (rhs); 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool isOrigin() const { 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return !(x|y); 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // operator < defines an order which allows to use points in sorted 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // vectors. 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool operator < (const Point& rhs) const { 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return y<rhs.y || (y==rhs.y && x<rhs.x); 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline Point& operator - () { 5735801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian x = -x; 5835801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian y = -y; 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline Point& operator += (const Point& rhs) { 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project x += rhs.x; 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project y += rhs.y; 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline Point& operator -= (const Point& rhs) { 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project x -= rhs.x; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project y -= rhs.y; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 7335801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point operator + (const Point& rhs) const { 7435801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point result(x+rhs.x, y+rhs.y); 7535801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian return result; 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 7735801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point operator - (const Point& rhs) const { 7835801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point result(x-rhs.x, y-rhs.y); 7935801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian return result; 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectANDROID_BASIC_TYPES_TRAITS(Point) 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_UI_POINT 88