summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlbert Astals Cid <albert.astals.cid@kdab.com>2018-01-12 15:02:31 +0100
committerFrederik Gladhorn <frederik.gladhorn@qt.io>2018-01-17 21:36:47 +0000
commite0b769eeda4d564178dfc12ebcefbcbbf441bbae (patch)
treeb9891e4753238b2d8a21b3338dc36f89dad3e9e1
parentf56f47bc64aeb7a2eea28c3734b57197fd4faa28 (diff)
Unix: Fix page size margins when changing page size
Change-Id: I55435cf500c656eeec61e6c61bbf195df356ffeb Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Reviewed-by: Andy Shaw <andy.shaw@qt.io>
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_unix.cpp13
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_unix_p.h1
2 files changed, 9 insertions, 5 deletions
diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
index 13c91742f2..7e32f9aa57 100644
--- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
+++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
@@ -234,6 +234,7 @@ QPageSetupWidget::QPageSetupWidget(QWidget *parent)
: QWidget(parent),
m_pagePreview(nullptr),
m_printer(nullptr),
+ m_printDevice(nullptr),
m_outputFormat(QPrinter::PdfFormat),
m_units(QPageLayout::Point),
m_savedUnits(QPageLayout::Point),
@@ -388,6 +389,7 @@ void QPageSetupWidget::setPrinter(QPrinter *printer, QPrintDevice *printDevice,
QPrinter::OutputFormat outputFormat, const QString &printerName)
{
m_printer = printer;
+ m_printDevice = printDevice;
// Initialize the layout to the current QPrinter layout
m_pageLayout = m_printer->pageLayout();
@@ -551,19 +553,20 @@ void QPageSetupWidget::pageSizeChanged()
if (m_blockSignals)
return;
+ QPageSize pageSize;
if (m_ui.pageSizeCombo->currentIndex() != m_realCustomPageSizeIndex) {
- const QPageSize pageSize = m_ui.pageSizeCombo->currentData().value<QPageSize>();
- // TODO Set layout margin min/max to printer custom min/max
- m_pageLayout.setPageSize(pageSize);
+ pageSize = m_ui.pageSizeCombo->currentData().value<QPageSize>();
} else {
QSizeF customSize;
if (m_pageLayout.orientation() == QPageLayout::Landscape)
customSize = QSizeF(m_ui.pageHeight->value(), m_ui.pageWidth->value());
else
customSize = QSizeF(m_ui.pageWidth->value(), m_ui.pageHeight->value());
- // TODO Set layout margin min/max to printer min/max for page size
- m_pageLayout.setPageSize(QPageSize(customSize, QPageSize::Unit(m_units)));
+ pageSize = QPageSize(customSize, QPageSize::Unit(m_units));
}
+ const QMarginsF printable = m_printDevice ? m_printDevice->printableMargins(pageSize, m_pageLayout.orientation(), m_printer->resolution())
+ : QMarginsF();
+ m_pageLayout.setPageSize(pageSize, qt_convertMargins(printable, QPageLayout::Point, m_pageLayout.units()));
m_pagePreview->setPageLayout(m_pageLayout);
updateWidget();
diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
index 82c22c30e9..bb33a0f587 100644
--- a/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
+++ b/src/printsupport/dialogs/qpagesetupdialog_unix_p.h
@@ -99,6 +99,7 @@ private:
Ui::QPageSetupWidget m_ui;
QPagePreview *m_pagePreview;
QPrinter *m_printer;
+ QPrintDevice *m_printDevice;
QPrinter::OutputFormat m_outputFormat;
QString m_printerName;
QPageLayout m_pageLayout;