Fluid 1.3.0
Material Design for QtQuick and Qml
Loading...
Searching...
No Matches
AutomaticGridLayout.qml
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com>
2// SPDX-License-Identifier: MPL-2.0
3
4import QtQuick
5import QtQuick.Layouts
6import Fluid as MD
7
55GridLayout {
56 id: grid
57 Accessible.ignored: true
58
65 property real cellWidth: __inferredCellWidth
66
73 property real cellHeight: __inferredCellHeight
74
75 function __isLayoutChild(child) {
76 return child && child.visible
77 && String(child).indexOf("QQuickRepeater") !== 0;
78 }
79
80 readonly property int __visibleChildCount: {
81 let count = 0;
82 for (const child of children) {
83 if (__isLayoutChild(child))
84 ++count;
85 }
86 return count;
87 }
88
89 readonly property real __inferredCellWidth: {
90 let maximum = 0;
91 for (const child of children) {
92 if (!__isLayoutChild(child))
93 continue;
94 const preferred = child.Layout.preferredWidth;
95 const effective = Number.isFinite(preferred) && preferred >= 0
96 ? preferred : child.implicitWidth;
97 if (Number.isFinite(effective) && effective > maximum)
98 maximum = effective;
99 }
100 return maximum;
101 }
102
103 readonly property real __inferredCellHeight: {
104 let maximum = 0;
105 for (const child of children) {
106 if (!__isLayoutChild(child))
107 continue;
108 const preferred = child.Layout.preferredHeight;
109 const effective = Number.isFinite(preferred) && preferred >= 0
110 ? preferred : child.implicitHeight;
111 if (Number.isFinite(effective) && effective > maximum)
112 maximum = effective;
113 }
114 return maximum;
115 }
116
117 function __fittedTrackCount(availableSize, spacing, minimumSize) {
118 if (__visibleChildCount < 1
119 || !Number.isFinite(availableSize) || availableSize <= 0
120 || !Number.isFinite(spacing) || spacing < 0
121 || !Number.isFinite(minimumSize) || minimumSize <= 0)
122 return 1;
123
124 const fitted = Math.floor((availableSize + spacing)
125 / (minimumSize + spacing));
126 return Math.max(1, Math.min(fitted, __visibleChildCount));
127 }
128
129 columns: flow === GridLayout.LeftToRight
130 ? __fittedTrackCount(width, columnSpacing, cellWidth) : 1
131 rows: flow === GridLayout.TopToBottom
132 ? __fittedTrackCount(height, rowSpacing, cellHeight) : 1
133
134 columnSpacing: MD.Tokens.measurement.space200
135 rowSpacing: MD.Tokens.measurement.space200
136 uniformCellWidths: true
137 uniformCellHeights: true
138}
Material Design 3 design tokens.
Definition tokens.h:68