Rex Dieter 79d6043
From 7fc8c560e21e7175b1fe33c988f3f30e4b326efe Mon Sep 17 00:00:00 2001
Rex Dieter 79d6043
From: David Faure <david.faure@kdab.com>
Rex Dieter 79d6043
Date: Mon, 29 Dec 2014 16:37:55 +0100
Rex Dieter 79d6043
Subject: [PATCH 004/248] Fix QPrinter::setPaperSize regression when using
Rex Dieter 79d6043
 QPrinter::DevicePixel
Rex Dieter 79d6043
Rex Dieter 79d6043
The QPageSize-based refactoring led to casting DevicePixel to a QPageSize::Unit
Rex Dieter 79d6043
value of 6 (out of bounds). And then the switch in qt_nameForCustomSize
Rex Dieter 79d6043
would leave the string empty, leading to "QString::arg: Argument missing: , 672"
Rex Dieter 79d6043
warnings.
Rex Dieter 79d6043
Rex Dieter 79d6043
Change-Id: I85e97174cc8ead9beccaaa3ded6edfad80f8e360
Rex Dieter 79d6043
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
Rex Dieter 79d6043
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
Rex Dieter 79d6043
---
Rex Dieter 79d6043
 src/printsupport/kernel/qprinter.cpp                     |  5 ++++-
Rex Dieter 79d6043
 tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp | 12 +++++++++++-
Rex Dieter 79d6043
 2 files changed, 15 insertions(+), 2 deletions(-)
Rex Dieter 79d6043
Rex Dieter 79d6043
diff --git a/src/printsupport/kernel/qprinter.cpp b/src/printsupport/kernel/qprinter.cpp
Rex Dieter 79d6043
index 437a68e..8ed2732 100644
Rex Dieter 79d6043
--- a/src/printsupport/kernel/qprinter.cpp
Rex Dieter 79d6043
+++ b/src/printsupport/kernel/qprinter.cpp
Rex Dieter 79d6043
@@ -1224,7 +1224,10 @@ void QPrinter::setPageSize(PageSize newPageSize)
Rex Dieter 79d6043
 
Rex Dieter 79d6043
 void QPrinter::setPaperSize(const QSizeF &paperSize, QPrinter::Unit unit)
Rex Dieter 79d6043
 {
Rex Dieter 79d6043
-    setPageSize(QPageSize(paperSize, QPageSize::Unit(unit)));
Rex Dieter 79d6043
+    if (unit == QPrinter::DevicePixel)
Rex Dieter 79d6043
+        setPageSize(QPageSize(paperSize * qt_pixelMultiplier(resolution()), QPageSize::Point));
Rex Dieter 79d6043
+    else
Rex Dieter 79d6043
+        setPageSize(QPageSize(paperSize, QPageSize::Unit(unit)));
Rex Dieter 79d6043
 }
Rex Dieter 79d6043
 
Rex Dieter 79d6043
 /*!
Rex Dieter 79d6043
diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
Rex Dieter 79d6043
index 78aa0af..62bd982 100644
Rex Dieter 79d6043
--- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
Rex Dieter 79d6043
+++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
Rex Dieter 79d6043
@@ -526,7 +526,7 @@ void tst_QPrinter::testCustomPageSizes()
Rex Dieter 79d6043
 {
Rex Dieter 79d6043
     QPrinter p;
Rex Dieter 79d6043
 
Rex Dieter 79d6043
-    QSizeF customSize(8.5, 11.0);
Rex Dieter 79d6043
+    QSizeF customSize(7.0, 11.0);
Rex Dieter 79d6043
     p.setPaperSize(customSize, QPrinter::Inch);
Rex Dieter 79d6043
 
Rex Dieter 79d6043
     QSizeF paperSize = p.paperSize(QPrinter::Inch);
Rex Dieter 79d6043
@@ -538,6 +538,16 @@ void tst_QPrinter::testCustomPageSizes()
Rex Dieter 79d6043
     paperSize = p.paperSize(QPrinter::Inch);
Rex Dieter 79d6043
     QCOMPARE(paperSize.width(), customSize.width());
Rex Dieter 79d6043
     QCOMPARE(paperSize.height(), customSize.height());
Rex Dieter 79d6043
+
Rex Dieter 79d6043
+    const QSizeF sizeInPixels = p.paperSize(QPrinter::DevicePixel);
Rex Dieter 79d6043
+    QPrinter p3;
Rex Dieter 79d6043
+    p3.setPaperSize(sizeInPixels, QPrinter::DevicePixel);
Rex Dieter 79d6043
+    paperSize = p3.paperSize(QPrinter::Inch);
Rex Dieter 79d6043
+    QCOMPARE(paperSize.width(), customSize.width());
Rex Dieter 79d6043
+    QCOMPARE(paperSize.height(), customSize.height());
Rex Dieter 79d6043
+    QPageSize pageSize = p3.pageLayout().pageSize();
Rex Dieter 79d6043
+    QCOMPARE(pageSize.key(), QString("Custom.504x792"));
Rex Dieter 79d6043
+    QCOMPARE(pageSize.name(), QString("Custom (504pt x 792pt)"));
Rex Dieter 79d6043
 }
Rex Dieter 79d6043
 
Rex Dieter 79d6043
 void tst_QPrinter::customPaperSizeAndMargins_data()
Rex Dieter 79d6043
-- 
Rex Dieter 79d6043
2.3.7
Rex Dieter 79d6043