From 3aba9afa56ddc30a6a2f50519072b077b67dd8ac Mon Sep 17 00:00:00 2001 From: Szabolcs David Date: Thu, 11 Apr 2019 14:32:56 +0200 Subject: Fix printing of landscape orientation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QPageLayout::pageSize() is always defined in portrait orientation. Removing margins without considering the actual orientation was incorrent. Use QPageLayout::paintRect() instead. Task-number: QTBUG-75092 Change-Id: I34c19d3f0587ae21da2d985e3107b6ec673f53d0 Reviewed-by: Michael BrĂ¼ning --- src/core/printing/print_view_manager_qt.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/core/printing/print_view_manager_qt.cpp b/src/core/printing/print_view_manager_qt.cpp index ff9fc76be..65c059d88 100644 --- a/src/core/printing/print_view_manager_qt.cpp +++ b/src/core/printing/print_view_manager_qt.cpp @@ -158,21 +158,12 @@ static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayo bool useCustomMargins) { base::DictionaryValue *printSettings = createPrintSettings(); - - //Set page size attributes, chromium expects these in micrometers - QRectF pageSizeInMillimeter = pageLayout.pageSize().rect(QPageSize::Millimeter); - if (!useCustomMargins) { - // QPrinter will extend this size with its margins - QMarginsF margins = pageLayout.margins(QPageLayout::Millimeter); - pageSizeInMillimeter = pageSizeInMillimeter.marginsRemoved(margins); - } - std::unique_ptr sizeDict(new base::DictionaryValue); - sizeDict->SetInteger(printing::kSettingMediaSizeWidthMicrons, pageSizeInMillimeter.width() * kMicronsToMillimeter); - sizeDict->SetInteger(printing::kSettingMediaSizeHeightMicrons, pageSizeInMillimeter.height() * kMicronsToMillimeter); - printSettings->Set(printing::kSettingMediaSize, std::move(sizeDict)); + QRectF pageSizeInMillimeter; if (useCustomMargins) { // Apply page margins when printing to PDF + pageSizeInMillimeter = pageLayout.pageSize().rect(QPageSize::Millimeter); + QMargins pageMarginsInPoints = pageLayout.marginsPoints(); std::unique_ptr marginsDict(new base::DictionaryValue); marginsDict->SetInteger(printing::kSettingMarginTop, pageMarginsInPoints.top()); @@ -182,12 +173,23 @@ static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayo printSettings->Set(printing::kSettingMarginsCustom, std::move(marginsDict)); printSettings->SetInteger(printing::kSettingMarginsType, printing::CUSTOM_MARGINS); + + // pageSizeInMillimeter is in portrait orientation. Transpose it if necessary. + printSettings->SetBoolean(printing::kSettingLandscape, pageLayout.orientation() == QPageLayout::Landscape); } else { // QPrinter will handle margins + pageSizeInMillimeter = pageLayout.paintRect(QPageLayout::Millimeter); printSettings->SetInteger(printing::kSettingMarginsType, printing::NO_MARGINS); + + // pageSizeInMillimeter already contains the orientation. + printSettings->SetBoolean(printing::kSettingLandscape, false); } - printSettings->SetBoolean(printing::kSettingLandscape, pageLayout.orientation() == QPageLayout::Landscape); + //Set page size attributes, chromium expects these in micrometers + std::unique_ptr sizeDict(new base::DictionaryValue); + sizeDict->SetInteger(printing::kSettingMediaSizeWidthMicrons, pageSizeInMillimeter.width() * kMicronsToMillimeter); + sizeDict->SetInteger(printing::kSettingMediaSizeHeightMicrons, pageSizeInMillimeter.height() * kMicronsToMillimeter); + printSettings->Set(printing::kSettingMediaSize, std::move(sizeDict)); return printSettings; } -- cgit v1.2.3