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
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<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));
QRectF pageSizeInMillimeter;
if (useCustomMargins) {
// Apply page margins when printing to PDF
pageSizeInMillimeter = pageLayout.pageSize().rect(QPageSize::Millimeter);
QMargins pageMarginsInPoints = pageLayout.marginsPoints();
std::unique_ptr<base::DictionaryValue> 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<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;
}
......
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