From e0b769eeda4d564178dfc12ebcefbcbbf441bbae Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Fri, 12 Jan 2018 15:02:31 +0100 Subject: Unix: Fix page size margins when changing page size Change-Id: I55435cf500c656eeec61e6c61bbf195df356ffeb Reviewed-by: Michael Weghorn Reviewed-by: Andy Shaw --- src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 13 ++++++++----- src/printsupport/dialogs/qpagesetupdialog_unix_p.h | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) (limited to 'src/printsupport') 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(); - // TODO Set layout margin min/max to printer custom min/max - m_pageLayout.setPageSize(pageSize); + pageSize = m_ui.pageSizeCombo->currentData().value(); } 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; -- cgit v1.2.3