diff --git a/src/librssguard/gui/webviewer.cpp b/src/librssguard/gui/webviewer.cpp index ac5210d3d..ef76e1e74 100644 --- a/src/librssguard/gui/webviewer.cpp +++ b/src/librssguard/gui/webviewer.cpp @@ -13,6 +13,7 @@ #include "network-web/webfactory.h" #include "network-web/webpage.h" +#include #include #include @@ -21,20 +22,28 @@ WebViewer::WebViewer(QWidget* parent) : QWebEngineView(parent), m_root(nullptr) connect(page, &WebPage::messageStatusChangeRequested, this, &WebViewer::messageStatusChangeRequested); setPage(page); - - const QList children = findChildren(); - - for (QWidget* child : children) { - child->installEventFilter(this); - } + resetWebPageZoom(); } bool WebViewer::canIncreaseZoom() { - return zoomFactor() <= MAX_ZOOM_FACTOR - ZOOM_FACTOR_STEP; + return zoomFactor() <= double(MAX_ZOOM_FACTOR) - double(ZOOM_FACTOR_STEP); } bool WebViewer::canDecreaseZoom() { - return zoomFactor() >= MIN_ZOOM_FACTOR + ZOOM_FACTOR_STEP; + return zoomFactor() >= double(MIN_ZOOM_FACTOR) + double(ZOOM_FACTOR_STEP); +} + +bool WebViewer::event(QEvent* event) { + if (event->type() == QEvent::Type::ChildAdded) { + QChildEvent* child_ev = static_cast(event); + QWidget* w = qobject_cast(child_ev->child()); + + if (w != nullptr) { + w->installEventFilter(this); + } + } + + return QWebEngineView::event(event); } WebPage* WebViewer::page() const { @@ -47,7 +56,8 @@ void WebViewer::displayMessage() { bool WebViewer::increaseWebPageZoom() { if (canIncreaseZoom()) { - setZoomFactor(zoomFactor() + ZOOM_FACTOR_STEP); + setZoomFactor(zoomFactor() + double(ZOOM_FACTOR_STEP)); + qApp->settings()->setValue(GROUP(Messages), Messages::Zoom, zoomFactor()); return true; } else { @@ -57,7 +67,8 @@ bool WebViewer::increaseWebPageZoom() { bool WebViewer::decreaseWebPageZoom() { if (canDecreaseZoom()) { - setZoomFactor(zoomFactor() - ZOOM_FACTOR_STEP); + setZoomFactor(zoomFactor() - double(ZOOM_FACTOR_STEP)); + qApp->settings()->setValue(GROUP(Messages), Messages::Zoom, zoomFactor()); return true; } else { @@ -66,7 +77,8 @@ bool WebViewer::decreaseWebPageZoom() { } bool WebViewer::resetWebPageZoom() { - const qreal new_factor = 1.0; + const qreal new_factor = qApp->settings()->value(GROUP(Messages), + SETTING(Messages::Zoom)).toReal(); if (new_factor != zoomFactor()) { setZoomFactor(new_factor); @@ -178,19 +190,38 @@ QWebEngineView* WebViewer::createWindow(QWebEnginePage::WebWindowType type) { 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(); - } - } } bool WebViewer::eventFilter(QObject* object, QEvent* event) { + Q_UNUSED(object) + if (event->type() == QEvent::Type::Wheel) { - return true; + QWheelEvent* wh_event = static_cast(event); + + if ((wh_event->modifiers() & Qt::KeyboardModifier::ControlModifier) > 0) { + if (wh_event->delta() > 0) { + increaseWebPageZoom(); + return true; + } + else if (wh_event->delta() < 0) { + decreaseWebPageZoom(); + return true; + } + } + } + else if (event->type() == QEvent::Type::KeyPress) { + QKeyEvent* key_event = static_cast(event); + + if ((key_event->modifiers() & Qt::KeyboardModifier::ControlModifier) > 0) { + if (key_event->key() == Qt::Key::Key_Plus) { + increaseWebPageZoom(); + return true; + } + else if (key_event->key() == Qt::Key::Key_Minus) { + decreaseWebPageZoom(); + return true; + } + } } return false; diff --git a/src/librssguard/gui/webviewer.h b/src/librssguard/gui/webviewer.h index 1bcaa23c7..dd69b88e2 100644 --- a/src/librssguard/gui/webviewer.h +++ b/src/librssguard/gui/webviewer.h @@ -42,6 +42,7 @@ class WebViewer : public QWebEngineView { QWebEngineView* createWindow(QWebEnginePage::WebWindowType type); void wheelEvent(QWheelEvent* event); + bool event(QEvent* event); bool eventFilter(QObject* object, QEvent* event); signals: diff --git a/src/librssguard/miscellaneous/settings.cpp b/src/librssguard/miscellaneous/settings.cpp index 6b9132e38..dd1b01772 100755 --- a/src/librssguard/miscellaneous/settings.cpp +++ b/src/librssguard/miscellaneous/settings.cpp @@ -77,6 +77,10 @@ DKEY Messages::DisplayImagePlaceholders = "display_image_placeholders"; DVALUE(bool) Messages::DisplayImagePlaceholdersDef = false; #endif +DKEY Messages::Zoom = "zoom"; + +DVALUE(qreal) Messages::ZoomDef = double(1.0f); + DKEY Messages::UseCustomDate = "use_custom_date"; DVALUE(bool) Messages::UseCustomDateDef = false; diff --git a/src/librssguard/miscellaneous/settings.h b/src/librssguard/miscellaneous/settings.h index 1165e8595..03fe3f06e 100644 --- a/src/librssguard/miscellaneous/settings.h +++ b/src/librssguard/miscellaneous/settings.h @@ -100,6 +100,10 @@ namespace Messages { VALUE(bool) DisplayImagePlaceholdersDef; #endif + KEY Zoom; + + VALUE(qreal) ZoomDef; + KEY UseCustomDate; VALUE(bool) UseCustomDateDef;