summaryrefslogtreecommitdiffstats
path: root/src/controls/ScrollView.qml
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-09-02 13:51:45 +0200
committerGabriel de Dietrich <gabriel.dedietrich@theqtcompany.com>2015-10-30 13:00:01 +0000
commitafbf1fcb251c1f751758f62317f1cd9795b79310 (patch)
tree5a20f01711379ebca54c4c03430783ece475a460 /src/controls/ScrollView.qml
parent2e48d16e4a230069884ac0585ae111037f4171fb (diff)
ScrollView: Don't depend on originY for the internal scrollbar
While originY (and originX) are always zero for Flickable, other types, like ListView, can and will set its value as items are added or removed from the view. However, having the internal scrollbars depend on originY may cause extra updates and interfere with ListView transitions. This changes just hardcodes the scrollbar's minimum value to 0 and translates its value by originY. We also made the code in ScrollViewHelper a bit more readable, mostly by renaming the top-level item's id from 'wheelArea' to 'scrollHelper'. Change-Id: Iac0b4e1dc3ca50ff3cc50fbb85ccaf1eca88edba Task-number: QTBUG-48044 Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
Diffstat (limited to 'src/controls/ScrollView.qml')
-rw-r--r--src/controls/ScrollView.qml27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/controls/ScrollView.qml b/src/controls/ScrollView.qml
index 74d5ee7dd..e6001b041 100644
--- a/src/controls/ScrollView.qml
+++ b/src/controls/ScrollView.qml
@@ -238,13 +238,13 @@ FocusScope {
onContentYChanged: {
scroller.blockUpdates = true
- scroller.verticalScrollBar.value = flickableItem.contentY
+ scroller.verticalScrollBar.value = flickableItem.contentY - flickableItem.originY
scroller.blockUpdates = false
}
onContentXChanged: {
scroller.blockUpdates = true
- scroller.horizontalScrollBar.value = flickableItem.contentX
+ scroller.horizontalScrollBar.value = flickableItem.contentX - flickableItem.originX
scroller.blockUpdates = false
}
@@ -274,11 +274,11 @@ FocusScope {
property bool horizontalRecursionGuard: false
property bool verticalRecursionGuard: false
- horizontalMinimumValue: flickableItem ? flickableItem.originX : 0
- horizontalMaximumValue: flickableItem ? flickableItem.originX + flickableItem.contentWidth - viewport.width : 0
+ horizontalMinimumValue: 0
+ horizontalMaximumValue: flickableItem ? flickableItem.contentWidth - viewport.width : 0
- verticalMinimumValue: flickableItem ? flickableItem.originY : 0
- verticalMaximumValue: flickableItem ? flickableItem.originY + flickableItem.contentHeight - viewport.height + __viewTopMargin : 0
+ verticalMinimumValue: 0
+ verticalMaximumValue: flickableItem ? flickableItem.contentHeight - viewport.height + __viewTopMargin : 0
// The default scroll speed for typical angle-based mouse wheels. The value
// comes originally from QTextEdit, which sets 20px steps by default, as well as
@@ -291,32 +291,33 @@ FocusScope {
onContentYChanged: {
wheelArea.verticalRecursionGuard = true
- wheelArea.verticalValue = flickableItem.contentY
+ wheelArea.verticalValue = flickableItem.contentY - flickableItem.originY
wheelArea.verticalRecursionGuard = false
}
onContentXChanged: {
wheelArea.horizontalRecursionGuard = true
- wheelArea.horizontalValue = flickableItem.contentX
+ wheelArea.horizontalValue = flickableItem.contentX - flickableItem.originX
wheelArea.horizontalRecursionGuard = false
}
}
onVerticalValueChanged: {
if (!verticalRecursionGuard) {
- if (flickableItem.contentY < flickThreshold && verticalDelta > speedThreshold) {
+ var effectiveContentY = flickableItem.contentY - flickableItem.originY
+ if (effectiveContentY < flickThreshold && verticalDelta > speedThreshold) {
flickableItem.flick(ignored, Math.min(maxFlick, acceleration * verticalDelta))
- } else if (flickableItem.contentY > flickableItem.contentHeight
- - flickThreshold - viewport.height && verticalDelta < -speedThreshold) {
+ } else if (effectiveContentY > flickableItem.contentHeight - flickThreshold - viewport.height
+ && verticalDelta < -speedThreshold) {
flickableItem.flick(ignored, Math.max(-maxFlick, acceleration * verticalDelta))
} else {
- flickableItem.contentY = verticalValue
+ flickableItem.contentY = verticalValue + flickableItem.originY
}
}
}
onHorizontalValueChanged: {
if (!horizontalRecursionGuard)
- flickableItem.contentX = horizontalValue
+ flickableItem.contentX = horizontalValue + flickableItem.originX
}
}