convert matrix <--> matrix44
add glyphrec to bounder



git-svn-id: http://skia.googlecode.com/svn/trunk@516 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/experimental/SkMatrix44.cpp b/experimental/SkMatrix44.cpp
index b2b8c30..841eec2 100644
--- a/experimental/SkMatrix44.cpp
+++ b/experimental/SkMatrix44.cpp
@@ -269,4 +269,42 @@
 #endif
 }
 
+///////////////////////////////////////////////////////////////////////////////
+
+static void initFromMatrix(SkMScalar dst[4][4], const SkMatrix& src) {
+	sk_bzero(dst, 16 * sizeof(SkMScalar));
+    dst[0][0] = src[SkMatrix::kMScaleX];
+    dst[1][0] = src[SkMatrix::kMSkewX];
+    dst[3][0] = src[SkMatrix::kMTransX];
+    dst[0][1] = src[SkMatrix::kMSkewY];
+    dst[1][1] = src[SkMatrix::kMScaleY];
+    dst[3][1] = src[SkMatrix::kMTransY];
+    dst[2][2] = dst[3][3] = 1;
+}
+
+SkMatrix44::SkMatrix44(const SkMatrix& src) {
+    initFromMatrix(fMat, src);
+}
+
+SkMatrix44& SkMatrix44::operator=(const SkMatrix& src) {
+    initFromMatrix(fMat, src);
+    return *this;
+}
+
+SkMatrix44::operator SkMatrix() const {
+    SkMatrix dst;
+    dst.reset();    // setup our perspective correctly for identity
+
+    dst[SkMatrix::kMScaleX]  = SkMScalarToFloat(fMat[0][0]);
+    dst[SkMatrix::kMSkewX]  = SkMScalarToFloat(fMat[1][0]);
+    dst[SkMatrix::kMTransX] = SkMScalarToFloat(fMat[3][0]);
+
+    dst[SkMatrix::kMSkewY]  = SkMScalarToFloat(fMat[0][1]);
+    dst[SkMatrix::kMScaleY] = SkMScalarToFloat(fMat[1][1]);
+    dst[SkMatrix::kMTransY] = SkMScalarToFloat(fMat[3][1]);
+
+    return dst;
+}
+
+