Rect.cpp revision 9147d11a5f1d50496908bb1f49996e3ad23e19cc
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
235801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * Copyright (C) 2009 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
435801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
535801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * you may not use this file except in compliance with the License.
635801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
835801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
935801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian *
1035801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * Unless required by applicable law or agreed to in writing, software
1135801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
1235801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1335801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * See the License for the specific language governing permissions and
1435801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Rect.h>
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
219147d11a5f1d50496908bb1f49996e3ad23e19ccDianne Hackbornstatic inline int32_t min(int32_t a, int32_t b) {
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return (a<b) ? a : b;
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
259147d11a5f1d50496908bb1f49996e3ad23e19ccDianne Hackbornstatic inline int32_t max(int32_t a, int32_t b) {
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return (a>b) ? a : b;
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid Rect::makeInvalid() {
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    left = 0;
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    top = 0;
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    right = -1;
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bottom = -1;
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectbool Rect::operator < (const Rect& rhs) const
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (top<rhs.top) {
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        return true;
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    } else if (top == rhs.top) {
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        if (left < rhs.left) {
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            return true;
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        } else if (left == rhs.left) {
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            if (bottom<rhs.bottom) {
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                return true;
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            } else if (bottom == rhs.bottom) {
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                if (right<rhs.right) {
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                    return true;
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                }
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            }
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        }
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return false;
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
569147d11a5f1d50496908bb1f49996e3ad23e19ccDianne HackbornRect& Rect::offsetTo(int32_t x, int32_t y)
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    right -= left - x;
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bottom -= top - y;
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    left = x;
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    top = y;
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return *this;
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
659147d11a5f1d50496908bb1f49996e3ad23e19ccDianne HackbornRect& Rect::offsetBy(int32_t x, int32_t y)
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    left += x;
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    top  += y;
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    right+= x;
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bottom+=y;
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return *this;
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
7435801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopianconst Rect Rect::operator + (const Point& rhs) const
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
7635801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian    const Rect result(left+rhs.x, top+rhs.y, right+rhs.x, bottom+rhs.y);
7735801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian    return result;
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
8035801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopianconst Rect Rect::operator - (const Point& rhs) const
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
8235801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian    const Rect result(left-rhs.x, top-rhs.y, right-rhs.x, bottom-rhs.y);
8335801cea5f301c0e1d7a93b15a8f73f98e6b1033Mathias Agopian    return result;
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectbool Rect::intersect(const Rect& with, Rect* result) const
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    result->left    = max(left, with.left);
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    result->top     = max(top, with.top);
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    result->right   = min(right, with.right);
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    result->bottom  = min(bottom, with.bottom);
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return !(result->isEmpty());
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
96