From 6a6fea8ac9ce9270ea136f24be35e77f468942c5 Mon Sep 17 00:00:00 2001 From: Altair Wei Date: Tue, 21 Sep 2021 17:56:43 +0800 Subject: [PATCH] improve resize handler db click behavior --- framelesshelper.cpp | 49 ++++++++++++++++++++++++++++++++++----------- framelesshelper.h | 1 + 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/framelesshelper.cpp b/framelesshelper.cpp index 6d04dbf..99ab882 100644 --- a/framelesshelper.cpp +++ b/framelesshelper.cpp @@ -429,18 +429,7 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event) auto ev = static_cast(event); if (isHoverResizeHandler() && ev->button() == Qt::LeftButton) { // double click resize handler - if (m_clickedFrameSection == Qt::TopSection - || m_clickedFrameSection == Qt::BottomSection) { - QRect screenRect = m_window->screen()->availableGeometry(); - QRect winRect = m_window->geometry(); - m_window->setGeometry(winRect.x(), 0, winRect.width(), screenRect.height()); - } else if (m_clickedFrameSection == Qt::LeftSection - || m_clickedFrameSection == Qt::RightSection) { - QRect screenRect = m_window->screen()->availableGeometry(); - QRect winRect = m_window->geometry(); - m_window->setGeometry(0, winRect.y(), screenRect.width(), winRect.height()); - } - + handleResizeHandlerDblClicked(); } else if (isInTitlebarArea(ev->pos()) && ev->button() == Qt::LeftButton) { Qt::WindowStates states = m_window->windowState(); if (states & Qt::WindowMaximized) @@ -460,6 +449,42 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event) return filterOut; } +void FramelessHelper::handleResizeHandlerDblClicked() +{ + QRect screenRect = m_window->screen()->availableGeometry(); + QRect winRect = m_window->geometry(); + + switch (m_clickedFrameSection) + { + case Qt::TopSection: + m_window->setGeometry(winRect.x(), 0, winRect.width(), winRect.height() + winRect.y()); + break; + case Qt::BottomSection: + m_window->setGeometry(winRect.x(), winRect.y(), winRect.width(), screenRect.height() - winRect.y()); + break; + case Qt::LeftSection: + m_window->setGeometry(0, winRect.y(), winRect.x() + winRect.width(), winRect.height()); + break; + case Qt::RightSection: + m_window->setGeometry(winRect.x(), winRect.y(), screenRect.width() - winRect.x(), winRect.height()); + break; + case Qt::TopLeftSection: + m_window->setGeometry(0, 0, winRect.x() + winRect.width(), winRect.y() + winRect.height()); + break; + case Qt::TopRightSection: + m_window->setGeometry(winRect.x(), 0, screenRect.width() - winRect.x(), winRect.y() + winRect.height()); + break; + case Qt::BottomLeftSection: + m_window->setGeometry(0, winRect.y(), winRect.x() + winRect.width(), screenRect.height() - winRect.y()); + break; + case Qt::BottomRightSection: + m_window->setGeometry(winRect.x(), winRect.y(), screenRect.width() - winRect.x(), screenRect.height() - winRect.y()); + break; + default: + break; + } +} + FRAMELESSHELPER_END_NAMESPACE #endif diff --git a/framelesshelper.h b/framelesshelper.h index 7b61c25..81ff7af 100644 --- a/framelesshelper.h +++ b/framelesshelper.h @@ -93,6 +93,7 @@ public: protected: bool eventFilter(QObject *object, QEvent *event) override; + void handleResizeHandlerDblClicked(); private: QWindow *m_window;