From 678f903f5c3adb5fb7e9e6e16a1f5e927316715b Mon Sep 17 00:00:00 2001 From: Altair Wei Date: Sun, 19 Sep 2021 21:32:32 +0800 Subject: [PATCH] update hovered states --- framelesshelper.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ framelesshelper.h | 3 +++ 2 files changed, 44 insertions(+) diff --git a/framelesshelper.cpp b/framelesshelper.cpp index 34fa01a..4ee1ce8 100644 --- a/framelesshelper.cpp +++ b/framelesshelper.cpp @@ -57,6 +57,8 @@ void FramelessHelper::install() m_window->setGeometry(origRect); resizeWindow(origRect.size()); + + m_window->installEventFilter(this); } /*! @@ -67,6 +69,8 @@ void FramelessHelper::uninstall() m_window->setFlags(m_origWindowFlags); m_origWindowFlags = Qt::WindowFlags(); resizeWindow(QSize()); + + m_window->removeEventFilter(this); } /*! @@ -222,9 +226,46 @@ void FramelessHelper::updateCursor() setCursor(cursorForFrameSection(m_hoveredFrameSection)); } +void FramelessHelper::updateMouse(const QPoint& pos) +{ + updateHoverStates(pos); + updateCursor(); +} + +void FramelessHelper::updateHoverStates(const QPoint& pos) +{ + m_hoveredFrameSection = mapPosToFrameSection(pos); +} + bool FramelessHelper::eventFilter(QObject *object, QEvent *event) { + if (object == m_window) { + switch (event->type()) + { + case QEvent::Resize: + { + QResizeEvent* re = static_cast(event); + resizeWindow(re->size()); + break; + } + case QEvent::NonClientAreaMouseMove: + case QEvent::MouseMove: + { + auto ev = static_cast(event); + updateMouse(ev->pos()); + break; + } + case QEvent::NonClientAreaMouseButtonPress: + case QEvent::MouseButtonPress: + break; + case QEvent::NonClientAreaMouseButtonRelease: + case QEvent::MouseButtonRelease: + break; + default: + break; + } + } } FRAMELESSHELPER_END_NAMESPACE diff --git a/framelesshelper.h b/framelesshelper.h index 12d4bfd..62be8d3 100644 --- a/framelesshelper.h +++ b/framelesshelper.h @@ -77,6 +77,9 @@ public: void unsetCursor(); void updateCursor(); + void updateMouse(const QPoint& pos); + void updateHoverStates(const QPoint& pos); + protected: bool eventFilter(QObject *object, QEvent *event) override;