From 1c284a9431f98bbefd27a30c3368bbf7366dff3a Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Mon, 10 Feb 2014 13:00:14 -0800 Subject: [PATCH] Add contains point method to Region Change-Id: I553433ff7ac39f14ffca8278960d2abc95b4dd63 --- include/ui/Region.h | 3 +++ libs/ui/Region.cpp | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/include/ui/Region.h b/include/ui/Region.h index d906dbbb0..0d1c68c95 100644 --- a/include/ui/Region.h +++ b/include/ui/Region.h @@ -50,6 +50,9 @@ public: inline Rect getBounds() const { return mStorage[mStorage.size() - 1]; } inline Rect bounds() const { return getBounds(); } + bool contains(const Point& point) const; + bool contains(int x, int y) const; + // the region becomes its bounds Region& makeBoundsSelf(); diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp index e5abcf5c8..7de48a460 100644 --- a/libs/ui/Region.cpp +++ b/libs/ui/Region.cpp @@ -221,6 +221,22 @@ Region& Region::makeBoundsSelf() return *this; } +bool Region::contains(const Point& point) const { + return contains(point.x, point.y); +} + +bool Region::contains(int x, int y) const { + const_iterator cur = begin(); + const_iterator const tail = end(); + while (cur != tail) { + if (y >= cur->top && y < cur->bottom && x >= cur->left && x < cur->right) { + return true; + } + cur++; + } + return false; +} + void Region::clear() { mStorage.clear();