When calling setPageSizeMM then the size needs to be passed as MM

This simplifies the code a bit and ensures that it is respecting what
the relevant function expects the size to be as.

Change-Id: Iec88fab84c27a33d6f1a9e9413ea6beb0a39c68d
Reviewed-by: John Layt <jlayt@kde.org>
bb10
Andy Shaw 2013-09-13 22:39:04 +02:00 committed by The Qt Project
parent ddefc7627d
commit be8999038f
2 changed files with 24 additions and 3 deletions

View File

@ -127,6 +127,28 @@ Q_PRINTSUPPORT_EXPORT double qt_multiplierForUnit(QPrinter::Unit unit, int resol
return 1.0;
}
/// return the QSize from the specified in unit as millimeters
Q_PRINTSUPPORT_EXPORT QSizeF qt_SizeFromUnitToMillimeter(const QSizeF &size, QPrinter::Unit unit, double resolution)
{
switch (unit) {
case QPrinter::Millimeter:
return size;
case QPrinter::Point:
return size * 0.352777778;
case QPrinter::Inch:
return size * 25.4;
case QPrinter::Pica:
return size * 4.23333333334;
case QPrinter::Didot:
return size * 0.377;
case QPrinter::Cicero:
return size * 4.511666667;
case QPrinter::DevicePixel:
return size * (0.352777778 * 72.0 / resolution);
}
return size;
}
// not static: it's needed in qpagesetupdialog_unix.cpp
Q_PRINTSUPPORT_EXPORT QSizeF qt_printerPaperSize(QPrinter::Orientation orientation,
QPrinter::PaperSize paperSize,
@ -983,9 +1005,7 @@ void QPrinter::setPaperSize(const QSizeF &paperSize, QPrinter::Unit unit)
Q_D(QPrinter);
if (d->paintEngine->type() != QPaintEngine::Pdf)
ABORT_IF_ACTIVE("QPrinter::setPaperSize");
const qreal multiplier = qt_multiplierForUnit(unit, resolution());
QSizeF size(paperSize.width() * multiplier * 25.4/72., paperSize.height() * multiplier * 25.4/72.);
setPageSizeMM(size);
setPageSizeMM(qt_SizeFromUnitToMillimeter(paperSize, unit, resolution()));
}
/*!

View File

@ -590,6 +590,7 @@ void tst_QPrinter::setGetPaperSize()
QSizeF size(500, 10);
p.setPaperSize(size, QPrinter::Millimeter);
QCOMPARE(p.paperSize(QPrinter::Millimeter), size);
QCOMPARE(p.pageSizeMM(), size);
QSizeF ptSize = p.paperSize(QPrinter::Point);
//qDebug() << ptSize;
QVERIFY(qAbs(ptSize.width() - size.width() * (72/25.4)) < 1E-4);