diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-08-12 10:03:53 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-08-12 10:04:33 +0200 |
commit | 61f72d32b4fddc6e87f21d0243d9f0a32ca61987 (patch) | |
tree | b166541b885e33666bc3dffbde937b5dc0e93bc5 /src/quick/items | |
parent | 430853836f9c17154ef3ee4cac6b03b90ee493a9 (diff) | |
parent | 01c6af3fc940378e8eee41a9fb8273420ef5a7e1 (diff) |
Merge remote-tracking branch 'origin/5.3' into 5.4
Conflicts:
src/qml/jsruntime/qv4include.cpp
src/quick/items/qquickrendercontrol.cpp
src/quick/items/qquickrendercontrol_p.h
src/quickwidgets/qquickwidget.cpp
Change-Id: Ib2dc0051a38cd283a37a7665eb4a76f6f7ec8b15
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquickframebufferobject.cpp | 11 | ||||
-rw-r--r-- | src/quick/items/qquickimagebase.cpp | 4 | ||||
-rw-r--r-- | src/quick/items/qquickimagebase_p.h | 2 | ||||
-rw-r--r-- | src/quick/items/qquickpathview.cpp | 17 | ||||
-rw-r--r-- | src/quick/items/qquickpathview_p_p.h | 1 |
5 files changed, 22 insertions, 13 deletions
diff --git a/src/quick/items/qquickframebufferobject.cpp b/src/quick/items/qquickframebufferobject.cpp index 0a8ad36476..fea6aadc23 100644 --- a/src/quick/items/qquickframebufferobject.cpp +++ b/src/quick/items/qquickframebufferobject.cpp @@ -235,8 +235,12 @@ QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNode n->renderer->synchronize(this); + QSize minFboSize = d->sceneGraphContext()->minimumFBOSize(); + QSize desiredFboSize(qMax<int>(minFboSize.width(), width()), + qMax<int>(minFboSize.height(), height())); + if (n->fbo && (d->followsItemSize || n->invalidatePending)) { - if (n->fbo->width() != width() || n->fbo->height() != height()) { + if (n->fbo->size() != desiredFboSize) { delete n->fbo; n->fbo = 0; delete n->msDisplayFbo; @@ -245,10 +249,7 @@ QSGNode *QQuickFramebufferObject::updatePaintNode(QSGNode *node, UpdatePaintNode } if (!n->fbo) { - QSize minFboSize = d->sceneGraphContext()->minimumFBOSize(); - QSize fboSize(qMax<int>(minFboSize.width(), width()), - qMax<int>(minFboSize.height(), height())); - n->fbo = n->renderer->createFramebufferObject(fboSize); + n->fbo = n->renderer->createFramebufferObject(desiredFboSize); GLuint displayTexture = n->fbo->texture(); diff --git a/src/quick/items/qquickimagebase.cpp b/src/quick/items/qquickimagebase.cpp index bf67cbef26..738430dc89 100644 --- a/src/quick/items/qquickimagebase.cpp +++ b/src/quick/items/qquickimagebase.cpp @@ -292,10 +292,10 @@ void QQuickImageBase::handleWindowChanged(QQuickWindow* window) connect(window, SIGNAL(screenChanged(QScreen*)), this, SLOT(handleScreenChanged(QScreen*))); } -void QQuickImageBase::handleScreenChanged(QScreen*) +void QQuickImageBase::handleScreenChanged(QScreen* screen) { // Screen DPI might have changed, reload images on screen change. - if (isComponentComplete()) + if (screen && isComponentComplete()) load(); } diff --git a/src/quick/items/qquickimagebase_p.h b/src/quick/items/qquickimagebase_p.h index 67f1e81cae..a3d9e3ace2 100644 --- a/src/quick/items/qquickimagebase_p.h +++ b/src/quick/items/qquickimagebase_p.h @@ -107,7 +107,7 @@ private Q_SLOTS: virtual void requestFinished(); void requestProgress(qint64,qint64); void handleWindowChanged(QQuickWindow *window); - void handleScreenChanged(QScreen *); + void handleScreenChanged(QScreen *screen); private: Q_DISABLE_COPY(QQuickImageBase) diff --git a/src/quick/items/qquickpathview.cpp b/src/quick/items/qquickpathview.cpp index efce244f7d..216b7cc7c1 100644 --- a/src/quick/items/qquickpathview.cpp +++ b/src/quick/items/qquickpathview.cpp @@ -1599,6 +1599,7 @@ void QQuickPathViewPrivate::handleMousePressEvent(QMouseEvent *event) return; startPoint = pointNear(event->localPos(), &startPc); + startPos = event->localPos(); if (idx == items.count()) { qreal distance = qAbs(event->localPos().x() - startPoint.x()) + qAbs(event->localPos().y() - startPoint.y()); if (distance > dragMargin) @@ -1621,8 +1622,6 @@ void QQuickPathView::mouseMoveEvent(QMouseEvent *event) Q_D(QQuickPathView); if (d->interactive) { d->handleMouseMoveEvent(event); - if (d->stealMouse) - setKeepMouseGrab(true); event->accept(); } else { QQuickItem::mouseMoveEvent(event); @@ -1639,9 +1638,17 @@ void QQuickPathViewPrivate::handleMouseMoveEvent(QMouseEvent *event) qreal newPc; QPointF pathPoint = pointNear(event->localPos(), &newPc); if (!stealMouse) { - QPointF delta = pathPoint - startPoint; - if (qAbs(delta.x()) > qApp->styleHints()->startDragDistance() || qAbs(delta.y()) > qApp->styleHints()->startDragDistance()) { - stealMouse = true; + QPointF posDelta = event->localPos() - startPos; + if (QQuickWindowPrivate::dragOverThreshold(posDelta.y(), Qt::YAxis, event) || QQuickWindowPrivate::dragOverThreshold(posDelta.x(), Qt::XAxis, event)) { + // The touch has exceeded the threshold. If the movement along the path is close to the drag threshold + // then we'll assume that this gesture targets the PathView. This ensures PathView gesture grabbing + // is in sync with other items. + QPointF pathDelta = pathPoint - startPoint; + if (qAbs(pathDelta.x()) > qApp->styleHints()->startDragDistance() * 0.8 + || qAbs(pathDelta.y()) > qApp->styleHints()->startDragDistance() * 0.8) { + stealMouse = true; + q->setKeepMouseGrab(true); + } } } else { moveReason = QQuickPathViewPrivate::Mouse; diff --git a/src/quick/items/qquickpathview_p_p.h b/src/quick/items/qquickpathview_p_p.h index e21f3757e6..59a7ac231b 100644 --- a/src/quick/items/qquickpathview_p_p.h +++ b/src/quick/items/qquickpathview_p_p.h @@ -135,6 +135,7 @@ public: qreal currentItemOffset; qreal startPc; QPointF startPoint; + QPointF startPos; qreal offset; qreal offsetAdj; qreal mappedRange; |