summaryrefslogtreecommitdiffstats
path: root/src/declarative
diff options
context:
space:
mode:
authorFrederik Gladhorn <frederik.gladhorn@digia.com>2013-02-25 11:58:49 +0100
committerFrederik Gladhorn <frederik.gladhorn@digia.com>2013-02-25 11:58:49 +0100
commitb44c6dfb1dc3ef3bc5c6ba8590f6329b50593c17 (patch)
tree07216922d8ad6a262c2ee4d35611a34adf5caf83 /src/declarative
parenteb338eabd276487f7779d7b682e7369f3903313e (diff)
parente8ca72d484c0e56f030e4742bb5f92b6f0555146 (diff)
Merge remote-tracking branch 'origin/stable' into dev
Diffstat (limited to 'src/declarative')
-rw-r--r--src/declarative/graphicsitems/qdeclarativeflickable.cpp46
-rw-r--r--src/declarative/graphicsitems/qdeclarativemousearea.cpp39
2 files changed, 37 insertions, 48 deletions
diff --git a/src/declarative/graphicsitems/qdeclarativeflickable.cpp b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
index edbd9782..c0c7b2a0 100644
--- a/src/declarative/graphicsitems/qdeclarativeflickable.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeflickable.cpp
@@ -789,9 +789,9 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
if (q->yflick()) {
int dy = int(event->pos().y() - pressPos.y());
+ if (vData.dragStartOffset == 0)
+ vData.dragStartOffset = dy;
if (qAbs(dy) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) {
- if (!vMoved)
- vData.dragStartOffset = dy;
qreal newY = dy + vData.pressPos - vData.dragStartOffset;
const qreal minY = vData.dragMinBound;
const qreal maxY = vData.dragMaxBound;
@@ -799,31 +799,28 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
newY = minY + (newY - minY) / 2;
if (newY < maxY && maxY - minY <= 0)
newY = maxY + (newY - maxY) / 2;
- if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && (newY > minY || newY < maxY)) {
- rejectY = true;
- if (newY < maxY) {
- newY = maxY;
- rejectY = false;
- }
- if (newY > minY) {
- newY = minY;
- rejectY = false;
- }
+ if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && newY <= maxY) {
+ newY = maxY;
+ rejectY = vData.pressPos == maxY && dy < 0;
+ }
+ if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && newY >= minY) {
+ newY = minY;
+ rejectY = vData.pressPos == minY && dy > 0;
}
if (!rejectY && stealMouse && dy != 0) {
vData.move.setValue(qRound(newY));
vMoved = true;
}
- if (qAbs(dy) > QApplication::startDragDistance())
+ if (!rejectY && qAbs(dy) > QApplication::startDragDistance())
stealY = true;
}
}
if (q->xflick()) {
int dx = int(event->pos().x() - pressPos.x());
+ if (hData.dragStartOffset == 0)
+ hData.dragStartOffset = dx;
if (qAbs(dx) > QApplication::startDragDistance() || QDeclarativeItemPrivate::elapsed(pressTime) > 200) {
- if (!hMoved)
- hData.dragStartOffset = dx;
qreal newX = dx + hData.pressPos - hData.dragStartOffset;
const qreal minX = hData.dragMinBound;
const qreal maxX = hData.dragMaxBound;
@@ -831,23 +828,20 @@ void QDeclarativeFlickablePrivate::handleMouseMoveEvent(QGraphicsSceneMouseEvent
newX = minX + (newX - minX) / 2;
if (newX < maxX && maxX - minX <= 0)
newX = maxX + (newX - maxX) / 2;
- if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && (newX > minX || newX < maxX)) {
- rejectX = true;
- if (newX < maxX) {
- newX = maxX;
- rejectX = false;
- }
- if (newX > minX) {
- newX = minX;
- rejectX = false;
- }
+ if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && newX <= maxX) {
+ newX = maxX;
+ rejectX = hData.pressPos == maxX && dx < 0;
+ }
+ if (boundsBehavior == QDeclarativeFlickable::StopAtBounds && newX >= minX) {
+ newX = minX;
+ rejectX = hData.pressPos == minX && dx > 0;
}
if (!rejectX && stealMouse && dx != 0) {
hData.move.setValue(qRound(newX));
hMoved = true;
}
- if (qAbs(dx) > QApplication::startDragDistance())
+ if (!rejectX && qAbs(dx) > QApplication::startDragDistance())
stealX = true;
}
}
diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
index a7c38ea8..9fa325b0 100644
--- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp
+++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp
@@ -530,37 +530,32 @@ void QDeclarativeMouseArea::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
curLocalPos = event->scenePos();
}
- const int dragThreshold = QApplication::startDragDistance();
- qreal dx = qAbs(curLocalPos.x() - startLocalPos.x());
- qreal dy = qAbs(curLocalPos.y() - startLocalPos.y());
-
if (keepMouseGrab() && d->stealMouse)
d->drag->setActive(true);
bool dragX = drag()->axis() & QDeclarativeDrag::XAxis;
bool dragY = drag()->axis() & QDeclarativeDrag::YAxis;
- if (dragX && d->drag->active()) {
- qreal x = (curLocalPos.x() - startLocalPos.x()) + d->startX;
- if (x < drag()->xmin())
- x = drag()->xmin();
- else if (x > drag()->xmax())
- x = drag()->xmax();
- drag()->target()->setX(x);
- }
- if (dragY && d->drag->active()) {
- qreal y = (curLocalPos.y() - startLocalPos.y()) + d->startY;
- if (y < drag()->ymin())
- y = drag()->ymin();
- else if (y > drag()->ymax())
- y = drag()->ymax();
- drag()->target()->setY(y);
+ const qreal x = dragX
+ ? qBound(d->drag->xmin(), d->startX + curLocalPos.x() - startLocalPos.x(), d->drag->xmax())
+ : d->startX;
+ const qreal y = dragY
+ ? qBound(d->drag->ymin(), d->startY + curLocalPos.y() - startLocalPos.y(), d->drag->ymax())
+ : d->startY;
+
+ if (d->drag->active()) {
+ if (dragX && dragY)
+ d->drag->target()->setPos(x, y);
+ else if (dragX)
+ d->drag->target()->setX(x);
+ else if (dragY)
+ d->drag->target()->setY(y);
}
if (!keepMouseGrab()) {
- if ((!dragY && dy < dragThreshold && dragX && dx > dragThreshold)
- || (!dragX && dx < dragThreshold && dragY && dy > dragThreshold)
- || (dragX && dragY && (dx > dragThreshold || dy > dragThreshold))) {
+ const int dragThreshold = QApplication::startDragDistance();
+
+ if (qAbs(x - d->startX) > dragThreshold || qAbs(y - d->startY) > dragThreshold) {
setKeepMouseGrab(true);
d->stealMouse = true;
}