Rect.h revision 7ae7ac48aa2b53453c9805075171ecd5bcafd7de
1bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy/* 2bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * Copyright (C) 2010 The Android Open Source Project 3bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * 4bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * you may not use this file except in compliance with the License. 6bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * You may obtain a copy of the License at 7bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * 8bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * 10bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * Unless required by applicable law or agreed to in writing, software 11bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * See the License for the specific language governing permissions and 14bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy * limitations under the License. 15bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy */ 16bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 179d5316e3f56d138504565ff311145ac01621dff4Romain Guy#ifndef ANDROID_UI_RECT_H 189d5316e3f56d138504565ff311145ac01621dff4Romain Guy#define ANDROID_UI_RECT_H 19bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 20bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guynamespace android { 219d5316e3f56d138504565ff311145ac01621dff4Romain Guynamespace uirenderer { 22bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 23bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy/////////////////////////////////////////////////////////////////////////////// 24bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy// Structs 25bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy/////////////////////////////////////////////////////////////////////////////// 26bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 27bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guystruct Rect { 287ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy float left; 297ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy float top; 307ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy float right; 317ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy float bottom; 327ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 337ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy Rect(): 347ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy left(0), 357ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy top(0), 367ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy right(0), 377ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy bottom(0) { 387ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 397ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 407ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy Rect(float left, float top, float right, float bottom): 417ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy left(left), 427ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy top(top), 437ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy right(right), 447ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy bottom(bottom) { 457ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 467ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 477ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy Rect(const Rect& r) { 487ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy set(r); 497ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 507ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 517ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy Rect(Rect& r) { 527ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy set(r); 537ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 547ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 557ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy Rect& operator=(const Rect& r) { 567ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy set(r); 577ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return *this; 587ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 597ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 607ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy Rect& operator=(Rect& r) { 617ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy set(r); 627ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return *this; 637ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 647ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 657ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy friend int operator==(const Rect& a, const Rect& b) { 667ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return !memcmp(&a, &b, sizeof(a)); 677ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 687ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 697ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy friend int operator!=(const Rect& a, const Rect& b) { 707ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return memcmp(&a, &b, sizeof(a)); 717ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 727ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 737ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy bool isEmpty() const { 747ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return left >= right || top >= bottom; 757ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 767ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 777ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy void setEmpty() { 787ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy memset(this, 0, sizeof(*this)); 797ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 807ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 817ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy void set(float left, float top, float right, float bottom) { 827ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->left = left; 837ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->right = right; 847ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->top = top; 857ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->bottom = bottom; 867ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 877ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 887ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy void set(const Rect& r) { 897ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy set(r.left, r.top, r.right, r.bottom); 907ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 917ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 927ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy float getWidth() const { 937ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return right - left; 947ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 957ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 967ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy float getHeight() const { 977ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return bottom - top; 987ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 997ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 1007ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy bool intersects(float left, float top, float right, float bottom) const { 1017ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return left < right && top < bottom && 1027ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->left < this->right && this->top < this->bottom && 1037ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->left < right && left < this->right && 1047ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->top < bottom && top < this->bottom; 1057ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 1067ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 1077ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy bool intersects(const Rect& r) const { 1087ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return intersects(r.left, r.top, r.right, r.bottom); 1097ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 1107ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 1117ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy bool intersect(float left, float top, float right, float bottom) { 1127ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy if (left < right && top < bottom && !this->isEmpty() && 1137ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->left < right && left < this->right && 1147ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy this->top < bottom && top < this->bottom) { 1157ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 1167ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy if (this->left < left) this->left = left; 1177ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy if (this->top < top) this->top = top; 1187ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy if (this->right > right) this->right = right; 1197ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy if (this->bottom > bottom) this->bottom = bottom; 1207ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 1217ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return true; 1227ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 1237ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return false; 1247ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 1257ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 1267ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy bool intersect(const Rect& r) { 1277ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy return intersect(r.left, r.top, r.right, r.bottom); 1287ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 1297ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy 1307ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy void dump() const { 1317ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy LOGD("Rect[l=%f t=%f r=%f b=%f]", left, top, right, bottom); 1327ae7ac48aa2b53453c9805075171ecd5bcafd7deRomain Guy } 133bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 134bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy}; // struct Rect 135bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 1369d5316e3f56d138504565ff311145ac01621dff4Romain Guy}; // namespace uirenderer 137bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy}; // namespace android 138bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy 139bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4Romain Guy#endif // ANDROID_RECT_H 140