diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2018-01-22 14:06:19 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2018-01-22 13:24:21 +0000 |
commit | 3323ca8e627db560665edb667e52d52233c05601 (patch) | |
tree | c2f14ee9a8093bdd0536a82b52d6f1bc9394c351 /src/quicktemplates2/qquickscrollbar.cpp | |
parent | 205e714cf8dfba9327eaddbb52e03c1448bef047 (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.cpp | 10 |
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); |