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;
d->topMargin = margins.at(1).toReal();
d->rightMargin = margins.at(2).toReal();
d->bottomMargin = margins.at(3).toReal();
+ d->pageMarginsSet = true;
break;
}
default:
case PPK_PageMargins:
{
QList<QVariant> margins;
- margins << d->leftMargin << d->topMargin
- << d->rightMargin << d->bottomMargin;
+ if (d->printerPaperSize == QPrinter::Custom && !d->pageMarginsSet)
+ margins << 0 << 0 << 0 << 0;
+ else
+ margins << d->leftMargin << d->topMargin
+ << d->rightMargin << d->bottomMargin;
ret = margins;
break;
}
pageOrder(QPrinter::FirstPageFirst),
paperSource(QPrinter::Auto),
printerPaperSize(QPrinter::A4),
+ pageMarginsSet(false),
fd(-1)
{
resolution = 72;
case PPK_PageMargins:
{
QList<QVariant> margins;
- QRect pageMargins(d->getPageMargins());
+ if (d->has_custom_paper_size && !d->pageMarginsSet) {
+ margins << 0 << 0 << 0 << 0;
+ } else {
+ QRect pageMargins(d->getPageMargins());
- // specified in 1/100 mm
- margins << (mmToInches(pageMargins.left()/100.0) * 72)
- << (mmToInches(pageMargins.top()/100.0) * 72)
- << (mmToInches(pageMargins.width()/100.0) * 72)
- << (mmToInches(pageMargins.height()/100.0) * 72);
+ // specified in 1/100 mm
+ margins << (mmToInches(pageMargins.left()/100.0) * 72)
+ << (mmToInches(pageMargins.top()/100.0) * 72)
+ << (mmToInches(pageMargins.width()/100.0) * 72)
+ << (mmToInches(pageMargins.height()/100.0) * 72);
+ }
value = margins;
break;
}
void valuePreservation();
void errorReporting();
void testCustomPageSizes();
+ void customPaperSizeAndMargins_data();
+ void customPaperSizeAndMargins();
#if !defined(QT_NO_COMPLETER) && !defined(QT_NO_FILEDIALOG)
void printDialogCompleter();
#endif
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()
{