Only use the user set page margins for custom paper
When the QPrinter is initalized then it will set up page margins based on the default paper size. If the paper size is changed to be a custom one then it should disregard the margins for the default paper size. If the page margins are set explicitly beforehand then it will use these page margins. Change-Id: Ic535c3a80b8b217dbd5eb5f4fb2cbc0ab1354563 Reviewed-by: Titta Heikkala <titta.heikkala@digia.com> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
This commit is contained in:
parent
bf722c1ab3
commit
50ec06da2c
@ -795,13 +795,15 @@ QVariant QMacPrintEngine::property(PrintEnginePropertyKey key) const
|
||||
if (d->hasCustomPageMargins) {
|
||||
margins << d->leftMargin << d->topMargin
|
||||
<< d->rightMargin << d->bottomMargin;
|
||||
} else {
|
||||
} else if (!d->hasCustomPaperSize) {
|
||||
PMPaperMargins paperMargins;
|
||||
PMPaper paper;
|
||||
PMGetPageFormatPaper(d->format(), &paper);
|
||||
PMPaperGetMargins(paper, &paperMargins);
|
||||
margins << paperMargins.left << paperMargins.top
|
||||
<< paperMargins.right << paperMargins.bottom;
|
||||
} else {
|
||||
margins << 0 << 0 << 0 << 0;
|
||||
}
|
||||
ret = margins;
|
||||
break;
|
||||
|
@ -213,6 +213,7 @@ void QPdfPrintEngine::setProperty(PrintEnginePropertyKey key, const QVariant &va
|
||||
d->topMargin = margins.at(1).toReal();
|
||||
d->rightMargin = margins.at(2).toReal();
|
||||
d->bottomMargin = margins.at(3).toReal();
|
||||
d->pageMarginsSet = true;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@ -298,6 +299,9 @@ QVariant QPdfPrintEngine::property(PrintEnginePropertyKey key) const
|
||||
case PPK_PageMargins:
|
||||
{
|
||||
QList<QVariant> margins;
|
||||
if (d->printerPaperSize == QPrinter::Custom && !d->pageMarginsSet)
|
||||
margins << 0 << 0 << 0 << 0;
|
||||
else
|
||||
margins << d->leftMargin << d->topMargin
|
||||
<< d->rightMargin << d->bottomMargin;
|
||||
ret = margins;
|
||||
@ -353,6 +357,7 @@ QPdfPrintEnginePrivate::QPdfPrintEnginePrivate(QPrinter::PrinterMode m)
|
||||
pageOrder(QPrinter::FirstPageFirst),
|
||||
paperSource(QPrinter::Auto),
|
||||
printerPaperSize(QPrinter::A4),
|
||||
pageMarginsSet(false),
|
||||
fd(-1)
|
||||
{
|
||||
resolution = 72;
|
||||
|
@ -151,7 +151,7 @@ private:
|
||||
|
||||
QPrinter::PaperSize printerPaperSize;
|
||||
QSizeF customPaperSize; // in postscript points
|
||||
|
||||
bool pageMarginsSet;
|
||||
int fd;
|
||||
};
|
||||
|
||||
|
@ -1540,6 +1540,9 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
|
||||
case PPK_PageMargins:
|
||||
{
|
||||
QList<QVariant> margins;
|
||||
if (d->has_custom_paper_size && !d->pageMarginsSet) {
|
||||
margins << 0 << 0 << 0 << 0;
|
||||
} else {
|
||||
QRect pageMargins(d->getPageMargins());
|
||||
|
||||
// specified in 1/100 mm
|
||||
@ -1547,6 +1550,7 @@ QVariant QWin32PrintEngine::property(PrintEnginePropertyKey key) const
|
||||
<< (mmToInches(pageMargins.top()/100.0) * 72)
|
||||
<< (mmToInches(pageMargins.width()/100.0) * 72)
|
||||
<< (mmToInches(pageMargins.height()/100.0) * 72);
|
||||
}
|
||||
value = margins;
|
||||
break;
|
||||
}
|
||||
|
@ -109,6 +109,8 @@ private slots:
|
||||
void valuePreservation();
|
||||
void errorReporting();
|
||||
void testCustomPageSizes();
|
||||
void customPaperSizeAndMargins_data();
|
||||
void customPaperSizeAndMargins();
|
||||
#if !defined(QT_NO_COMPLETER) && !defined(QT_NO_FILEDIALOG)
|
||||
void printDialogCompleter();
|
||||
#endif
|
||||
@ -933,6 +935,63 @@ void tst_QPrinter::testCustomPageSizes()
|
||||
QCOMPARE(paperSize, customSize);
|
||||
}
|
||||
|
||||
void tst_QPrinter::customPaperSizeAndMargins_data()
|
||||
{
|
||||
QTest::addColumn<bool>("pdf");
|
||||
QTest::addColumn<bool>("before");
|
||||
QTest::addColumn<qreal>("left");
|
||||
QTest::addColumn<qreal>("top");
|
||||
QTest::addColumn<qreal>("right");
|
||||
QTest::addColumn<qreal>("bottom");
|
||||
|
||||
QTest::newRow("beforeNoPDF") << false << true << qreal(2) << qreal(2) << qreal(2) << qreal(2);
|
||||
QTest::newRow("beforePDF") << true << true << qreal(2) << qreal(2) << qreal(2) << qreal(2);
|
||||
QTest::newRow("afterNoPDF") << false << false << qreal(2) << qreal(2) << qreal(2) << qreal(2);
|
||||
QTest::newRow("afterAfterPDF") << true << false << qreal(2) << qreal(2) << qreal(2) << qreal(2);
|
||||
}
|
||||
|
||||
void tst_QPrinter::customPaperSizeAndMargins()
|
||||
{
|
||||
QFETCH(bool, pdf);
|
||||
QFETCH(bool, before);
|
||||
QFETCH(qreal, left);
|
||||
QFETCH(qreal, top);
|
||||
QFETCH(qreal, right);
|
||||
QFETCH(qreal, bottom);
|
||||
|
||||
qreal tolerance = 0.05;
|
||||
qreal getLeft = 0;
|
||||
qreal getRight = 0;
|
||||
qreal getTop = 0;
|
||||
qreal getBottom = 0;
|
||||
QSizeF customSize(8.5, 11.0);
|
||||
|
||||
QPrinter p;
|
||||
if (pdf)
|
||||
p.setOutputFormat(QPrinter::PdfFormat);
|
||||
if (before)
|
||||
p.setPageMargins(left, top, right, bottom, QPrinter::Millimeter);
|
||||
p.setPaperSize(customSize, QPrinter::Millimeter);
|
||||
p.getPageMargins(&getLeft, &getTop, &getRight, &getBottom, QPrinter::Millimeter);
|
||||
if (before) {
|
||||
QVERIFY(fabs(left - getLeft) < tolerance);
|
||||
QVERIFY(fabs(left - getTop) < tolerance);
|
||||
QVERIFY(fabs(left - getRight) < tolerance);
|
||||
QVERIFY(fabs(left - getBottom) < tolerance);
|
||||
} else {
|
||||
QVERIFY(getLeft == 0);
|
||||
QVERIFY(getTop == 0);
|
||||
QVERIFY(getRight == 0);
|
||||
QVERIFY(getBottom == 0);
|
||||
p.setPageMargins(left, top, right, bottom, QPrinter::Millimeter);
|
||||
p.getPageMargins(&getLeft, &getTop, &getRight, &getBottom, QPrinter::Millimeter);
|
||||
QVERIFY(fabs(left - getLeft) < tolerance);
|
||||
QVERIFY(fabs(left - getTop) < tolerance);
|
||||
QVERIFY(fabs(left - getRight) < tolerance);
|
||||
QVERIFY(fabs(left - getBottom) < tolerance);
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(QT_NO_COMPLETER) && !defined(QT_NO_FILEDIALOG)
|
||||
void tst_QPrinter::printDialogCompleter()
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user