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);