diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/api/qwebenginesettings.h | 1 | ||||
| -rw-r--r-- | src/core/doc/src/qwebenginesettings_lgpl.qdoc | 3 | ||||
| -rw-r--r-- | src/core/printing/print_view_manager_qt.cpp | 36 | ||||
| -rw-r--r-- | src/core/web_engine_settings.cpp | 1 | ||||
| -rw-r--r-- | src/webenginequick/api/qquickwebenginesettings.cpp | 22 | ||||
| -rw-r--r-- | src/webenginequick/api/qquickwebenginesettings_p.h | 4 |
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); |
