diff options
author | Albert Astals Cid <albert.astals.cid@kdab.com> | 2018-01-12 15:02:31 +0100 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@qt.io> | 2018-01-17 21:36:47 +0000 |
commit | e0b769eeda4d564178dfc12ebcefbcbbf441bbae (patch) | |
tree | b9891e4753238b2d8a21b3338dc36f89dad3e9e1 /src | |
parent | f56f47bc64aeb7a2eea28c3734b57197fd4faa28 (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>
Diffstat (limited to 'src')
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_unix.cpp | 13 | ||||
-rw-r--r-- | src/printsupport/dialogs/qpagesetupdialog_unix_p.h | 1 |
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; |