aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-20 07:10:34 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2016-03-21 16:20:08 +0000
commit737bdea1e3dc41b5b30bb26c36224e31966ebd54 (patch)
treef1a2d013db2b7aa21c251553baae29f89712c861
parent1cec731d40f6ed8a7755c9e3c0d100afbe099ed8 (diff)
ScrollBar: use contentItem instead of handle
Thanks to virtual resizeContent() we can finally use contentItem like everywhere else, and cleanup the special handle item. Change-Id: I9e52ec3ff327d19cda3d85d2e2d9b73d80442bbc Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r--src/imports/controls/ScrollBar.qml16
-rw-r--r--src/imports/controls/doc/images/qtquickcontrols-scrollbar-contentItem.png (renamed from src/imports/controls/doc/images/qtquickcontrols-scrollbar-handle.png)bin248 -> 248 bytes
-rw-r--r--src/imports/controls/doc/snippets/qtquickcontrols-scrollbar-contentItem.qml (renamed from src/imports/controls/doc/snippets/qtquickcontrols-scrollbar-handle.qml)2
-rw-r--r--src/imports/controls/doc/src/qtlabscontrols-customize.qdoc8
-rw-r--r--src/imports/controls/material/ScrollBar.qml16
-rw-r--r--src/imports/controls/plugins.qmltypes1
-rw-r--r--src/imports/controls/universal/ScrollBar.qml20
-rw-r--r--src/imports/templates/plugins.qmltypes1
-rw-r--r--src/templates/qquickscrollbar.cpp52
-rw-r--r--src/templates/qquickscrollbar_p.h5
10 files changed, 46 insertions, 75 deletions
diff --git a/src/imports/controls/ScrollBar.qml b/src/imports/controls/ScrollBar.qml
index 55d53191..16ac2dfc 100644
--- a/src/imports/controls/ScrollBar.qml
+++ b/src/imports/controls/ScrollBar.qml
@@ -41,14 +41,14 @@ T.ScrollBar {
id: control
implicitWidth: Math.max(background ? background.implicitWidth : 0,
- handle.implicitWidth + leftPadding + rightPadding)
+ contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
- handle.implicitHeight + topPadding + bottomPadding)
+ contentItem.implicitHeight + topPadding + bottomPadding)
padding: 2
- //! [handle]
- handle: Rectangle {
+ //! [contentItem]
+ contentItem: Rectangle {
id: handle
implicitWidth: 6
@@ -59,12 +59,6 @@ T.ScrollBar {
visible: control.size < 1.0
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)
- width: horizontal ? control.size * control.availableWidth : implicitWidth
- height: horizontal ? implicitHeight : control.size * control.availableHeight
-
states: State {
name: "active"
when: control.active
@@ -79,5 +73,5 @@ T.ScrollBar {
}
}
}
- //! [handle]
+ //! [contentItem]
}
diff --git a/src/imports/controls/doc/images/qtquickcontrols-scrollbar-handle.png b/src/imports/controls/doc/images/qtquickcontrols-scrollbar-contentItem.png
index 5d916e66..5d916e66 100644
--- a/src/imports/controls/doc/images/qtquickcontrols-scrollbar-handle.png
+++ b/src/imports/controls/doc/images/qtquickcontrols-scrollbar-contentItem.png
Binary files differ
diff --git a/src/imports/controls/doc/snippets/qtquickcontrols-scrollbar-handle.qml b/src/imports/controls/doc/snippets/qtquickcontrols-scrollbar-contentItem.qml
index 45cde698..d1ce40d7 100644
--- a/src/imports/controls/doc/snippets/qtquickcontrols-scrollbar-handle.qml
+++ b/src/imports/controls/doc/snippets/qtquickcontrols-scrollbar-contentItem.qml
@@ -34,7 +34,7 @@ ScrollBar {
active: true
height: 100
Rectangle {
- parent: handle
+ parent: contentItem
anchors.fill: parent
color: "transparent"
border.color: "red"
diff --git a/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc b/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc
index daa74795..df1ba5d0 100644
--- a/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc
+++ b/src/imports/controls/doc/src/qtlabscontrols-customize.qdoc
@@ -354,7 +354,7 @@
\section1 Customizing ScrollBar
ScrollBar consists of two visual items: \l {Control::background}{background}
- and \l {ScrollBar::handle}{handle}.
+ and \l {Control::contentItem}{content item}.
\section3 Background
@@ -362,11 +362,11 @@
ScrollBar has no background item by default.
- \section3 Handle
+ \section3 Content item
- \image qtquickcontrols-scrollbar-handle.png
+ \image qtquickcontrols-scrollbar-contentItem.png
- \snippet ScrollBar.qml handle
+ \snippet ScrollBar.qml contentItem
\section1 Customizing ScrollIndicator
diff --git a/src/imports/controls/material/ScrollBar.qml b/src/imports/controls/material/ScrollBar.qml
index 539b9243..7156b933 100644
--- a/src/imports/controls/material/ScrollBar.qml
+++ b/src/imports/controls/material/ScrollBar.qml
@@ -42,14 +42,14 @@ T.ScrollBar {
id: control
implicitWidth: Math.max(background ? background.implicitWidth : 0,
- handle.implicitWidth + leftPadding + rightPadding)
+ contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
- handle.implicitHeight + topPadding + bottomPadding)
+ contentItem.implicitHeight + topPadding + bottomPadding)
padding: 2
- //! [handle]
- handle: Rectangle {
+ //! [contentItem]
+ contentItem: Rectangle {
id: handle
implicitWidth: 4
@@ -59,12 +59,6 @@ T.ScrollBar {
visible: control.size < 1.0
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)
- width: horizontal ? control.size * control.availableWidth : implicitWidth
- height: horizontal ? implicitHeight : control.size * control.availableHeight
-
states: State {
name: "active"
when: control.active
@@ -79,5 +73,5 @@ T.ScrollBar {
}
}
}
- //! [handle]
+ //! [contentItem]
}
diff --git a/src/imports/controls/plugins.qmltypes b/src/imports/controls/plugins.qmltypes
index 08597083..9a8b1255 100644
--- a/src/imports/controls/plugins.qmltypes
+++ b/src/imports/controls/plugins.qmltypes
@@ -502,7 +502,6 @@ Module {
Property { name: "active"; type: "bool" }
Property { name: "pressed"; type: "bool" }
Property { name: "orientation"; type: "Qt::Orientation" }
- Property { name: "handle"; type: "QQuickItem"; isPointer: true }
Method {
name: "setSize"
Parameter { name: "size"; type: "double" }
diff --git a/src/imports/controls/universal/ScrollBar.qml b/src/imports/controls/universal/ScrollBar.qml
index b1bc8f6a..393a640e 100644
--- a/src/imports/controls/universal/ScrollBar.qml
+++ b/src/imports/controls/universal/ScrollBar.qml
@@ -42,28 +42,22 @@ T.ScrollBar {
id: control
implicitWidth: Math.max(background ? background.implicitWidth : 0,
- handle.implicitWidth + leftPadding + rightPadding)
+ contentItem.implicitWidth + leftPadding + rightPadding)
implicitHeight: Math.max(background ? background.implicitHeight : 0,
- handle.implicitHeight + topPadding + bottomPadding)
+ contentItem.implicitHeight + topPadding + bottomPadding)
// TODO: arrows
- //! [handle]
- handle: Rectangle {
+ //! [contentItem]
+ contentItem: Rectangle {
implicitWidth: 12
implicitHeight: 12
color: control.pressed ? control.Universal.baseMediumColor : control.Universal.chromeHighColor
visible: control.size < 1.0
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)
- width: horizontal ? control.size * control.availableWidth : implicitWidth
- height: horizontal ? implicitHeight : control.size * control.availableHeight
}
- //! [handle]
+ //! [contentItem]
//! [background]
background: Rectangle {
@@ -86,13 +80,13 @@ T.ScrollBar {
transitions: [
Transition {
to: "active"
- NumberAnimation { targets: [handle, background]; property: "opacity"; to: 1.0 }
+ NumberAnimation { targets: [contentItem, background]; property: "opacity"; to: 1.0 }
},
Transition {
from: "active"
SequentialAnimation {
PauseAnimation { duration: 3000 }
- NumberAnimation { targets: [handle, background]; property: "opacity"; to: 0.0 }
+ NumberAnimation { targets: [contentItem, background]; property: "opacity"; to: 0.0 }
}
}
]
diff --git a/src/imports/templates/plugins.qmltypes b/src/imports/templates/plugins.qmltypes
index 94cdf8cc..54f44d16 100644
--- a/src/imports/templates/plugins.qmltypes
+++ b/src/imports/templates/plugins.qmltypes
@@ -496,7 +496,6 @@ Module {
Property { name: "active"; type: "bool" }
Property { name: "pressed"; type: "bool" }
Property { name: "orientation"; type: "Qt::Orientation" }
- Property { name: "handle"; type: "QQuickItem"; isPointer: true }
Method {
name: "setSize"
Parameter { name: "size"; type: "double" }
diff --git a/src/templates/qquickscrollbar.cpp b/src/templates/qquickscrollbar.cpp
index 60e68e3b..e457e510 100644
--- a/src/templates/qquickscrollbar.cpp
+++ b/src/templates/qquickscrollbar.cpp
@@ -85,7 +85,7 @@ class QQuickScrollBarPrivate : public QQuickControlPrivate
public:
QQuickScrollBarPrivate() : size(0), position(0), offset(0),
active(false), pressed(false), moving(false),
- orientation(Qt::Vertical), handle(nullptr)
+ orientation(Qt::Vertical)
{
}
@@ -96,6 +96,8 @@ public:
qreal positionAt(const QPoint &point) const;
+ void resizeContent() override;
+
qreal size;
qreal position;
qreal offset;
@@ -103,7 +105,6 @@ public:
bool pressed;
bool moving;
Qt::Orientation orientation;
- QQuickItem *handle;
};
qreal QQuickScrollBarPrivate::positionAt(const QPoint &point) const
@@ -115,6 +116,21 @@ qreal QQuickScrollBarPrivate::positionAt(const QPoint &point) const
return point.y() / q->height();
}
+void QQuickScrollBarPrivate::resizeContent()
+{
+ Q_Q(QQuickScrollBar);
+ if (!contentItem)
+ return;
+
+ if (orientation == Qt::Horizontal) {
+ contentItem->setPosition(QPointF(q->leftPadding() + position * q->availableWidth(), q->topPadding()));
+ contentItem->setSize(QSizeF(q->availableWidth() * size, q->availableHeight()));
+ } else {
+ contentItem->setPosition(QPointF(q->leftPadding(), q->topPadding() + position * q->availableHeight()));
+ contentItem->setSize(QSizeF(q->availableWidth(), q->availableHeight() * size));
+ }
+}
+
QQuickScrollBar::QQuickScrollBar(QQuickItem *parent) :
QQuickControl(*(new QQuickScrollBarPrivate), parent)
{
@@ -152,6 +168,8 @@ void QQuickScrollBar::setSize(qreal size)
return;
d->size = size;
+ if (isComponentComplete())
+ d->resizeContent();
emit sizeChanged();
}
@@ -175,6 +193,8 @@ void QQuickScrollBar::setPosition(qreal position)
return;
d->position = position;
+ if (isComponentComplete())
+ d->resizeContent();
emit positionChanged();
}
@@ -245,35 +265,11 @@ void QQuickScrollBar::setOrientation(Qt::Orientation orientation)
return;
d->orientation = orientation;
+ if (isComponentComplete())
+ d->resizeContent();
emit orientationChanged();
}
-/*!
- \qmlproperty Item Qt.labs.controls::ScrollBar::handle
-
- This property holds the handle item.
-
- \sa {Customizing ScrollBar}
-*/
-QQuickItem *QQuickScrollBar::handle() const
-{
- Q_D(const QQuickScrollBar);
- return d->handle;
-}
-
-void QQuickScrollBar::setHandle(QQuickItem *handle)
-{
- Q_D(QQuickScrollBar);
- if (d->handle == handle)
- return;
-
- delete d->handle;
- d->handle = handle;
- if (handle && !handle->parentItem())
- handle->setParentItem(this);
- emit handleChanged();
-}
-
void QQuickScrollBar::mousePressEvent(QMouseEvent *event)
{
Q_D(QQuickScrollBar);
diff --git a/src/templates/qquickscrollbar_p.h b/src/templates/qquickscrollbar_p.h
index eda26cf4..1803c30a 100644
--- a/src/templates/qquickscrollbar_p.h
+++ b/src/templates/qquickscrollbar_p.h
@@ -64,7 +64,6 @@ class Q_QUICKTEMPLATES_EXPORT QQuickScrollBar : public QQuickControl
Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged FINAL)
Q_PROPERTY(bool pressed READ isPressed WRITE setPressed NOTIFY pressedChanged FINAL)
Q_PROPERTY(Qt::Orientation orientation READ orientation WRITE setOrientation NOTIFY orientationChanged FINAL)
- Q_PROPERTY(QQuickItem *handle READ handle WRITE setHandle NOTIFY handleChanged FINAL)
public:
explicit QQuickScrollBar(QQuickItem *parent = nullptr);
@@ -83,9 +82,6 @@ public:
Qt::Orientation orientation() const;
void setOrientation(Qt::Orientation orientation);
- QQuickItem *handle() const;
- void setHandle(QQuickItem *handle);
-
public Q_SLOTS:
void setSize(qreal size);
void setPosition(qreal position);
@@ -96,7 +92,6 @@ Q_SIGNALS:
void activeChanged();
void pressedChanged();
void orientationChanged();
- void handleChanged();
protected:
void mousePressEvent(QMouseEvent *event) override;