[PDF] Add GM and infrastructure to test drawing shaders with an initial transform.

Review URL: https://codereview.appspot.com/5867047

git-svn-id: http://skia.googlecode.com/svn/trunk@3450 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
index 61095e1..1e63bb6 100644
--- a/gm/gmmain.cpp
+++ b/gm/gmmain.cpp
@@ -264,7 +264,10 @@
     }
 }
 
-static void invokeGM(GM* gm, SkCanvas* canvas) {
+static void invokeGM(GM* gm, SkCanvas* canvas, bool isPDF = false) {
+    if (!isPDF) {
+        canvas->setMatrix(gm->getInitialTransform());
+    }
     installFilter(canvas);
     gm->draw(canvas);
     canvas->setDrawFilter(NULL);
@@ -323,14 +326,26 @@
 
 static void generate_pdf(GM* gm, SkDynamicMemoryWStream& pdf) {
 #ifdef SK_SUPPORT_PDF
-    SkISize size = gm->getISize();
-    SkMatrix identity;
-    identity.reset();
-    SkPDFDevice* dev = new SkPDFDevice(size, size, identity);
+    SkMatrix initialTransform = gm->getInitialTransform();
+    SkISize pageSize = gm->getISize();
+    SkPDFDevice* dev = NULL;
+    if (initialTransform.isIdentity()) {
+        dev = new SkPDFDevice(pageSize, pageSize, initialTransform);
+    } else {
+        SkRect content = SkRect::MakeWH(SkIntToScalar(pageSize.width()),
+                                        SkIntToScalar(pageSize.height()));
+        initialTransform.mapRect(&content);
+        content.intersect(0, 0, SkIntToScalar(pageSize.width()),
+                                SkIntToScalar(pageSize.height()));
+        SkISize contentSize =
+            SkISize::Make(SkScalarRoundToInt(content.width()),
+                          SkScalarRoundToInt(content.height()));
+        dev = new SkPDFDevice(pageSize, contentSize, initialTransform);
+    }
     SkAutoUnref aur(dev);
 
     SkCanvas c(dev);
-    invokeGM(gm, &c);
+    invokeGM(gm, &c, true);
 
     SkPDFDocument doc;
     doc.appendPage(dev);