From 411597777be6421db942f1618fa9ee583dfc4807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Schummer?= <ext-jorg.2.schummer@nokia.com> Date: Wed, 24 Feb 2010 19:07:31 +0200 Subject: [PATCH] QmlDesigner.ItemLibrary: fixed scrolling - view is not moving anymore when opening/closing sections --- .../components/itemlibrary/qml/ItemsView.qml | 8 +- .../itemlibrary/qml/ItemsViewStyle.qml | 8 +- .../components/itemlibrary/qml/Scrollbar.qml | 96 +++++++++---------- 3 files changed, 50 insertions(+), 62 deletions(-) diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml index 2adb1899344..87c6080f962 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml +++ b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsView.qml @@ -67,7 +67,7 @@ Rectangle { function expandAll() { expandAllEntries(); - scrollbar.handleBar.y = 0; + scrollbar.moveHandle(0, true) } signal expandAllEntries() @@ -134,8 +134,6 @@ Rectangle { interactive: false viewportHeight: col.height - onViewportHeightChanged: scrollbar.limitHandle() - Column { id: col @@ -151,7 +149,7 @@ Rectangle { style: itemsView.style scrollFlickable: itemsFlickable - onMoveScrollbarHandle: scrollbar.moveHandle(viewportPos) + onMoveScrollbarHandle: scrollbar.moveHandle(viewportPos, true) width: itemsView.cellWidth height: itemsView.cellHeight @@ -169,7 +167,7 @@ Rectangle { anchors.leftMargin: -10 anchors.right: parent.right - scrollFlickable: itemsFlickable + flickable: itemsFlickable style: itemsView.style } } diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml index f8047c6f098..6782f9dd514 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml +++ b/src/plugins/qmldesigner/components/itemlibrary/qml/ItemsViewStyle.qml @@ -33,16 +33,16 @@ Item { property string backgroundColor: "#707070" property string raisedBackgroundColor: "#e0e0e0" - property string scrollbarBackgroundColor: "#505050" - property string scrollbarHandleColor: "#303030" + property string scrollbarBorderColor: "#8F8F8F" + property string scrollbarGradientStartColor: "#7E7E7E" + property string scrollbarGradientEndColor: "#C6C6C6" + property int scrollbarClickScrollAmount: 40 property string itemNameTextColor: "#FFFFFF" property string sectionTitleTextColor: "#f0f0f0" property string sectionTitleBackgroundColor: "#909090" -// property string gridLineLighter: "#787878" -// property string gridLineDarker: "#656565" property string gridLineLighter: "#808080" property string gridLineDarker: "#606060" diff --git a/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml b/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml index 47dce94f293..333f1a3871e 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml +++ b/src/plugins/qmldesigner/components/itemlibrary/qml/Scrollbar.qml @@ -32,51 +32,37 @@ import Qt 4.6 Item { id: bar - property var handleBar: handle - - property var scrollFlickable + property var flickable property var style - property bool scrolling: (scrollFlickable.viewportHeight > scrollFlickable.height) property int scrollHeight: height - handle.height - Binding { - target: scrollFlickable - property: "viewportY" - value: Math.max(0, scrollFlickable.viewportHeight - scrollFlickable.height) * - handle.y / scrollHeight - } - Rectangle { anchors.fill: parent; anchors.rightMargin: 1 anchors.bottomMargin: 1 color: "transparent" border.width: 1; - border.color: "#8F8F8F"; + border.color: style.scrollbarBorderColor; } - function moveHandle(viewportPos) { - var pos; + function moveHandle(viewportPos, updateFlickable) { + handle.updateFlickable = updateFlickable - if (bar.scrollFlickable) {//.visibleArea.yPosition) { - pos = bar.scrollHeight * viewportPos / (bar.scrollFlickable.viewportHeight - bar.scrollFlickable.height); - } else - pos = 0; + if (flickable) + handle.y = scrollHeight * Math.min( + viewportPos / (flickable.viewportHeight - flickable.height), + 1); + else + handle.y = 0; -// handleMoveAnimation.to = Math.min(bar.scrollHeight, pos) -// handleMoveAnimation.start(); - handle.y = Math.min(bar.scrollHeight, pos) + handle.updateFlickable = true } - function limitHandle() { - // the following "if" is needed to get around NaN when starting up - if (scrollFlickable) - handle.y = Math.min(handle.height * scrollFlickable.visibleArea.yPosition, - scrollHeight); - else - handle.y = 0; + function updateHandle() { + moveHandle(flickable.viewportY, false); } + /* NumberAnimation { id: handleResetAnimation @@ -87,31 +73,29 @@ Item { duration: 500 } */ + + onFlickableChanged: moveHandle(0, true) + Connection { - sender: scrollFlickable + sender: flickable signal: "heightChanged" - script: { - /* since binding loops prevent setting the handle properly, - let's animate it to 0 */ - if (scrollFlickable.viewportY > (scrollFlickable.viewportHeight - scrollFlickable.height)) -// handleResetAnimation.start() - handle.y = 0 - } + script: moveHandle(0, true) } - onScrollFlickableChanged: handle.y = 0 + Connection { + sender: flickable + signal: "viewportHeightChanged" + script: updateHandle() + } -/* - Rectangle { - anchors.fill: parent - anchors.leftMargin: 3 - anchors.rightMargin: 3 - anchors.topMargin: 2 - anchors.bottomMargin: 2 - radius: width / 2 - color: style.scrollbarBackgroundColor + Connection { + sender: flickable + signal: "positionYChanged" + script: updateHandle() } -*/ + + onHeightChanged: updateHandle() + MouseRegion { anchors.left: parent.left anchors.right: parent.right @@ -120,7 +104,7 @@ Item { onClicked: { // handleMoveAnimation.to = Math.max(0, handle.y - 40) // handleMoveAnimation.start(); - handle.y = Math.max(0, handle.y - 40) + handle.y = Math.max(0, handle.y - style.scrollbarClickScrollAmount) } } @@ -131,7 +115,14 @@ Item { anchors.leftMargin: 1 anchors.right: parent.right // anchors.rightMargin: 1 - height: Math.max(width, bar.height * Math.min(1, scrollFlickable.visibleArea.heightRatio)) + height: Math.max(width, bar.height * Math.min(1, flickable.height / flickable.viewportHeight)) + + property bool updateFlickable: true + + onYChanged: { + if (updateFlickable) + flickable.viewportY = Math.max(0, flickable.viewportHeight * y / bar.height) + } Rectangle { width: parent.height - 1 @@ -142,8 +133,8 @@ Item { transformOrigin: Item.BottomLeft gradient: Gradient { - GradientStop { position: 0.0; color: "#7E7E7E" } - GradientStop { position: 1.0; color: "#C6C6C6" } + GradientStop { position: 0.0; color: style.scrollbarGradientStartColor } + GradientStop { position: 1.0; color: style.scrollbarGradientEndColor } } } @@ -164,7 +155,7 @@ Item { onClicked: { // handleMoveAnimation.to = Math.min(scrollHeight, handle.y + 40) // handleMoveAnimation.start(); - handle.y = Math.min(scrollHeight, handle.y + 40) + handle.y = Math.min(scrollHeight, handle.y + style.scrollbarClickScrollAmount) } } /* @@ -176,4 +167,3 @@ Item { } */ } - -- GitLab