summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMichael BrĂ¼ning <michael.bruning@qt.io>2016-10-24 18:28:32 +0200
committerMichael BrĂ¼ning <michael.bruning@qt.io>2016-10-28 11:38:05 +0000
commit96fd274767ff42b00f9201cb742c8ec5d389861e (patch)
treeb2072bc103fae9799a91af852fc1653cb6e9a191 /src
parentee0a912ab4699f3e24563a856177d9b090a022fd (diff)
Apply page margins also for PDF printing (backport from 5.8)
This was left out by oversight. Task-number: QTBUG-56710 Change-Id: Ie23229396eb94b949212324fb50022763935d524 Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/core/print_view_manager_qt.cpp76
1 files changed, 48 insertions, 28 deletions
diff --git a/src/core/print_view_manager_qt.cpp b/src/core/print_view_manager_qt.cpp
index 4cb0e06eb..f657b8289 100644
--- a/src/core/print_view_manager_qt.cpp
+++ b/src/core/print_view_manager_qt.cpp
@@ -101,43 +101,62 @@ static void SavePdfFile(scoped_refptr<base::RefCountedBytes> data,
metafile.SaveTo(&file);
}
-static void applyQPageLayoutSettingsToDictionary(const QPageLayout& pageLayout, base::DictionaryValue& print_settings)
+static base::DictionaryValue *createPrintSettings()
{
+ base::DictionaryValue *printSettings = new base::DictionaryValue();
// TO DO: Check if we can use the request ID from Qt here somehow.
static int internalRequestId = 0;
- print_settings.SetBoolean(printing::kIsFirstRequest, internalRequestId++ == 0);
- print_settings.SetInteger(printing::kPreviewRequestID, internalRequestId);
+ printSettings->SetBoolean(printing::kIsFirstRequest, internalRequestId++ == 0);
+ printSettings->SetInteger(printing::kPreviewRequestID, internalRequestId);
+
+ // The following are standard settings that Chromium expects to be set.
+ printSettings->SetBoolean(printing::kSettingPrintToPDF, true);
+ printSettings->SetBoolean(printing::kSettingCloudPrintDialog, false);
+ printSettings->SetBoolean(printing::kSettingPrintWithPrivet, false);
+ printSettings->SetBoolean(printing::kSettingPrintWithExtension, false);
+
+ printSettings->SetBoolean(printing::kSettingGenerateDraftData, false);
+ printSettings->SetBoolean(printing::kSettingPreviewModifiable, false);
+ printSettings->SetInteger(printing::kSettingDuplexMode, printing::SIMPLEX);
+ printSettings->SetInteger(printing::kSettingCopies, 1);
+ printSettings->SetBoolean(printing::kSettingCollate, false);
+ printSettings->SetBoolean(printing::kSettingGenerateDraftData, false);
+ printSettings->SetBoolean(printing::kSettingPreviewModifiable, false);
+
+ printSettings->SetBoolean(printing::kSettingShouldPrintSelectionOnly, false);
+ printSettings->SetBoolean(printing::kSettingShouldPrintBackgrounds, true);
+ printSettings->SetBoolean(printing::kSettingHeaderFooterEnabled, false);
+ printSettings->SetString(printing::kSettingDeviceName, "");
+ printSettings->SetInteger(printing::kPreviewUIID, 12345678);
+
+ return printSettings;
+}
+
+static base::DictionaryValue *createPrintSettingsFromQPageLayout(const QPageLayout &pageLayout)
+{
+ base::DictionaryValue *printSettings = createPrintSettings();
+
//Set page size attributes, chromium expects these in micrometers
QSizeF pageSizeInMilimeter = pageLayout.pageSize().size(QPageSize::Millimeter);
scoped_ptr<base::DictionaryValue> sizeDict(new base::DictionaryValue);
sizeDict->SetInteger(printing::kSettingMediaSizeWidthMicrons, pageSizeInMilimeter.width() * kMicronsToMillimeter);
sizeDict->SetInteger(printing::kSettingMediaSizeHeightMicrons, pageSizeInMilimeter.height() * kMicronsToMillimeter);
- print_settings.Set(printing::kSettingMediaSize, std::move(sizeDict));
+ printSettings->Set(printing::kSettingMediaSize, std::move(sizeDict));
- print_settings.SetBoolean(printing::kSettingLandscape, pageLayout.orientation() == QPageLayout::Landscape);
+ // Apply page margins
+ QMargins pageMarginsInPoints = pageLayout.marginsPoints();
+ scoped_ptr<base::DictionaryValue> marginsDict(new base::DictionaryValue);
+ marginsDict->SetInteger(printing::kSettingMarginTop, pageMarginsInPoints.top());
+ marginsDict->SetInteger(printing::kSettingMarginBottom, pageMarginsInPoints.bottom());
+ marginsDict->SetInteger(printing::kSettingMarginLeft, pageMarginsInPoints.left());
+ marginsDict->SetInteger(printing::kSettingMarginRight, pageMarginsInPoints.right());
+ printSettings->Set(printing::kSettingMarginsCustom, std::move(marginsDict));
+ printSettings->SetInteger(printing::kSettingMarginsType, printing::CUSTOM_MARGINS);
- // The following are standard settings that Chromium expects to be set.
- print_settings.SetBoolean(printing::kSettingPrintToPDF, true);
- print_settings.SetBoolean(printing::kSettingCloudPrintDialog, false);
- print_settings.SetBoolean(printing::kSettingPrintWithPrivet, false);
- print_settings.SetBoolean(printing::kSettingPrintWithExtension, false);
-
- print_settings.SetBoolean(printing::kSettingGenerateDraftData, false);
- print_settings.SetBoolean(printing::kSettingPreviewModifiable, false);
- print_settings.SetInteger(printing::kSettingColor, printing::COLOR);
- print_settings.SetInteger(printing::kSettingDuplexMode, printing::SIMPLEX);
- print_settings.SetInteger(printing::kSettingDuplexMode, printing::UNKNOWN_DUPLEX_MODE);
- print_settings.SetInteger(printing::kSettingCopies, 1);
- print_settings.SetBoolean(printing::kSettingCollate, false);
- print_settings.SetBoolean(printing::kSettingGenerateDraftData, false);
- print_settings.SetBoolean(printing::kSettingPreviewModifiable, false);
-
- print_settings.SetBoolean(printing::kSettingShouldPrintSelectionOnly, false);
- print_settings.SetBoolean(printing::kSettingShouldPrintBackgrounds, false);
- print_settings.SetBoolean(printing::kSettingHeaderFooterEnabled, false);
- print_settings.SetString(printing::kSettingDeviceName, "");
- print_settings.SetInteger(printing::kPreviewUIID, 12345678);
+ printSettings->SetBoolean(printing::kSettingLandscape, pageLayout.orientation() == QPageLayout::Landscape);
+
+ return printSettings;
}
} // namespace
@@ -191,8 +210,9 @@ bool PrintViewManagerQt::PrintToPDFInternal(const QPageLayout &pageLayout)
{
if (!pageLayout.isValid())
return false;
- m_printSettings.reset(new base::DictionaryValue());
- applyQPageLayoutSettingsToDictionary(pageLayout, *m_printSettings);
+ m_printSettings.reset(createPrintSettingsFromQPageLayout(pageLayout));
+
+ m_printSettings->SetInteger(printing::kSettingColor, printing::COLOR);
return Send(new PrintMsg_InitiatePrintPreview(routing_id(), false));
}