summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSzabolcs David <davidsz@inf.u-szeged.hu>2024-07-22 15:41:56 +0200
committerSzabolcs David <davidsz@inf.u-szeged.hu>2024-10-21 12:33:42 +0200
commit0cba9db589d7784af38b395e66cc4fb37bc5e31c (patch)
treef8117e4b80bd9f5bd81b5313b9c5fa016a65b097 /src
parent366f4a18f95891bc306af9412187133f76a1b6a5 (diff)
Add PreferCSSMarginsForPrinting to QWebEngineSettings
Add an option to choose between margins of the specified QPageLayout and the margins of the @media rules of CSS. [ChangeLog] New API added to QWebEngineSettings to optionally prefer CSS margin rules over QPageLayout for printing results. Task-number: QTBUG-58669 Change-Id: Idfec2deca0d326ea9339f67bce937e24ae5128f2 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/core/api/qwebenginesettings.h1
-rw-r--r--src/core/doc/src/qwebenginesettings_lgpl.qdoc3
-rw-r--r--src/core/printing/print_view_manager_qt.cpp36
-rw-r--r--src/core/web_engine_settings.cpp1
-rw-r--r--src/webenginequick/api/qquickwebenginesettings.cpp22
-rw-r--r--src/webenginequick/api/qquickwebenginesettings_p.h4
6 files changed, 54 insertions, 13 deletions
diff --git a/src/core/api/qwebenginesettings.h b/src/core/api/qwebenginesettings.h
index 86592919c..f08ee3e69 100644
--- a/src/core/api/qwebenginesettings.h
+++ b/src/core/api/qwebenginesettings.h
@@ -63,6 +63,7 @@ public:
ReadingFromCanvasEnabled,
ForceDarkMode,
PrintHeaderAndFooter,
+ PreferCSSMarginsForPrinting,
};
enum FontSize {
diff --git a/src/core/doc/src/qwebenginesettings_lgpl.qdoc b/src/core/doc/src/qwebenginesettings_lgpl.qdoc
index b2591a570..6d178d3ee 100644
--- a/src/core/doc/src/qwebenginesettings_lgpl.qdoc
+++ b/src/core/doc/src/qwebenginesettings_lgpl.qdoc
@@ -183,6 +183,9 @@
(URL, title, date, page number) in header and footer area. It is the embedder's responsibility
to provide enough space for these texts by setting proper top and bottom margins.
Disabled by default. (Added in Qt 6.9)
+ \value PreferCSSMarginsForPrinting Turns on preferring CSS margins over the margins
+ of the specified QPageLayout.
+ Disabled by default. (Added in Qt 6.9)
*/
/*!
diff --git a/src/core/printing/print_view_manager_qt.cpp b/src/core/printing/print_view_manager_qt.cpp
index e9db680df..a2bafa741 100644
--- a/src/core/printing/print_view_manager_qt.cpp
+++ b/src/core/printing/print_view_manager_qt.cpp
@@ -114,18 +114,25 @@ static base::Value::Dict createPrintSettings()
return printSettings;
}
-static base::Value::Dict createPrintSettingsFromQPageLayout(const QPageLayout &pageLayout)
+static base::Value::Dict createPrintSettingsFromQPageLayout(const QPageLayout &pageLayout,
+ bool useCSSMargins)
{
base::Value::Dict printSettings = createPrintSettings();
- QMargins pageMarginsInPoints = pageLayout.marginsPoints();
- base::Value::Dict marginsDict;
- marginsDict.Set(printing::kSettingMarginTop, pageMarginsInPoints.top());
- marginsDict.Set(printing::kSettingMarginBottom, pageMarginsInPoints.bottom());
- marginsDict.Set(printing::kSettingMarginLeft, pageMarginsInPoints.left());
- marginsDict.Set(printing::kSettingMarginRight, pageMarginsInPoints.right());
- printSettings.Set(printing::kSettingMarginsCustom, std::move(marginsDict));
- printSettings.Set(printing::kSettingMarginsType, (int)printing::mojom::MarginType::kCustomMargins);
+ if (useCSSMargins) {
+ printSettings.Set(printing::kSettingMarginsType,
+ (int)printing::mojom::MarginType::kDefaultMargins);
+ } else {
+ QMargins pageMarginsInPoints = pageLayout.marginsPoints();
+ base::Value::Dict marginsDict;
+ marginsDict.Set(printing::kSettingMarginTop, pageMarginsInPoints.top());
+ marginsDict.Set(printing::kSettingMarginBottom, pageMarginsInPoints.bottom());
+ marginsDict.Set(printing::kSettingMarginLeft, pageMarginsInPoints.left());
+ marginsDict.Set(printing::kSettingMarginRight, pageMarginsInPoints.right());
+ printSettings.Set(printing::kSettingMarginsCustom, std::move(marginsDict));
+ printSettings.Set(printing::kSettingMarginsType,
+ (int)printing::mojom::MarginType::kCustomMargins);
+ }
printSettings.Set(printing::kSettingLandscape,
pageLayout.orientation() == QPageLayout::Landscape);
@@ -215,14 +222,17 @@ bool PrintViewManagerQt::PrintToPDFInternal(const QPageLayout &pageLayout,
return false;
bool printHeaderAndFooter = false;
+ bool useCSSMargins = false;
content::WebContentsView *view =
static_cast<content::WebContentsImpl *>(web_contents()->GetOutermostWebContents())
->GetView();
- if (WebContentsAdapterClient *client = WebContentsViewQt::from(view)->client())
- printHeaderAndFooter = client->webEngineSettings()->testAttribute(
- QWebEngineSettings::PrintHeaderAndFooter);
+ if (WebContentsAdapterClient *client = WebContentsViewQt::from(view)->client()) {
+ QWebEngineSettings *settings = client->webEngineSettings();
+ printHeaderAndFooter = settings->testAttribute(QWebEngineSettings::PrintHeaderAndFooter);
+ useCSSMargins = settings->testAttribute(QWebEngineSettings::PreferCSSMarginsForPrinting);
+ }
- m_printSettings = createPrintSettingsFromQPageLayout(pageLayout);
+ m_printSettings = createPrintSettingsFromQPageLayout(pageLayout, useCSSMargins);
m_printSettings.Set(printing::kSettingShouldPrintBackgrounds,
web_contents()->GetOrCreateWebPreferences().should_print_backgrounds);
m_printSettings.Set(printing::kSettingColor,
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp
index 678498654..2b71bfa92 100644
--- a/src/core/web_engine_settings.cpp
+++ b/src/core/web_engine_settings.cpp
@@ -301,6 +301,7 @@ void WebEngineSettings::initDefaults()
bool forceDarkMode = commandLine->HasSwitch(switches::kForceDarkMode);
s_defaultAttributes.insert(QWebEngineSettings::ForceDarkMode, forceDarkMode);
s_defaultAttributes.insert(QWebEngineSettings::PrintHeaderAndFooter, false);
+ s_defaultAttributes.insert(QWebEngineSettings::PreferCSSMarginsForPrinting, false);
}
if (s_defaultFontFamilies.isEmpty()) {
diff --git a/src/webenginequick/api/qquickwebenginesettings.cpp b/src/webenginequick/api/qquickwebenginesettings.cpp
index cf5958e41..2d829e220 100644
--- a/src/webenginequick/api/qquickwebenginesettings.cpp
+++ b/src/webenginequick/api/qquickwebenginesettings.cpp
@@ -484,6 +484,20 @@ bool QQuickWebEngineSettings::printHeaderAndFooter() const
}
/*!
+ \qmlproperty bool WebEngineSettings::preferCSSMarginsForPrinting
+ \since QtWebEngine 6.9
+
+ Turns on preferring CSS margins over the default (0, 0, 0, 0) sizes when
+ printing a web page.
+
+ Disabled by default.
+*/
+bool QQuickWebEngineSettings::preferCSSMarginsForPrinting() const
+{
+ return d_ptr->testAttribute(QWebEngineSettings::PreferCSSMarginsForPrinting);
+}
+
+/*!
\qmlproperty bool WebEngineSettings::scrollAnimatorEnabled
\since QtWebEngine 6.8
@@ -831,6 +845,14 @@ void QQuickWebEngineSettings::setPrintHeaderAndFooter(bool on)
Q_EMIT printHeaderAndFooterChanged();
}
+void QQuickWebEngineSettings::setPreferCSSMarginsForPrinting(bool on)
+{
+ bool wasOn = d_ptr->testAttribute(QWebEngineSettings::PreferCSSMarginsForPrinting);
+ d_ptr->setAttribute(QWebEngineSettings::PreferCSSMarginsForPrinting, on);
+ if (wasOn != on)
+ Q_EMIT preferCSSMarginsForPrintingChanged();
+}
+
void QQuickWebEngineSettings::setScrollAnimatorEnabled(bool on)
{
bool wasOn = d_ptr->testAttribute(QWebEngineSettings::ScrollAnimatorEnabled);
diff --git a/src/webenginequick/api/qquickwebenginesettings_p.h b/src/webenginequick/api/qquickwebenginesettings_p.h
index 07a842c0b..5d70e8ff4 100644
--- a/src/webenginequick/api/qquickwebenginesettings_p.h
+++ b/src/webenginequick/api/qquickwebenginesettings_p.h
@@ -62,6 +62,7 @@ class Q_WEBENGINEQUICK_EXPORT QQuickWebEngineSettings : public QObject {
Q_PROPERTY(bool scrollAnimatorEnabled READ scrollAnimatorEnabled WRITE setScrollAnimatorEnabled NOTIFY scrollAnimatorEnabledChanged REVISION(6,8) FINAL)
Q_PROPERTY(ImageAnimationPolicy imageAnimationPolicy READ imageAnimationPolicy WRITE setImageAnimationPolicy NOTIFY imageAnimationPolicyChanged REVISION(6,8) FINAL)
Q_PROPERTY(bool printHeaderAndFooter READ printHeaderAndFooter WRITE setPrintHeaderAndFooter NOTIFY printHeaderAndFooterChanged REVISION(6,9) FINAL)
+ Q_PROPERTY(bool preferCSSMarginsForPrinting READ preferCSSMarginsForPrinting WRITE setPreferCSSMarginsForPrinting NOTIFY preferCSSMarginsForPrintingChanged REVISION(6,9) FINAL)
QML_NAMED_ELEMENT(WebEngineSettings)
QML_ADDED_IN_VERSION(1, 1)
QML_EXTRA_VERSION(2, 0)
@@ -122,6 +123,7 @@ public:
bool scrollAnimatorEnabled() const;
ImageAnimationPolicy imageAnimationPolicy() const;
bool printHeaderAndFooter() const;
+ bool preferCSSMarginsForPrinting() const;
void setAutoLoadImages(bool on);
void setJavascriptEnabled(bool on);
@@ -160,6 +162,7 @@ public:
void setScrollAnimatorEnabled(bool on);
void setImageAnimationPolicy(ImageAnimationPolicy policy);
void setPrintHeaderAndFooter(bool on);
+ void setPreferCSSMarginsForPrinting(bool on);
signals:
void autoLoadImagesChanged();
@@ -199,6 +202,7 @@ signals:
Q_REVISION(6,8) void scrollAnimatorEnabledChanged();
Q_REVISION(6,8) void imageAnimationPolicyChanged();
Q_REVISION(6,9) void printHeaderAndFooterChanged();
+ Q_REVISION(6,9) void preferCSSMarginsForPrintingChanged();
private:
explicit QQuickWebEngineSettings(QQuickWebEngineSettings *parentSettings = nullptr);