diff --git a/src/definitions/definitions.h b/src/definitions/definitions.h
index fe0758b58..c8bf07190 100755
--- a/src/definitions/definitions.h
+++ b/src/definitions/definitions.h
@@ -77,6 +77,11 @@
#define ENCRYPTION_FILE_NAME "key.private"
#define RELOAD_MODEL_BORDER_NUM 10
+#define MAX_ZOOM_FACTOR 5.0f
+#define MIN_ZOOM_FACTOR 0.25f
+#define DEFAULT_ZOOM_FACTOR 1.0f
+#define ZOOM_FACTOR_STEP 0.1f
+
#define INTERNAL_URL_MESSAGE "rssguard.message"
#define INTERNAL_URL_BLANK "rssguard.blank"
#define INTERNAL_URL_MESSAGE_HOST "message"
diff --git a/src/gui/dialogs/formmain.ui b/src/gui/dialogs/formmain.ui
index a4ad89105..3b8db468e 100755
--- a/src/gui/dialogs/formmain.ui
+++ b/src/gui/dialogs/formmain.ui
@@ -708,7 +708,7 @@
- New tab
+ New web browser tab
diff --git a/src/gui/webbrowser.cpp b/src/gui/webbrowser.cpp
index 3d9a322e8..633ddc59a 100755
--- a/src/gui/webbrowser.cpp
+++ b/src/gui/webbrowser.cpp
@@ -104,6 +104,18 @@ void WebBrowser::reloadFontSettings() {
QWebEngineSettings::globalSettings()->setFontSize(QWebEngineSettings::DefaultFontSize, fon.pointSize());
}
+void WebBrowser::increaseZoom() {
+ m_webView->increaseWebPageZoom();
+}
+
+void WebBrowser::decreaseZoom() {
+ m_webView->decreaseWebPageZoom();
+}
+
+void WebBrowser::resetZoom() {
+ m_webView->resetWebPageZoom();
+}
+
void WebBrowser::clear() {
m_webView->clear();
hide();
diff --git a/src/gui/webbrowser.h b/src/gui/webbrowser.h
index 2d7026ea3..c5942851a 100755
--- a/src/gui/webbrowser.h
+++ b/src/gui/webbrowser.h
@@ -53,6 +53,10 @@ class WebBrowser : public TabContent {
void reloadFontSettings();
public slots:
+ void increaseZoom();
+ void decreaseZoom();
+ void resetZoom();
+
void clear();
void loadUrl(const QString &url);
void loadUrl(const QUrl &url);
diff --git a/src/gui/webviewer.cpp b/src/gui/webviewer.cpp
index 7f6da92d8..c20820456 100755
--- a/src/gui/webviewer.cpp
+++ b/src/gui/webviewer.cpp
@@ -22,6 +22,8 @@
#include "definitions/definitions.h"
#include "network-web/webpage.h"
+#include
+
WebViewer::WebViewer(QWidget *parent) : QWebEngineView(parent) {
WebPage *page = new WebPage(this);
@@ -30,10 +32,50 @@ WebViewer::WebViewer(QWidget *parent) : QWebEngineView(parent) {
setPage(page);
}
+bool WebViewer::canIncreaseZoom() {
+ return zoomFactor() <= MAX_ZOOM_FACTOR - ZOOM_FACTOR_STEP;
+}
+
+bool WebViewer::canDecreaseZoom() {
+ return zoomFactor() >= MIN_ZOOM_FACTOR + ZOOM_FACTOR_STEP;
+}
+
void WebViewer::displayMessage() {
setHtml(m_messageContents, QUrl(INTERNAL_URL_MESSAGE));
}
+bool WebViewer::increaseWebPageZoom() {
+ if (canIncreaseZoom()) {
+ setZoomFactor(zoomFactor() + ZOOM_FACTOR_STEP);
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+bool WebViewer::decreaseWebPageZoom() {
+ if (canDecreaseZoom()) {
+ setZoomFactor(zoomFactor() - ZOOM_FACTOR_STEP);
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+bool WebViewer::resetWebPageZoom() {
+ const qreal new_factor = 1.0;
+
+ if (new_factor != zoomFactor()) {
+ setZoomFactor(new_factor);
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
void WebViewer::loadMessages(const QList &messages) {
Skin skin = qApp->skins()->currentSkin();
QString messages_layout;
@@ -75,3 +117,16 @@ void WebViewer::loadMessage(const Message &message) {
void WebViewer::clear() {
setHtml("", QUrl(INTERNAL_URL_BLANK));
}
+
+void WebViewer::wheelEvent(QWheelEvent *event) {
+ QWebEngineView::wheelEvent(event);
+
+ if ((event->modifiers() & Qt::ControlModifier) > 0) {
+ if (event->delta() > 0) {
+ increaseWebPageZoom();
+ }
+ else if (event->delta() < 0) {
+ decreaseWebPageZoom();
+ }
+ }
+}
diff --git a/src/gui/webviewer.h b/src/gui/webviewer.h
index 3e5e02b9b..df9cbbfad 100755
--- a/src/gui/webviewer.h
+++ b/src/gui/webviewer.h
@@ -30,12 +30,23 @@ class WebViewer : public QWebEngineView {
public:
explicit WebViewer(QWidget* parent = 0);
+ bool canIncreaseZoom();
+ bool canDecreaseZoom();
+
public slots:
+ // Page zoom modifiers.
+ bool increaseWebPageZoom();
+ bool decreaseWebPageZoom();
+ bool resetWebPageZoom();
+
void displayMessage();
void loadMessages(const QList &messages);
void loadMessage(const Message &message);
void clear();
+ protected:
+ void wheelEvent(QWheelEvent *event);
+
signals:
void messageStatusChangeRequested(int message_id, WebPage::MessageStatusChange change);