diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2016-09-04 10:11:20 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2016-09-06 11:41:25 +0000 |
commit | b9600bb83536ad3072072a374883ce835302dc56 (patch) | |
tree | b4e17a1093063ae122664c01f583ad231944d054 /src | |
parent | 058f2dcc6070a9a36f269dd3fff6017c546d0b53 (diff) |
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 <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/quicktemplates2/qquickdrawer.cpp | 45 | ||||
-rw-r--r-- | src/quicktemplates2/qquickdrawer_p_p.h | 2 |
2 files changed, 29 insertions, 18 deletions
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); |