[vlc-devel] [PATCH 3/3] qml: use HorizontalResizeHandle to make playlist horizontally resizable
Prince Gupta
guptaprince8832 at gmail.com
Mon Aug 24 17:16:14 CEST 2020
---
.../gui/qt/medialibrary/qml/MainDisplay.qml | 139 ++++++------------
1 file changed, 49 insertions(+), 90 deletions(-)
diff --git a/modules/gui/qt/medialibrary/qml/MainDisplay.qml b/modules/gui/qt/medialibrary/qml/MainDisplay.qml
index cfd6f12189..e61a2bfe51 100644
--- a/modules/gui/qt/medialibrary/qml/MainDisplay.qml
+++ b/modules/gui/qt/medialibrary/qml/MainDisplay.qml
@@ -46,16 +46,6 @@ Widgets.NavigableFocusScope {
medialib.reload()
}
- /// playlist width properties used for binding after resize:
- // Binding allows playlist to scale when root width changes *even after playlist is resized*
- // New supposed width of the playlist = root.width / playlistColumn.__widthFactor
- // Playlist width difference after playlist resize event: (playlistColumn.__newWidth - playlistColumn.__oldRootWidth / playlistColumn.__widthFactor)
- // Width factor of the width difference for root width changes: (root.width / playlistColumn.__oldRootWidth)
- readonly property real playlistDefaultWidth: root.width / playlistColumn.__widthFactor
- readonly property real playlistBindingWidth: playlistDefaultWidth + ((playlistColumn.__newWidth - playlistColumn.__oldRootWidth / playlistColumn.__widthFactor) * root.width / playlistColumn.__oldRootWidth)
- readonly property real playlistMinWidth: VLCStyle.dp(225)
- readonly property real playlistMaxWidth: root.width / 2
-
function loadView() {
var found = stackView.loadView(root.pageModel, root.view, root.viewProperties)
@@ -223,61 +213,54 @@ Widgets.NavigableFocusScope {
right: parent.right
bottom: parent.bottom
}
- width: root.width / __widthFactor
- visible: false
focus: false
property bool expanded: mainInterface.playlistDocked && mainInterface.playlistVisible
- property double __widthFactor : mainInterface.playlistWidthFactor ? mainInterface.playlistWidthFactor : 4.0
- property int __newWidth : root.width / __widthFactor
- property int __oldRootWidth : root.width
-
- onExpandedChanged: {
- if (expanded) {
- animateExpand.start()
- playlistColumn.forceActiveFocus()
- }
- else {
- animateRetract.start()
- stackView.forceActiveFocus()
- }
- }
- PropertyAnimation {
- id: animateExpand;
- easing.type: Easing.InSine
- target: playlistColumn;
- properties: "width"
- duration: 150
- from: 0
- to: playlistBindingWidth
- onStarted: {
- playlistColumn.visible = true
+ state: playlistColumn.expanded ? "expanded" : "collapsed"
+
+ states: [
+ State {
+ name: "expanded"
+ PropertyChanges {
+ target: playlistColumn
+ width: resizeHandle.clamp(root.width / resizeHandle.widthFactor,
+ VLCStyle.dp(225),
+ root.width / 2)
+ visible: true
+ }
+ },
+ State {
+ name: "collapsed"
+ PropertyChanges {
+ target: playlistColumn
+ width: 0
+ visible: false
+ }
}
+ ]
- onStopped: {
- playlistColumn.width = Qt.binding(function() {
- if (playlistBindingWidth < playlistMinWidth)
- return playlistMinWidth
- else if (playlistBindingWidth > playlistMaxWidth)
- return playlistMaxWidth
- else
- return playlistBindingWidth
- })
- }
- }
+ transitions: [
+ Transition {
+ from: "*"
+ to: "collapsed"
- PropertyAnimation {
- id: animateRetract;
- easing.type: Easing.OutSine
- target: playlistColumn;
- properties: "width"
- duration: 150
- to: 0
- onStopped: {
- playlistColumn.visible = false
+ SequentialAnimation {
+ SmoothedAnimation { target: playlistColumn; property: "width"; easing.type: Easing.OutSine; duration: 150; }
+ PropertyAction { target: playlistColumn; property: "visible" }
+ }
+ },
+
+ Transition {
+ from: "*"
+ to: "expanded"
+
+ SequentialAnimation {
+ PropertyAction { target: playlistColumn; property: "visible" }
+ SmoothedAnimation { target: playlistColumn; property: "width"; easing.type: Easing.OutSine; duration: 150; }
+ }
}
- }
+ ]
ColumnLayout {
anchors.fill: parent
@@ -333,44 +316,20 @@ Widgets.NavigableFocusScope {
color: VLCStyle.colors.glowColor
}
- MouseArea {
- id: dragArea
+ Widgets.HorizontalResizeHandle {
+ id: resizeHandle
anchors {
top: parent.top
bottom: parent.bottom
- horizontalCenter: parent.horizontalCenter
+ left: parent.left
}
- width: VLCStyle.dp(8)
- property var _initialPos : playlistColumn.x
- drag { target: parent; axis: Drag.XAxis }
- onPositionChanged: {
- if(drag.active){
- var delta = mouseX - _initialPos
- var newWidth = playlistColumn.width - delta
- if (newWidth < playlistMaxWidth && newWidth > playlistMinWidth)
- playlistColumn.width -= delta
- }
- }
- onPressed: {
- // This is needed to break binding upon resizing, otherwise sizing glitches occur.
- playlistColumn.width = Number(playlistColumn.width)
- dragArea._initialPos = mouseX
- playlistColumn.__oldRootWidth = root.width
- }
- onReleased: {
- playlistColumn.__newWidth = playlistColumn.width
- playlistColumn.width = Qt.binding(function() {
- if (playlistBindingWidth < playlistMinWidth)
- return playlistMinWidth
- else if (playlistBindingWidth > playlistMaxWidth)
- return playlistMaxWidth
- else
- return playlistBindingWidth
- })
- mainInterface.setPlaylistWidthFactor(root.width / playlistColumn.width)
- }
- cursorShape: Qt.SizeHorCursor
+ atRight: false
+ targetWidth: playlistColumn.width
+ sourceWidth: root.width
+ widthFactor: mainInterface.playlistWidthFactor
+
+ onWidthFactorChanged: mainInterface.setPlaylistWidthFactor(widthFactor)
}
}
}
--
2.25.1
More information about the vlc-devel
mailing list