[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);