diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2020-01-29 10:13:08 +0100 |
---|---|---|
committer | Mitch Curtis <mitch.curtis@qt.io> | 2020-01-29 12:20:42 +0100 |
commit | a82b1b278ace7a500f95473f2a873923d2d4e60a (patch) | |
tree | 4a369022728a6a9ef22c69d847f5949b5d89229e /src | |
parent | deac8afcbf28ebe621ec3b8495ca1c9ad76843a5 (diff) |
QQuickFlickable: fix division by zero
The issue could be seen when enabling exceptions and running the
following QML code:
Flickable {
id: flickable
anchors.fill: parent
contentWidth: 1000
contentHeight: 1000
Text {
text: flickable.visibleArea.xPosition
}
}
Change-Id: I615f9f9dc84903fb3a902f416a55e3ce3fece64c
Fixes: QTBUG-81098
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickflickable.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/quick/items/qquickflickable.cpp b/src/quick/items/qquickflickable.cpp index d9ec7de611..52f7c29aa4 100644 --- a/src/quick/items/qquickflickable.cpp +++ b/src/quick/items/qquickflickable.cpp @@ -128,8 +128,13 @@ void QQuickFlickableVisibleArea::updateVisible() // Vertical const qreal viewheight = flickable->height(); const qreal maxyextent = -flickable->maxYExtent() + flickable->minYExtent(); - qreal pagePos = (-p->vData.move.value() + flickable->minYExtent()) / (maxyextent + viewheight); - qreal pageSize = viewheight / (maxyextent + viewheight); + const qreal maxYBounds = maxyextent + viewheight; + qreal pagePos = 0; + qreal pageSize = 0; + if (!qFuzzyIsNull(maxYBounds)) { + pagePos = (-p->vData.move.value() + flickable->minYExtent()) / maxYBounds; + pageSize = viewheight / maxYBounds; + } if (pageSize != m_heightRatio) { m_heightRatio = pageSize; @@ -143,8 +148,14 @@ void QQuickFlickableVisibleArea::updateVisible() // Horizontal const qreal viewwidth = flickable->width(); const qreal maxxextent = -flickable->maxXExtent() + flickable->minXExtent(); - pagePos = (-p->hData.move.value() + flickable->minXExtent()) / (maxxextent + viewwidth); - pageSize = viewwidth / (maxxextent + viewwidth); + const qreal maxXBounds = maxxextent + viewwidth; + if (!qFuzzyIsNull(maxXBounds)) { + pagePos = (-p->hData.move.value() + flickable->minXExtent()) / maxXBounds; + pageSize = viewwidth / maxXBounds; + } else { + pagePos = 0; + pageSize = 0; + } if (pageSize != m_widthRatio) { m_widthRatio = pageSize; |