aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoni Poikelin <joni.poikelin@theqtcompany.com>2016-03-30 10:46:59 +0300
committerJoni Poikelin <joni.poikelin@theqtcompany.com>2016-04-01 07:35:38 +0000
commitbed6b3d633d83302a8e2167845db4b36e6847f0b (patch)
tree761e59bd982090979e8ff8098a4a79ea90d8f05e
parentc59c43bbc44026a508746b1de2505f6185bd0310 (diff)
Fix ScrollBars with paddings
Padding was not taken into account when calculating the new position, which caused there to be small offset between the mouse press and the resulting handle position by the amount of padding used. Task-number: QTBUG-52233 Change-Id: Ibd8c4375b030a27a6124aefc4bc9af570d14d3a9 Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r--src/imports/controls/ScrollBar.qml4
-rw-r--r--src/imports/controls/material/ScrollBar.qml4
-rw-r--r--src/imports/controls/universal/ScrollBar.qml4
-rw-r--r--src/templates/qquickscrollbar.cpp4
-rw-r--r--tests/auto/controls/data/tst_scrollbar.qml18
5 files changed, 25 insertions, 9 deletions
diff --git a/src/imports/controls/ScrollBar.qml b/src/imports/controls/ScrollBar.qml
index 55d53191..b9ebd634 100644
--- a/src/imports/controls/ScrollBar.qml
+++ b/src/imports/controls/ScrollBar.qml
@@ -60,8 +60,8 @@ T.ScrollBar {
opacity: 0.0
readonly property bool horizontal: control.orientation === Qt.Horizontal
- x: control.leftPadding + (horizontal ? control.position * control.width : 0)
- y: control.topPadding + (horizontal ? 0 : control.position * control.height)
+ x: control.leftPadding + (horizontal ? control.position * control.availableWidth : 0)
+ y: control.topPadding + (horizontal ? 0 : control.position * control.availableHeight)
width: horizontal ? control.size * control.availableWidth : implicitWidth
height: horizontal ? implicitHeight : control.size * control.availableHeight
diff --git a/src/imports/controls/material/ScrollBar.qml b/src/imports/controls/material/ScrollBar.qml
index 539b9243..72130c63 100644
--- a/src/imports/controls/material/ScrollBar.qml
+++ b/src/imports/controls/material/ScrollBar.qml
@@ -60,8 +60,8 @@ T.ScrollBar {
opacity: 0.0
readonly property bool horizontal: control.orientation === Qt.Horizontal
- x: control.leftPadding + (horizontal ? control.position * control.width : 0)
- y: control.topPadding + (horizontal ? 0 : control.position * control.height)
+ x: control.leftPadding + (horizontal ? control.position * control.availableWidth : 0)
+ y: control.topPadding + (horizontal ? 0 : control.position * control.availableHeight)
width: horizontal ? control.size * control.availableWidth : implicitWidth
height: horizontal ? implicitHeight : control.size * control.availableHeight
diff --git a/src/imports/controls/universal/ScrollBar.qml b/src/imports/controls/universal/ScrollBar.qml
index b1bc8f6a..dd0a81ca 100644
--- a/src/imports/controls/universal/ScrollBar.qml
+++ b/src/imports/controls/universal/ScrollBar.qml
@@ -58,8 +58,8 @@ T.ScrollBar {
opacity: 0.0
readonly property bool horizontal: control.orientation === Qt.Horizontal
- x: control.leftPadding + (horizontal ? control.position * control.width : 0)
- y: control.topPadding + (horizontal ? 0 : control.position * control.height)
+ x: control.leftPadding + (horizontal ? control.position * control.availableWidth : 0)
+ y: control.topPadding + (horizontal ? 0 : control.position * control.availableHeight)
width: horizontal ? control.size * control.availableWidth : implicitWidth
height: horizontal ? implicitHeight : control.size * control.availableHeight
}
diff --git a/src/templates/qquickscrollbar.cpp b/src/templates/qquickscrollbar.cpp
index 86d4e290..b3679bf8 100644
--- a/src/templates/qquickscrollbar.cpp
+++ b/src/templates/qquickscrollbar.cpp
@@ -285,9 +285,9 @@ qreal QQuickScrollBar::positionAt(const QPoint &point) const
{
Q_D(const QQuickScrollBar);
if (d->orientation == Qt::Horizontal)
- return point.x() / width();
+ return (point.x() - leftPadding()) / availableWidth();
else
- return point.y() / height();
+ return (point.y() - topPadding()) / availableHeight();
}
#ifndef QT_NO_ACCESSIBILITY
diff --git a/tests/auto/controls/data/tst_scrollbar.qml b/tests/auto/controls/data/tst_scrollbar.qml
index 55f31e12..6e021ccf 100644
--- a/tests/auto/controls/data/tst_scrollbar.qml
+++ b/tests/auto/controls/data/tst_scrollbar.qml
@@ -57,7 +57,7 @@ TestCase {
Component {
id: scrollBar
- ScrollBar { }
+ ScrollBar { padding: 0 }
}
Component {
@@ -210,4 +210,20 @@ TestCase {
control.destroy()
}
+
+ function test_padding_data() {
+ return [
+ { tag: "horizontal", properties: { visible: true, orientation: Qt.Horizontal, width: testCase.width, leftPadding: testCase.width * 0.1 } },
+ { tag: "vertical", properties: { visible: true, orientation: Qt.Vertical, height: testCase.height, topPadding: testCase.height * 0.1 } }
+ ]
+ }
+
+ function test_padding(data) {
+ var control = scrollBar.createObject(testCase, data.properties)
+
+ mousePress(control, control.leftPadding + control.availableWidth * 0.5, control.topPadding + control.availableHeight * 0.5, Qt.LeftButton)
+ mouseRelease(control, control.leftPadding + control.availableWidth * 0.5, control.topPadding + control.availableHeight * 0.5, Qt.LeftButton)
+
+ compare(control.position, 0.5)
+ }
}