From b9600bb83536ad3072072a374883ce835302dc56 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Sun, 4 Sep 2016 10:11:20 +0200 Subject: QQuickDrawerPrivate::startDrag() Split startDrag() out of handleMousePressEvent(). This makes the mouse press handling code a bit easier to read. The new method will be later utilized by QQuickOverlay. Change-Id: I1118d86657a77d72353faac928b0a8deba4ff501 Reviewed-by: Mitch Curtis --- src/quicktemplates2/qquickdrawer.cpp | 45 ++++++++++++++++++++-------------- src/quicktemplates2/qquickdrawer_p_p.h | 2 ++ 2 files changed, 29 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/quicktemplates2/qquickdrawer.cpp b/src/quicktemplates2/qquickdrawer.cpp index 6b0d9849..ae9442f8 100644 --- a/src/quicktemplates2/qquickdrawer.cpp +++ b/src/quicktemplates2/qquickdrawer.cpp @@ -168,31 +168,40 @@ static bool dragOverThreshold(qreal d, Qt::Axis axis, QMouseEvent *event, int th return QQuickWindowPrivate::dragOverThreshold(d, axis, event, threshold); } +bool QQuickDrawerPrivate::startDrag(QQuickWindow *window, QMouseEvent *event) +{ + if (!window || dragMargin < 0.0 || qFuzzyIsNull(dragMargin)) + return false; + + bool drag = false; + switch (edge) { + case Qt::LeftEdge: + drag = !dragOverThreshold(event->windowPos().x(), Qt::XAxis, event, dragMargin); + break; + case Qt::RightEdge: + drag = !dragOverThreshold(window->width() - event->windowPos().x(), Qt::XAxis, event, dragMargin); + break; + case Qt::TopEdge: + drag = !dragOverThreshold(event->windowPos().y(), Qt::YAxis, event, dragMargin); + break; + case Qt::BottomEdge: + drag = !dragOverThreshold(window->height() - event->windowPos().y(), Qt::YAxis, event, dragMargin); + break; + default: + break; + } + + return drag; +} + bool QQuickDrawerPrivate::handleMousePressEvent(QQuickItem *item, QMouseEvent *event) { pressPoint = event->windowPos(); offset = 0; - QQuickWindow *window = item->window(); - if (!window) - return false; - if (qFuzzyIsNull(position)) { // only accept pressing at drag margins when fully closed - switch (edge) { - case Qt::LeftEdge: - event->setAccepted(dragMargin > 0 && !dragOverThreshold(event->windowPos().x(), Qt::XAxis, event, dragMargin)); - break; - case Qt::RightEdge: - event->setAccepted(dragMargin > 0 && !dragOverThreshold(window->width() - event->windowPos().x(), Qt::XAxis, event, dragMargin)); - break; - case Qt::TopEdge: - event->setAccepted(dragMargin > 0 && !dragOverThreshold(event->windowPos().y(), Qt::YAxis, event, dragMargin)); - break; - case Qt::BottomEdge: - event->setAccepted(dragMargin > 0 && !dragOverThreshold(window->height() - event->windowPos().y(), Qt::YAxis, event, dragMargin)); - break; - } + event->setAccepted(startDrag(item->window(), event)); } else { if (modal) event->setAccepted(item->isAncestorOf(popupItem)); diff --git a/src/quicktemplates2/qquickdrawer_p_p.h b/src/quicktemplates2/qquickdrawer_p_p.h index 232b0b08..2cf752d5 100644 --- a/src/quicktemplates2/qquickdrawer_p_p.h +++ b/src/quicktemplates2/qquickdrawer_p_p.h @@ -69,6 +69,8 @@ public: qreal positionAt(const QPointF &point) const; void reposition() override; + bool startDrag(QQuickWindow *window, QMouseEvent *event); + bool handleMousePressEvent(QQuickItem *item, QMouseEvent *event); bool handleMouseMoveEvent(QQuickItem *item, QMouseEvent *event); bool handleMouseReleaseEvent(QQuickItem *item, QMouseEvent *event); -- cgit v1.2.3