update hovered states

This commit is contained in:
Altair Wei 2021-09-19 21:32:32 +08:00
parent da342753a2
commit 678f903f5c
2 changed files with 44 additions and 0 deletions

View File

@ -57,6 +57,8 @@ void FramelessHelper::install()
m_window->setGeometry(origRect); m_window->setGeometry(origRect);
resizeWindow(origRect.size()); resizeWindow(origRect.size());
m_window->installEventFilter(this);
} }
/*! /*!
@ -67,6 +69,8 @@ void FramelessHelper::uninstall()
m_window->setFlags(m_origWindowFlags); m_window->setFlags(m_origWindowFlags);
m_origWindowFlags = Qt::WindowFlags(); m_origWindowFlags = Qt::WindowFlags();
resizeWindow(QSize()); resizeWindow(QSize());
m_window->removeEventFilter(this);
} }
/*! /*!
@ -222,9 +226,46 @@ void FramelessHelper::updateCursor()
setCursor(cursorForFrameSection(m_hoveredFrameSection)); 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) bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
{ {
if (object == m_window) {
switch (event->type())
{
case QEvent::Resize:
{
QResizeEvent* re = static_cast<QResizeEvent *>(event);
resizeWindow(re->size());
break;
}
case QEvent::NonClientAreaMouseMove:
case QEvent::MouseMove:
{
auto ev = static_cast<QMouseEvent *>(event);
updateMouse(ev->pos());
break;
}
case QEvent::NonClientAreaMouseButtonPress:
case QEvent::MouseButtonPress:
break;
case QEvent::NonClientAreaMouseButtonRelease:
case QEvent::MouseButtonRelease:
break;
default:
break;
}
}
} }
FRAMELESSHELPER_END_NAMESPACE FRAMELESSHELPER_END_NAMESPACE

View File

@ -77,6 +77,9 @@ public:
void unsetCursor(); void unsetCursor();
void updateCursor(); void updateCursor();
void updateMouse(const QPoint& pos);
void updateHoverStates(const QPoint& pos);
protected: protected:
bool eventFilter(QObject *object, QEvent *event) override; bool eventFilter(QObject *object, QEvent *event) override;