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