diff options
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/ui/Region.cpp | 14 | ||||
| -rw-r--r-- | libs/ui/Transform.cpp | 9 | ||||
| -rw-r--r-- | libs/ui/include/ui/FloatRect.h | 7 | ||||
| -rw-r--r-- | libs/ui/include/ui/Rect.h | 8 | ||||
| -rw-r--r-- | libs/ui/include/ui/Region.h | 18 | ||||
| -rw-r--r-- | libs/ui/include/ui/Transform.h | 8 |
6 files changed, 64 insertions, 0 deletions
diff --git a/libs/ui/Region.cpp b/libs/ui/Region.cpp index 83ebecaa67..bf487c4aec 100644 --- a/libs/ui/Region.cpp +++ b/libs/ui/Region.cpp @@ -280,6 +280,20 @@ bool Region::isTriviallyEqual(const Region& region) const { return begin() == region.begin(); } +bool Region::hasSameRects(const Region& other) const { + size_t thisRectCount = 0; + android::Rect const* thisRects = getArray(&thisRectCount); + size_t otherRectCount = 0; + android::Rect const* otherRects = other.getArray(&otherRectCount); + + if (thisRectCount != otherRectCount) return false; + + for (size_t i = 0; i < thisRectCount; i++) { + if (thisRects[i] != otherRects[i]) return false; + } + return true; +} + // ---------------------------------------------------------------------------- void Region::addRectUnchecked(int l, int t, int r, int b) diff --git a/libs/ui/Transform.cpp b/libs/ui/Transform.cpp index 85abb38f7e..06b6bfe797 100644 --- a/libs/ui/Transform.cpp +++ b/libs/ui/Transform.cpp @@ -49,6 +49,15 @@ bool Transform::absIsOne(float f) { return isZero(fabs(f) - 1.0f); } +bool Transform::operator==(const Transform& other) const { + return mMatrix[0][0] == other.mMatrix[0][0] && mMatrix[0][1] == other.mMatrix[0][1] && + mMatrix[0][2] == other.mMatrix[0][2] && mMatrix[1][0] == other.mMatrix[1][0] && + mMatrix[1][1] == other.mMatrix[1][1] && mMatrix[1][2] == other.mMatrix[1][2] && + mMatrix[2][0] == other.mMatrix[2][0] && mMatrix[2][1] == other.mMatrix[2][1] && + mMatrix[2][2] == other.mMatrix[2][2]; + ; +} + Transform Transform::operator * (const Transform& rhs) const { if (CC_LIKELY(mType == IDENTITY)) diff --git a/libs/ui/include/ui/FloatRect.h b/libs/ui/include/ui/FloatRect.h index 4cd9a0b236..bec2552fde 100644 --- a/libs/ui/include/ui/FloatRect.h +++ b/libs/ui/include/ui/FloatRect.h @@ -16,6 +16,8 @@ #pragma once +#include <ostream> + namespace android { class FloatRect { @@ -52,4 +54,9 @@ inline bool operator==(const FloatRect& a, const FloatRect& b) { return a.left == b.left && a.top == b.top && a.right == b.right && a.bottom == b.bottom; } +static inline void PrintTo(const FloatRect& rect, ::std::ostream* os) { + *os << "FloatRect(" << rect.left << ", " << rect.top << ", " << rect.right << ", " + << rect.bottom << ")"; +} + } // namespace android diff --git a/libs/ui/include/ui/Rect.h b/libs/ui/include/ui/Rect.h index 17688057a9..2f2229e67c 100644 --- a/libs/ui/include/ui/Rect.h +++ b/libs/ui/include/ui/Rect.h @@ -17,6 +17,8 @@ #ifndef ANDROID_UI_RECT #define ANDROID_UI_RECT +#include <ostream> + #include <utils/Flattenable.h> #include <utils/Log.h> #include <utils/TypeHelpers.h> @@ -214,6 +216,12 @@ public: } }; +// Defining PrintTo helps with Google Tests. +static inline void PrintTo(const Rect& rect, ::std::ostream* os) { + *os << "Rect(" << rect.left << ", " << rect.top << ", " << rect.right << ", " << rect.bottom + << ")"; +} + ANDROID_BASIC_TYPES_TRAITS(Rect) }; // namespace android diff --git a/libs/ui/include/ui/Region.h b/libs/ui/include/ui/Region.h index 79642ae032..2db3b10f13 100644 --- a/libs/ui/include/ui/Region.h +++ b/libs/ui/include/ui/Region.h @@ -19,6 +19,7 @@ #include <stdint.h> #include <sys/types.h> +#include <ostream> #include <utils/Vector.h> @@ -119,6 +120,8 @@ public: // returns true if the regions share the same underlying storage bool isTriviallyEqual(const Region& region) const; + // returns true if the regions consist of the same rectangle sequence + bool hasSameRects(const Region& region) const; /* various ways to access the rectangle list */ @@ -213,6 +216,21 @@ Region& Region::operator -= (const Region& rhs) { Region& Region::operator += (const Point& pt) { return translateSelf(pt.x, pt.y); } + +// Defining PrintTo helps with Google Tests. +static inline void PrintTo(const Region& region, ::std::ostream* os) { + Region::const_iterator head = region.begin(); + Region::const_iterator const tail = region.end(); + bool first = true; + while (head != tail) { + *os << (first ? "Region(" : ", "); + PrintTo(*head, os); + head++; + first = false; + } + *os << ")"; +} + // --------------------------------------------------------------------------- }; // namespace android diff --git a/libs/ui/include/ui/Transform.h b/libs/ui/include/ui/Transform.h index fab2d9e2a5..de07684d79 100644 --- a/libs/ui/include/ui/Transform.h +++ b/libs/ui/include/ui/Transform.h @@ -19,6 +19,7 @@ #include <stdint.h> #include <sys/types.h> +#include <ostream> #include <string> #include <hardware/hardware.h> @@ -63,6 +64,7 @@ public: bool preserveRects() const; uint32_t getType() const; uint32_t getOrientation() const; + bool operator==(const Transform& other) const; const vec3& operator [] (size_t i) const; // returns column i float tx() const; @@ -115,6 +117,12 @@ private: mutable uint32_t mType; }; +static inline void PrintTo(const Transform& t, ::std::ostream* os) { + std::string out; + t.dump(out, "ui::Transform"); + *os << out; +} + } // namespace ui } // namespace android |