From 8b91d4709fb83fde3493308dd4bc10b114ce7280 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Wed, 13 Dec 2023 09:39:59 +0100 Subject: [PATCH] avoid cyclical image downscaling in lite mode --- .../qtextbrowser/textbrowserviewer.cpp | 19 ++++++++++++++++--- .../qtextbrowser/textbrowserviewer.h | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp index 6ba9e644d..f4727d625 100644 --- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp +++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp @@ -15,6 +15,7 @@ #include "network-web/networkfactory.h" #include "network-web/webfactory.h" +#include #include #include #include @@ -79,16 +80,28 @@ QVariant TextBrowserViewer::loadOneResource(int type, const QUrl& name) { } int acceptable_width = int(width() * ACCEPTABLE_IMAGE_PERCENTUAL_WIDTH); + int img_width = img.width(); - if (img.width() > acceptable_width) { + if (img_width > acceptable_width) { QElapsedTimer tmr; tmr.start(); img = img.scaledToWidth(acceptable_width, Qt::TransformationMode::SmoothTransformation); - qWarningNN << LOGSEC_GUI << "Picture" << QUOTE_W_SPACE(name) + qWarningNN << LOGSEC_GUI << "Picture" << QUOTE_W_SPACE(name) << "with width" << QUOTE_W_SPACE(img_width) << "is too wide, down-scaling to prevent horizontal scrollbars. Scaling took" << NONQUOTE_W_SPACE(tmr.elapsed()) << "miliseconds."; + + QByteArray save_arr; + QBuffer save_buf(&save_arr, this); + + if (img.save(&save_buf, "PNG", 100)) { + save_buf.close(); + m_loadedResources.insert(resolved_name, save_arr); + } + else { + qWarningNN << LOGSEC_GUI << "Failed to save modified image" << QUOTE_W_SPACE(name) << "to cache."; + } } return img; @@ -465,7 +478,7 @@ void TextBrowserViewer::downloadNextNeededResource() { void TextBrowserViewer::resourceDownloaded(const QUrl& url, QNetworkReply::NetworkError status, int http_code, - QByteArray contents) { + const QByteArray& contents) { Q_UNUSED(http_code) if (status == QNetworkReply::NetworkError::NoError) { diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h index 97e8ac3fe..2b9ad1e02 100644 --- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h +++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.h @@ -78,7 +78,7 @@ class TextBrowserViewer : public QTextBrowser, public WebViewer { void resourceDownloaded(const QUrl& url, QNetworkReply::NetworkError status, int http_code, - QByteArray contents = QByteArray()); + const QByteArray &contents = QByteArray()); signals: void reloadDocument();