aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickscrollbar.cpp
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2018-01-22 14:06:19 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2018-01-22 13:24:21 +0000
commit3323ca8e627db560665edb667e52d52233c05601 (patch)
treec2f14ee9a8093bdd0536a82b52d6f1bc9394c351 /src/quicktemplates2/qquickscrollbar.cpp
parent205e714cf8dfba9327eaddbb52e03c1448bef047 (diff)
ScrollBar: fix infinite loop
9e1b044 ("ScrollBar: allow configuring the minimum size") attempted to simplify QQuickScrollBarAttachedPrivate::scrollHorizontal() and scrollVertical(), but apparently the new calculation was not identical since it caused a crash with pixel delta wheel events on macOS. Revert back to the previous version, as it was before 9e1b044. Task-number: QTBUG-65784 Change-Id: I4f326c3ba67595429cfbaef491089aa83572f0de Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickscrollbar.cpp')
-rw-r--r--src/quicktemplates2/qquickscrollbar.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/quicktemplates2/qquickscrollbar.cpp b/src/quicktemplates2/qquickscrollbar.cpp
index aa0094aa..67195ba8 100644
--- a/src/quicktemplates2/qquickscrollbar.cpp
+++ b/src/quicktemplates2/qquickscrollbar.cpp
@@ -872,8 +872,9 @@ void QQuickScrollBarAttachedPrivate::scrollHorizontal()
{
QQuickFriendlyFlickable *f = reinterpret_cast<QQuickFriendlyFlickable *>(flickable);
- const qreal extent = f->contentWidth() - f->minXExtent();
- const qreal cx = horizontal->position() * extent;
+ const qreal viewwidth = f->width();
+ const qreal maxxextent = -f->maxXExtent() + f->minXExtent();
+ const qreal cx = horizontal->position() * (maxxextent + viewwidth) - f->minXExtent();
if (!qIsNaN(cx) && !qFuzzyCompare(cx, flickable->contentX()))
flickable->setContentX(cx);
@@ -883,8 +884,9 @@ void QQuickScrollBarAttachedPrivate::scrollVertical()
{
QQuickFriendlyFlickable *f = reinterpret_cast<QQuickFriendlyFlickable *>(flickable);
- const qreal extent = f->contentHeight() - f->minYExtent();
- const qreal cy = vertical->position() * extent;
+ const qreal viewheight = f->height();
+ const qreal maxyextent = -f->maxYExtent() + f->minYExtent();
+ const qreal cy = vertical->position() * (maxyextent + viewheight) - f->minYExtent();
if (!qIsNaN(cy) && !qFuzzyCompare(cy, flickable->contentY()))
flickable->setContentY(cy);