add helpers for isTranslate and isScaleTranslate
special-case determinant for isScaleTranslate



git-svn-id: http://skia.googlecode.com/svn/trunk@6725 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/utils/SkMatrix44.cpp b/src/utils/SkMatrix44.cpp
index 1c9fd84..f76f405 100644
--- a/src/utils/SkMatrix44.cpp
+++ b/src/utils/SkMatrix44.cpp
@@ -411,6 +411,13 @@
     promoting our SkMScalar values to double (if needed).
  */
 double SkMatrix44::determinant() const {
+    if (this->isIdentity()) {
+        return 1;
+    }
+    if (this->isScaleTranslate()) {
+        return fMat[0][0] * fMat[1][1] * fMat[2][2] * fMat[3][3];
+    }
+
     return  fMat[0][0] * det3x3(fMat[1][1], fMat[1][2], fMat[1][3],
                                 fMat[2][1], fMat[2][2], fMat[2][3],
                                 fMat[3][1], fMat[3][2], fMat[3][3]) -
@@ -438,23 +445,19 @@
 }
 
 bool SkMatrix44::invert(SkMatrix44* inverse) const {
-    const SkMatrix44::TypeMask mask = this->getType();
-
-    if (kIdentity_Mask == mask) {
+    if (this->isIdentity()) {
         if (inverse) {
             *inverse = *this;
             return true;
         }
     }
-
-    if (kTranslate_Mask == mask) {
+    if (this->isTranslate()) {
         if (inverse) {
             inverse->setTranslate(-fMat[3][0], -fMat[3][1], -fMat[3][2]);
         }
         return true;
     }
-
-    if (bits_isonly(mask, kScale_Mask | kTranslate_Mask)) {
+    if (this->isScaleTranslate()) {
         if (0 == fMat[0][0] * fMat[1][1] * fMat[2][2]) {
             return false;
         }
@@ -470,7 +473,7 @@
             inverse->fMat[2][2] = 1 / fMat[2][2];
             inverse->fMat[3][3] = 1;
 
-            inverse->setTypeMask(mask);
+            inverse->setTypeMask(this->getType());
         }
         return true;
     }