[vlc-commits] qt: change interface scale on Ctrl+Wheel events
Pierre Lamot
git at videolan.org
Thu Sep 10 16:10:20 CEST 2020
vlc | branch: master | Pierre Lamot <pierre at videolabs.io> | Tue Sep 1 16:31:55 2020 +0200| [37f0ca029f20137cf46e48e69e46a8c3acefe9e6] | committer: Pierre Lamot
qt: change interface scale on Ctrl+Wheel events
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=37f0ca029f20137cf46e48e69e46a8c3acefe9e6
---
modules/gui/qt/maininterface/compositor_dcomp.cpp | 18 ++++++++++--------
.../qt/maininterface/interface_window_handler.cpp | 22 +++++++++++++++++++++-
.../qt/maininterface/interface_window_handler.hpp | 1 +
modules/gui/qt/maininterface/main_interface.cpp | 9 +++++++++
modules/gui/qt/maininterface/main_interface.hpp | 1 +
5 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/modules/gui/qt/maininterface/compositor_dcomp.cpp b/modules/gui/qt/maininterface/compositor_dcomp.cpp
index 51e20f5d81..f459480447 100644
--- a/modules/gui/qt/maininterface/compositor_dcomp.cpp
+++ b/modules/gui/qt/maininterface/compositor_dcomp.cpp
@@ -207,14 +207,6 @@ MainInterface* CompositorDirectComposition::makeMainInterface()
m_videoWindowHandler = std::make_unique<VideoWindowHandler>(m_intf, m_rootWindow);
m_videoWindowHandler->setWindow( m_rootWindow->windowHandle() );
- m_interfaceWindowHandler = new InterfaceWindowHandlerWin32(m_intf, m_rootWindow, m_rootWindow->windowHandle(), m_rootWindow);
-
- m_qmlVideoSurfaceProvider = std::make_unique<VideoSurfaceProvider>();
- m_rootWindow->setVideoSurfaceProvider(m_qmlVideoSurfaceProvider.get());
-
- connect(m_qmlVideoSurfaceProvider.get(), &VideoSurfaceProvider::hasVideoChanged,
- m_interfaceWindowHandler, &InterfaceWindowHandlerWin32::onVideoEmbedChanged);
-
HR(m_dcompDevice->CreateTargetForHwnd((HWND)m_rootWindow->windowHandle()->winId(), TRUE, &m_dcompTarget), "create target");
HR(m_dcompDevice->CreateVisual(&m_rootVisual), "create root visual");
@@ -232,6 +224,16 @@ MainInterface* CompositorDirectComposition::makeMainInterface()
return nullptr;
}
+ //install the interface window handler after the creation of CompositorDCompositionUISurface
+ //so the event filter is handled before the one of the UISurface (for wheel events)
+ m_interfaceWindowHandler = new InterfaceWindowHandlerWin32(m_intf, m_rootWindow, m_rootWindow->window()->windowHandle(), m_rootWindow);
+
+ m_qmlVideoSurfaceProvider = std::make_unique<VideoSurfaceProvider>();
+ m_rootWindow->setVideoSurfaceProvider(m_qmlVideoSurfaceProvider.get());
+
+ connect(m_qmlVideoSurfaceProvider.get(), &VideoSurfaceProvider::hasVideoChanged,
+ m_interfaceWindowHandler, &InterfaceWindowHandlerWin32::onVideoEmbedChanged);
+
m_ui = std::make_unique<MainUI>(m_intf, m_rootWindow);
ret = m_ui->setup(m_uiSurface->engine());
if (! ret)
diff --git a/modules/gui/qt/maininterface/interface_window_handler.cpp b/modules/gui/qt/maininterface/interface_window_handler.cpp
index e7bbbc86c3..084d0b3a45 100644
--- a/modules/gui/qt/maininterface/interface_window_handler.cpp
+++ b/modules/gui/qt/maininterface/interface_window_handler.cpp
@@ -72,6 +72,9 @@ InterfaceWindowHandler::InterfaceWindowHandler(intf_thread_t *_p_intf, MainInter
connect( m_mainInterface, &MainInterface::setInterfaceVisibible,
this, &InterfaceWindowHandler::setInterfaceVisible);
+ connect(this, &InterfaceWindowHandler::incrementIntfUserScaleFactor,
+ m_mainInterface, &MainInterface::incrementIntfUserScaleFactor);
+
m_window->installEventFilter(this);
}
@@ -84,7 +87,9 @@ InterfaceWindowHandler::~InterfaceWindowHandler()
bool InterfaceWindowHandler::eventFilter(QObject*, QEvent* event)
{
- if( event->type() == QEvent::WindowStateChange )
+ switch ( event->type() )
+ {
+ case QEvent::WindowStateChange:
{
QWindowStateChangeEvent *windowStateChangeEvent = static_cast<QWindowStateChangeEvent*>(event);
Qt::WindowStates newState = m_window->windowStates();
@@ -130,6 +135,21 @@ bool InterfaceWindowHandler::eventFilter(QObject*, QEvent* event)
THEMPL->play();
}
}
+ break;
+ }
+ case QEvent::Wheel:
+ {
+ QWheelEvent* wheelEvent = static_cast<QWheelEvent*>(event);
+ if (wheelEvent->modifiers() == Qt::ControlModifier)
+ {
+ emit incrementIntfUserScaleFactor(wheelEvent->delta() > 0);
+ wheelEvent->accept();
+ return true;
+ }
+ break;
+ }
+ default:
+ break;
}
return false;
diff --git a/modules/gui/qt/maininterface/interface_window_handler.hpp b/modules/gui/qt/maininterface/interface_window_handler.hpp
index dcb2f43680..e3f0a0255a 100644
--- a/modules/gui/qt/maininterface/interface_window_handler.hpp
+++ b/modules/gui/qt/maininterface/interface_window_handler.hpp
@@ -52,6 +52,7 @@ signals:
void fullscreenInterfaceToggled( bool );
void interfaceAlwaysOnTopChanged(bool);
void interfaceFullScreenChanged(bool);
+ void incrementIntfUserScaleFactor(bool increment);
protected:
intf_thread_t* p_intf = nullptr;
diff --git a/modules/gui/qt/maininterface/main_interface.cpp b/modules/gui/qt/maininterface/main_interface.cpp
index 6850dd0882..4c714bf559 100644
--- a/modules/gui/qt/maininterface/main_interface.cpp
+++ b/modules/gui/qt/maininterface/main_interface.cpp
@@ -304,6 +304,15 @@ void MainInterface::updateIntfScaleFactor()
emit intfScaleFactorChanged();
}
+void MainInterface::incrementIntfUserScaleFactor(bool increment)
+{
+ if (increment)
+ m_intfUserScaleFactor = std::min(m_intfUserScaleFactor + 0.1, 3.0);
+ else
+ m_intfUserScaleFactor = std::max(m_intfUserScaleFactor - 0.1, 0.3);
+ updateIntfScaleFactor();
+}
+
inline void MainInterface::initSystray()
{
bool b_systrayAvailable = QSystemTrayIcon::isSystemTrayAvailable();
diff --git a/modules/gui/qt/maininterface/main_interface.hpp b/modules/gui/qt/maininterface/main_interface.hpp
index b60b0c9014..5739af44ee 100644
--- a/modules/gui/qt/maininterface/main_interface.hpp
+++ b/modules/gui/qt/maininterface/main_interface.hpp
@@ -261,6 +261,7 @@ public slots:
void setPlaylistWidthFactor( double );
void setInterfaceAlwaysOnTop( bool );
void setShowRemainingTime( bool );
+ void incrementIntfUserScaleFactor( bool increment);
void emitBoss();
void emitRaise();
More information about the vlc-commits
mailing list