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;
+}
+
+