aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-09-04 10:11:20 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2016-09-06 11:41:25 +0000
commitb9600bb83536ad3072072a374883ce835302dc56 (patch)
treeb4e17a1093063ae122664c01f583ad231944d054 /src
parent058f2dcc6070a9a36f269dd3fff6017c546d0b53 (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.cpp45
-rw-r--r--src/quicktemplates2/qquickdrawer_p_p.h2
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);