From 3323ca8e627db560665edb667e52d52233c05601 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 22 Jan 2018 14:06:19 +0100 Subject: 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 --- src/quicktemplates2/qquickscrollbar.cpp | 10 ++++++---- 1 file 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(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(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); -- cgit v1.2.3