Commit 3aba9afa authored by Szabolcs David's avatar Szabolcs David Committed by Allan Sandfeld Jensen
Browse files

Fix printing of landscape orientation


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: default avatarMichael Brüning <michael.bruning@qt.io>
Showing with 15 additions and 13 deletions
...@@ -158,21 +158,12 @@ static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayo ...@@ -158,21 +158,12 @@ static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayo
bool useCustomMargins) bool useCustomMargins)
{ {
base::DictionaryValue *printSettings = createPrintSettings(); base::DictionaryValue *printSettings = createPrintSettings();
QRectF pageSizeInMillimeter;
//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<base::DictionaryValue> 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));
if (useCustomMargins) { if (useCustomMargins) {
// Apply page margins when printing to PDF // Apply page margins when printing to PDF
pageSizeInMillimeter = pageLayout.pageSize().rect(QPageSize::Millimeter);
QMargins pageMarginsInPoints = pageLayout.marginsPoints(); QMargins pageMarginsInPoints = pageLayout.marginsPoints();
std::unique_ptr<base::DictionaryValue> marginsDict(new base::DictionaryValue); std::unique_ptr<base::DictionaryValue> marginsDict(new base::DictionaryValue);
marginsDict->SetInteger(printing::kSettingMarginTop, pageMarginsInPoints.top()); marginsDict->SetInteger(printing::kSettingMarginTop, pageMarginsInPoints.top());
...@@ -182,12 +173,23 @@ static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayo ...@@ -182,12 +173,23 @@ static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayo
printSettings->Set(printing::kSettingMarginsCustom, std::move(marginsDict)); printSettings->Set(printing::kSettingMarginsCustom, std::move(marginsDict));
printSettings->SetInteger(printing::kSettingMarginsType, printing::CUSTOM_MARGINS); 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 { } else {
// QPrinter will handle margins // QPrinter will handle margins
pageSizeInMillimeter = pageLayout.paintRect(QPageLayout::Millimeter);
printSettings->SetInteger(printing::kSettingMarginsType, printing::NO_MARGINS); 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<base::DictionaryValue> 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; return printSettings;
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment