aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/templates/qquickscrollindicator.cpp40
-rw-r--r--tests/auto/controls/data/tst_scrollindicator.qml16
2 files changed, 42 insertions, 14 deletions
diff --git a/src/templates/qquickscrollindicator.cpp b/src/templates/qquickscrollindicator.cpp
index 81a96ac5..94b47e4d 100644
--- a/src/templates/qquickscrollindicator.cpp
+++ b/src/templates/qquickscrollindicator.cpp
@@ -228,6 +228,9 @@ public:
void activateHorizontal();
void activateVertical();
+ void layoutHorizontal(bool move = true);
+ void layoutVertical(bool move = true);
+
void itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry) Q_DECL_OVERRIDE;
QQuickFlickable *flickable;
@@ -245,27 +248,34 @@ void QQuickScrollIndicatorAttachedPrivate::activateVertical()
vertical->setActive(flickable->isMovingVertically());
}
+void QQuickScrollIndicatorAttachedPrivate::layoutHorizontal(bool move)
+{
+ Q_ASSERT(horizontal && flickable);
+ horizontal->setWidth(flickable->width());
+ if (move)
+ horizontal->setY(flickable->height() - horizontal->height());
+}
+
+void QQuickScrollIndicatorAttachedPrivate::layoutVertical(bool move)
+{
+ Q_ASSERT(vertical && flickable);
+ vertical->setHeight(flickable->height());
+ if (move && !QQuickItemPrivate::get(vertical)->isMirrored())
+ vertical->setX(flickable->width() - vertical->width());
+}
+
void QQuickScrollIndicatorAttachedPrivate::itemGeometryChanged(QQuickItem *item, const QRectF &newGeometry, const QRectF &oldGeometry)
{
Q_UNUSED(item);
+ Q_UNUSED(newGeometry);
Q_ASSERT(item == flickable);
if (horizontal) {
- QQuickItemPrivate *p = QQuickItemPrivate::get(horizontal);
- if (!p->widthValid) {
- horizontal->setWidth(newGeometry.width());
- p->widthValid = false;
- }
- if (qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), oldGeometry.height() - horizontal->height()))
- horizontal->setY(newGeometry.height() - horizontal->height());
+ bool move = qFuzzyIsNull(horizontal->y()) || qFuzzyCompare(horizontal->y(), oldGeometry.height() - horizontal->height());
+ layoutHorizontal(move);
}
if (vertical) {
- QQuickItemPrivate *p = QQuickItemPrivate::get(vertical);
- if (!p->heightValid) {
- vertical->setHeight(newGeometry.height());
- p->heightValid = false;
- }
- if (!p->isMirrored() && (qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), oldGeometry.width() - vertical->width())))
- vertical->setX(newGeometry.width() - vertical->width());
+ bool move = qFuzzyIsNull(vertical->x()) || qFuzzyCompare(vertical->x(), oldGeometry.width() - vertical->width());
+ layoutVertical(move);
}
}
@@ -322,6 +332,7 @@ void QQuickScrollIndicatorAttached::setHorizontal(QQuickScrollIndicator *horizon
connect(area, SIGNAL(widthRatioChanged(qreal)), horizontal, SLOT(setSize(qreal)));
connect(area, SIGNAL(xPositionChanged(qreal)), horizontal, SLOT(setPosition(qreal)));
+ d->layoutHorizontal();
horizontal->setSize(area->property("widthRatio").toReal());
horizontal->setPosition(area->property("xPosition").toReal());
}
@@ -374,6 +385,7 @@ void QQuickScrollIndicatorAttached::setVertical(QQuickScrollIndicator *vertical)
connect(area, SIGNAL(heightRatioChanged(qreal)), vertical, SLOT(setSize(qreal)));
connect(area, SIGNAL(yPositionChanged(qreal)), vertical, SLOT(setPosition(qreal)));
+ d->layoutVertical();
vertical->setSize(area->property("heightRatio").toReal());
vertical->setPosition(area->property("yPosition").toReal());
}
diff --git a/tests/auto/controls/data/tst_scrollindicator.qml b/tests/auto/controls/data/tst_scrollindicator.qml
index 71e09784..99eef833 100644
--- a/tests/auto/controls/data/tst_scrollindicator.qml
+++ b/tests/auto/controls/data/tst_scrollindicator.qml
@@ -78,12 +78,20 @@ TestCase {
compare(vertical.position, 0.0)
compare(vertical.active, false)
compare(vertical.orientation, Qt.Vertical)
+ compare(vertical.x, 0)
+ compare(vertical.y, 0)
+ verify(vertical.width > 0)
+ verify(vertical.height > 0)
container.ScrollIndicator.vertical = vertical
compare(vertical.parent, container)
compare(vertical.orientation, Qt.Vertical)
compare(vertical.size, container.visibleArea.heightRatio)
compare(vertical.position, container.visibleArea.yPosition)
+ compare(vertical.x, container.width - vertical.width)
+ compare(vertical.y, 0)
+ verify(vertical.width > 0)
+ compare(vertical.height, container.height)
var horizontal = scrollIndicator.createObject()
verify(!horizontal.parent)
@@ -91,12 +99,20 @@ TestCase {
compare(horizontal.position, 0.0)
compare(horizontal.active, false)
compare(horizontal.orientation, Qt.Vertical)
+ compare(horizontal.x, 0)
+ compare(horizontal.y, 0)
+ verify(horizontal.width > 0)
+ verify(horizontal.height > 0)
container.ScrollIndicator.horizontal = horizontal
compare(horizontal.parent, container)
compare(horizontal.orientation, Qt.Horizontal)
compare(horizontal.size, container.visibleArea.widthRatio)
compare(horizontal.position, container.visibleArea.xPosition)
+ compare(horizontal.x, 0)
+ compare(horizontal.y, container.height - horizontal.height)
+ compare(horizontal.width, container.width)
+ verify(horizontal.height > 0)
var velocity = container.maximumFlickVelocity