Cleanup/unify matrix transform for PDF backend.

Review URL: http://codereview.appspot.com/2719041

git-svn-id: http://skia.googlecode.com/svn/trunk@617 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 79f0967..00c05e4 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -76,13 +76,6 @@
       fHeight(height),
       fCurrentColor(0),
       fCurrentTextScaleX(SK_Scalar1) {
-    // Scale and translate to move the origin from the lower left to the upper
-    // left.
-    fCurTransform.setTranslate(0, height);
-    fCurTransform.preScale(1, -1);
-    fActiveTransform.reset();
-    applyTransform(fCurTransform);
-
     fContent.append("q\n");
     fCurTransform.reset();
     fActiveTransform.reset();
@@ -314,8 +307,13 @@
     return mediaBox;
 }
 
-SkString SkPDFDevice::content() {
-    SkString result = fContent;
+SkString SkPDFDevice::content(bool flipOrigin) const {
+    SkString result;
+    // Scale and translate to move the origin from the lower left to the
+    // upper left.
+    if (flipOrigin)
+        result.printf("1 0 0 -1 0 %d cm\n", fHeight);
+    result.append(fContent);
     result.append("Q");
     return result;
 }
@@ -475,19 +473,12 @@
 void SkPDFDevice::applyTransform(const SkMatrix& m) {
     if (m == fActiveTransform)
         return;
-    SkASSERT((m.getType() & SkMatrix::kPerspective_Mask) == 0);
-
-    fContent.appendScalar(m[SkMatrix::kMScaleX]);
-    fContent.append(" ");
-    fContent.appendScalar(m[SkMatrix::kMSkewY]);
-    fContent.append(" ");
-    fContent.appendScalar(m[SkMatrix::kMSkewX]);
-    fContent.append(" ");
-    fContent.appendScalar(m[SkMatrix::kMScaleY]);
-    fContent.append(" ");
-    fContent.appendScalar(m[SkMatrix::kMTransX]);
-    fContent.append(" ");
-    fContent.appendScalar(m[SkMatrix::kMTransY]);
-    fContent.append(" cm\n");
+    SkScalar transform[6];
+    SkAssertResult(m.pdfTransform(transform));
+    for (size_t i = 0; i < SK_ARRAY_COUNT(transform); i++) {
+        fContent.appendScalar(transform[i]);
+        fContent.append(" ");
+    }
+    fContent.append("cm\n");
     fActiveTransform = m;
 }
diff --git a/src/pdf/SkPDFPage.cpp b/src/pdf/SkPDFPage.cpp
index 4183387..c648472 100644
--- a/src/pdf/SkPDFPage.cpp
+++ b/src/pdf/SkPDFPage.cpp
@@ -32,7 +32,7 @@
         insert("Resources", fDevice->getResourceDict().get());
         insert("MediaBox", fDevice->getMediaBox().get());
 
-        fContent = fDevice->content();
+        fContent = fDevice->content(true);
         SkRefPtr<SkMemoryStream> contentStream = new SkMemoryStream(
                 fContent.c_str(), fContent.size());
         contentStream->unref();  // SkRefPtr and new both took a reference.