aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickscrollindicator.cpp
diff options
context:
space:
mode:
authorSoheil Armin <soheil.armin@qt.io>2022-05-02 12:14:05 +0300
committerSoheil Armin <soheil.armin@qt.io>2022-05-24 00:50:09 +0000
commitce441f819389d729dea63a7d1ae02fae35b35bfc (patch)
treedf4fd048d9a5e1bfb0c21ffee8e60ccbea566e7b /src/quicktemplates2/qquickscrollindicator.cpp
parent99a4d40065cffd8047ed4f97aa1ba21fac420940 (diff)
Fix visualSize calculation when width is changing
Position of the ScrollBar handle is fixed when it's being resized except when it's on the extreme side (position + size = 1). In this case, when the width is growing, the handle size should grow and the position should decrease as a result. Fixes: QTBUG-98387 Change-Id: Ibb18c03a741bb4e5a19425a57f14a68d27d68d12 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickscrollindicator.cpp')
-rw-r--r--src/quicktemplates2/qquickscrollindicator.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/quicktemplates2/qquickscrollindicator.cpp b/src/quicktemplates2/qquickscrollindicator.cpp
index 7f83f36813..918f7db86d 100644
--- a/src/quicktemplates2/qquickscrollindicator.cpp
+++ b/src/quicktemplates2/qquickscrollindicator.cpp
@@ -163,9 +163,12 @@ QQuickScrollIndicatorPrivate::VisualArea QQuickScrollIndicatorPrivate::visualAre
if (minimumSize > size)
visualPos = position / (1.0 - size) * (1.0 - minimumSize);
- qreal visualSize = qBound<qreal>(0, qMax(size, minimumSize) + qMin<qreal>(0, visualPos), 1.0 - visualPos);
+ qreal maximumSize = qMax<qreal>(0.0, 1.0 - visualPos);
+ qreal visualSize = qMax<qreal>(minimumSize,
+ qMin<qreal>(qMax(size, minimumSize) + qMin<qreal>(0, visualPos),
+ maximumSize));
- visualPos = qBound<qreal>(0, visualPos, 1.0 - visualSize);
+ visualPos = qMax<qreal>(0,qMin<qreal>(visualPos,qMax<qreal>(0, 1.0 - visualSize)));
return VisualArea(visualPos, visualSize);
}
@@ -234,6 +237,10 @@ void QQuickScrollIndicator::setSize(qreal size)
auto oldVisualArea = d->visualArea();
d->size = size;
+ if (d->size + d->position > 1.0) {
+ setPosition(1.0 - d->size);
+ oldVisualArea = d->visualArea();
+ }
if (isComponentComplete())
d->resizeContent();
emit sizeChanged();