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