[vlc-devel] [PATCH] qml: introduce horizontal and vertical spacing property in ExpandGridView

Prince Gupta guptaprince8832 at gmail.com
Mon Apr 20 10:06:10 CEST 2020


---
 modules/gui/qt/widgets/qml/ExpandGridView.qml | 29 ++++++++++++-------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/modules/gui/qt/widgets/qml/ExpandGridView.qml b/modules/gui/qt/widgets/qml/ExpandGridView.qml
index ac6aadf..53c4bb4 100644
--- a/modules/gui/qt/widgets/qml/ExpandGridView.qml
+++ b/modules/gui/qt/widgets/qml/ExpandGridView.qml
@@ -18,6 +18,7 @@
 import QtQuick 2.11
 import QtQuick.Controls 2.4
 import "qrc:///util/KeyHelper.js" as KeyHelper
+import "qrc:///style/"
 
 NavigableFocusScope {
     id: root
@@ -31,6 +32,12 @@ NavigableFocusScope {
     property int marginBottom: root.cellHeight / 2
     property int marginTop: root.cellHeight / 3
 
+    property int horizontalSpacing: VLCStyle.margin_normal
+    property int verticalSpacing: VLCStyle.margin_normal
+
+    readonly property int _effectiveCellWidth: cellWidth + horizontalSpacing
+    readonly property int _effectiveCellHeight: cellHeight + verticalSpacing
+
     property variant delegateModel
     property variant model
 
@@ -86,7 +93,7 @@ NavigableFocusScope {
     }
 
     function getNbItemsPerRow() {
-        return Math.max(Math.floor(width / root.cellWidth), 1)
+        return Math.max(Math.floor((width + root.horizontalSpacing) / root._effectiveCellWidth), 1)
     }
 
     function getItemRowCol(id) {
@@ -98,9 +105,9 @@ NavigableFocusScope {
 
     function getItemPos(id) {
         var colCount = root.getNbItemsPerRow()
-        var remainingSpace = flickable.width - colCount * root.cellWidth
+        var remainingSpace = flickable.width - (colCount * root._effectiveCellWidth) + root.horizontalSpacing
         var rowCol = getItemRowCol(id)
-        return [(rowCol[0] * root.cellWidth) + (remainingSpace / 2), rowCol[1] * root.cellHeight + headerHeight]
+        return [(rowCol[0] * root._effectiveCellWidth) + (remainingSpace / 2), rowCol[1] * root._effectiveCellHeight + headerHeight]
     }
 
     //use the same signature as Gridview.positionViewAtIndex(index, PositionMode mode)
@@ -119,7 +126,7 @@ NavigableFocusScope {
         var newContentY = flickable.contentY
 
         var itemTopY = root.getItemPos(index)[1]
-        var itemBottomY = itemTopY + root.cellHeight
+        var itemBottomY = itemTopY + root._effectiveCellHeight
 
         var viewTopY = flickable.contentY
         var viewBottomY = viewTopY + flickable.height
@@ -185,10 +192,10 @@ NavigableFocusScope {
             heightWithoutExpand -= expandDisplayedHeight
         }
 
-        var rowId = Math.floor(contentYWithoutExpand / root.cellHeight)
+        var rowId = Math.floor(contentYWithoutExpand / root._effectiveCellHeight)
         var firstId = Math.max(rowId * root.getNbItemsPerRow(), 0)
 
-        rowId = Math.ceil((contentYWithoutExpand + heightWithoutExpand) / root.cellHeight)
+        rowId = Math.ceil((contentYWithoutExpand + heightWithoutExpand) / root._effectiveCellHeight)
         var lastId = Math.min(rowId * root.getNbItemsPerRow(), delegateModel.count)
 
         return [firstId, lastId]
@@ -218,7 +225,7 @@ NavigableFocusScope {
         Loader {
             id: headerItemLoader
             //load the header early (when the first row is visible)
-            visible: flickable.contentY < root.headerHeight + root.cellHeight
+            visible: flickable.contentY < root.headerHeight + root._effectiveCellHeight
             sourceComponent: headerDelegate
             focus: item.focus
             onFocusChanged: {
@@ -356,11 +363,11 @@ NavigableFocusScope {
             }
 
             // Calculate and set the contentHeight
-            var newContentHeight = root.getItemPos(delegateModel.count - 1)[1] + root.cellHeight
+            var newContentHeight = root.getItemPos(delegateModel.count - 1)[1] + root._effectiveCellHeight
             if (root._expandIndex !== -1)
                 newContentHeight += expandItem.height
             contentHeight = newContentHeight
-            contentWidth = root.cellWidth * root.getNbItemsPerRow()
+            contentWidth = root._effectiveCellWidth * root.getNbItemsPerRow() - root.horizontalSpacing
 
             _updateSelected()
         }
@@ -390,7 +397,7 @@ NavigableFocusScope {
             }
             onCurrentItemYChanged: {
                 var newContentY = flickable.contentY;
-                var currentItemYPos = root.getItemPos(currentIndex)[1] + cellHeight + expandItem.currentItemY
+                var currentItemYPos = root.getItemPos(currentIndex)[1] + _effectiveCellHeight + expandItem.currentItemY
                 if (currentItemYPos + expandItem.currentItemHeight > flickable.contentY + flickable.height) {
                     //move viewport to see current item bottom
                     newContentY = Math.min(
@@ -432,7 +439,7 @@ NavigableFocusScope {
 
             // Sliding animation
             var currentItemYPos = root.getItemPos(_expandIndex)[1]
-            currentItemYPos += root.cellHeight / 2
+            currentItemYPos += root._effectiveCellHeight / 2
             animateFlickableContentY(currentItemYPos)
         }
 
-- 
2.20.1



More information about the vlc-devel mailing list