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 208683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopian#include <utils/Flattenable.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/TypeHelpers.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 258683fca395d01734ec7946e9f0595ec5d7b754c6Mathias Agopianclass Point : public LightFlattenablePod<Point> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int x; 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int y; 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // we don't provide copy-ctor and operator= on purpose 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // because we want the compiler generated versions 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Default constructor doesn't initialize the Point 3535801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian inline Point() { 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 3735801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian inline Point(int x, int y) : x(x), y(y) { 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool operator == (const Point& rhs) const { 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return (x == rhs.x) && (y == rhs.y); 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool operator != (const Point& rhs) const { 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return !operator == (rhs); 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool isOrigin() const { 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return !(x|y); 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // operator < defines an order which allows to use points in sorted 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // vectors. 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool operator < (const Point& rhs) const { 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return y<rhs.y || (y==rhs.y && x<rhs.x); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline Point& operator - () { 5835801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian x = -x; 5935801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian y = -y; 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline Point& operator += (const Point& rhs) { 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project x += rhs.x; 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project y += rhs.y; 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline Point& operator -= (const Point& rhs) { 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project x -= rhs.x; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project y -= rhs.y; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return *this; 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 7435801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point operator + (const Point& rhs) const { 7535801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point result(x+rhs.x, y+rhs.y); 7635801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian return result; 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 7835801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point operator - (const Point& rhs) const { 7935801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian const Point result(x-rhs.x, y-rhs.y); 8035801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian return result; 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectANDROID_BASIC_TYPES_TRAITS(Point) 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_UI_POINT 89