aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-08-12 10:03:53 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2014-08-12 10:04:33 +0200
commit61f72d32b4fddc6e87f21d0243d9f0a32ca61987 (patch)
treeb166541b885e33666bc3dffbde937b5dc0e93bc5 /src/quick/items
parent430853836f9c17154ef3ee4cac6b03b90ee493a9 (diff)
parent01c6af3fc940378e8eee41a9fb8273420ef5a7e1 (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.cpp11
-rw-r--r--src/quick/items/qquickimagebase.cpp4
-rw-r--r--src/quick/items/qquickimagebase_p.h2
-rw-r--r--src/quick/items/qquickpathview.cpp17
-rw-r--r--src/quick/items/qquickpathview_p_p.h1
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;