forked from github_mirror/framelesshelper
Minor tweaks.
Signed-off-by: Yuhang Zhao <2546789017@qq.com>
This commit is contained in:
parent
1bf0d59efa
commit
f597b64f46
|
@ -319,7 +319,8 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
{
|
{
|
||||||
Q_ASSERT(object);
|
Q_ASSERT(object);
|
||||||
Q_ASSERT(event);
|
Q_ASSERT(event);
|
||||||
QPointF m_pCurMousePos = {};
|
static bool m_bIsMRBPressed = false;
|
||||||
|
static QPointF m_pOldMousePos = {};
|
||||||
const auto isWindowTopLevel = [](QObject *window) -> bool {
|
const auto isWindowTopLevel = [](QObject *window) -> bool {
|
||||||
Q_ASSERT(window);
|
Q_ASSERT(window);
|
||||||
if (window->isWindowType()) {
|
if (window->isWindowType()) {
|
||||||
|
@ -406,7 +407,11 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
#ifdef QT_WIDGETS_LIB
|
#ifdef QT_WIDGETS_LIB
|
||||||
const auto widget = qobject_cast<QWidget *>(obj);
|
const auto widget = qobject_cast<QWidget *>(obj);
|
||||||
if (widget) {
|
if (widget) {
|
||||||
const QPoint pos = widget->mapToGlobal({0, 0});
|
#if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0))
|
||||||
|
const QPointF pos = widget->mapToGlobal(QPointF{0, 0});
|
||||||
|
#else
|
||||||
|
const QPoint pos = widget->mapToGlobal(QPoint{0, 0});
|
||||||
|
#endif
|
||||||
if (QRect(pos.x(), pos.y(), widget->width(), widget->height()).contains(x, y)) {
|
if (QRect(pos.x(), pos.y(), widget->width(), widget->height()).contains(x, y)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -487,52 +492,25 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
const auto moveOrResize =
|
const auto moveOrResize =
|
||||||
[this,
|
[this, &getWindowEdges, &isResizePermitted, &isInTitlebarArea](const QPointF &globalPoint,
|
||||||
&getWindowEdges,
|
const QPointF &point,
|
||||||
&isResizePermitted,
|
QObject *object) {
|
||||||
&isInTitlebarArea,
|
|
||||||
&m_pCurMousePos](const QPointF &globalPoint, const QPointF &point, QObject *object) {
|
|
||||||
Q_ASSERT(object);
|
Q_ASSERT(object);
|
||||||
QWindow *window = getWindowHandle(object);
|
QWindow *window = getWindowHandle(object);
|
||||||
if (window) {
|
if (window) {
|
||||||
const int deltaX = m_pCurMousePos.x() - globalPoint.x();
|
const QPointF deltaPoint = globalPoint - m_pOldMousePos;
|
||||||
const int deltaY = m_pCurMousePos.y() - globalPoint.y();
|
|
||||||
const Qt::Edges edges = getWindowEdges(point, window->width(), window->height());
|
const Qt::Edges edges = getWindowEdges(point, window->width(), window->height());
|
||||||
if (edges == Qt::Edges{}) {
|
if (edges == Qt::Edges{}) {
|
||||||
if (isInTitlebarArea(globalPoint, point, object)) {
|
if (isInTitlebarArea(globalPoint, point, object)) {
|
||||||
if (!window->startSystemMove()) {
|
if (!window->startSystemMove()) {
|
||||||
// Fallback to the traditional way.
|
// ### FIXME: TO BE IMPLEMENTED!
|
||||||
window->setX(window->x() + deltaX);
|
|
||||||
window->setY(window->y() + deltaY);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
||||||
&& isResizePermitted(globalPoint, point, object) && getResizable(object)) {
|
&& isResizePermitted(globalPoint, point, object) && getResizable(object)) {
|
||||||
if (!window->startSystemResize(edges)) {
|
if (!window->startSystemResize(edges)) {
|
||||||
// Fallback to the traditional way.
|
// ### FIXME: TO BE IMPLEMENTED!
|
||||||
bool leftHandled = false, topHandled = false;
|
|
||||||
int newX = window->x();
|
|
||||||
int newY = window->y();
|
|
||||||
int newWidth = window->width();
|
|
||||||
int newHeight = window->height();
|
|
||||||
if (edges.testFlag(Qt::Edge::LeftEdge)) {
|
|
||||||
newX += deltaX;
|
|
||||||
newWidth -= deltaX;
|
|
||||||
leftHandled = true;
|
|
||||||
}
|
|
||||||
if (edges.testFlag(Qt::Edge::TopEdge)) {
|
|
||||||
newY += deltaY;
|
|
||||||
newHeight -= deltaY;
|
|
||||||
topHandled = true;
|
|
||||||
}
|
|
||||||
if (!leftHandled) {
|
|
||||||
newWidth += deltaX;
|
|
||||||
}
|
|
||||||
if (!topHandled) {
|
|
||||||
newHeight += deltaY;
|
|
||||||
}
|
|
||||||
window->setGeometry(newX, newY, newWidth, newHeight);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -595,13 +573,14 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
if (mouseEvent->button() != Qt::MouseButton::LeftButton) {
|
if (mouseEvent->button() != Qt::MouseButton::LeftButton) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
m_bIsMRBPressed = true;
|
||||||
|
m_pOldMousePos = mouseEvent->screenPos();
|
||||||
moveOrResize(mouseEvent->screenPos(), mouseEvent->windowPos(), object);
|
moveOrResize(mouseEvent->screenPos(), mouseEvent->windowPos(), object);
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case QEvent::MouseMove: {
|
case QEvent::MouseMove: {
|
||||||
const auto mouseEvent = static_cast<QMouseEvent *>(event);
|
const auto mouseEvent = static_cast<QMouseEvent *>(event);
|
||||||
if (mouseEvent) {
|
if (mouseEvent) {
|
||||||
m_pCurMousePos = mouseEvent->screenPos();
|
|
||||||
QWindow *window = getWindowHandle(object);
|
QWindow *window = getWindowHandle(object);
|
||||||
if (window) {
|
if (window) {
|
||||||
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
if (window->windowStates().testFlag(Qt::WindowState::WindowNoState)
|
||||||
|
@ -625,6 +604,10 @@ bool FramelessHelper::eventFilter(QObject *object, QEvent *event)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
|
case QEvent::MouseButtonRelease: {
|
||||||
|
m_bIsMRBPressed = false;
|
||||||
|
m_pOldMousePos = {};
|
||||||
|
} break;
|
||||||
case QEvent::TouchBegin:
|
case QEvent::TouchBegin:
|
||||||
case QEvent::TouchUpdate: {
|
case QEvent::TouchUpdate: {
|
||||||
const auto point = static_cast<QTouchEvent *>(event)->touchPoints().first();
|
const auto point = static_cast<QTouchEvent *>(event)->touchPoints().first();
|
||||||
|
|
Loading…
Reference in New Issue