diff options
Diffstat (limited to 'libs/hwui/Matrix.h')
-rw-r--r-- | libs/hwui/Matrix.h | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/libs/hwui/Matrix.h b/libs/hwui/Matrix.h index f86823d..46a5597 100644 --- a/libs/hwui/Matrix.h +++ b/libs/hwui/Matrix.h @@ -48,6 +48,21 @@ public: kPerspective2 = 15 }; + // NOTE: The flags from kTypeIdentity to kTypePerspective + // must be kept in sync with the type flags found + // in SkMatrix + enum Type { + kTypeIdentity = 0, + kTypeTranslate = 0x1, + kTypeScale = 0x2, + kTypeAffine = 0x4, + kTypePerspective = 0x8, + kTypeRectToRect = 0x10, + kTypeUnknown = 0x20, + }; + + static const int sGeometryMask = 0xf; + Matrix4() { loadIdentity(); } @@ -75,11 +90,14 @@ public: void loadTranslate(float x, float y, float z); void loadScale(float sx, float sy, float sz); void loadSkew(float sx, float sy); + void loadRotate(float angle); void loadRotate(float angle, float x, float y, float z); void loadMultiply(const Matrix4& u, const Matrix4& v); void loadOrtho(float left, float right, float bottom, float top, float near, float far); + uint32_t getType() const; + void multiply(const Matrix4& v) { Matrix4 u; u.loadMultiply(*this, v); @@ -112,10 +130,14 @@ public: multiply(u); } - bool isPureTranslate() const; + /** + * If the matrix is identity or translate and/or scale. + */ bool isSimple() const; + bool isPureTranslate() const; bool isIdentity() const; bool isPerspective() const; + bool rectToRect() const; bool changesBounds() const; @@ -131,8 +153,7 @@ public: void dump() const; private: - bool mSimpleMatrix; - bool mIsIdentity; + mutable uint32_t mType; inline float get(int i, int j) const { return data[i * 4 + j]; @@ -141,6 +162,9 @@ private: inline void set(int i, int j, float v) { data[i * 4 + j] = v; } + + uint32_t getGeometryType() const; + }; // class Matrix4 /////////////////////////////////////////////////////////////////////////////// |