Fluid 1.3.0
Material Design for QtQuick and Qml
Loading...
Searching...
No Matches
Slider.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
4pragma ComponentBehavior: Bound
5
6import QtQuick
7import QtQuick.Templates as T
8import Fluid as MD
9
20T.Slider {
21 id: control
22
24 enum LabelBehavior {
25 Floating,
26 WithinBounds,
27 Visible,
28 Gone
29 }
30
32 enum TickVisibilityMode {
33 AutoLimit,
34 AutoHide,
35 Hidden
36 }
37
39 enum Size {
40 ExtraSmall,
41 Small,
42 Medium,
43 Large,
44 ExtraLarge
45 }
46
50 property int labelBehavior: Slider.LabelBehavior.Floating
51
55 property int tickVisibilityMode: Slider.TickVisibilityMode.AutoLimit
56
60 property int size: Slider.Size.ExtraSmall
61
65 property bool centered: false
66
68 property string trackIconActiveStart
69
71 property string trackIconActiveEnd
72
74 property string trackIconInactiveStart
75
77 property string trackIconInactiveEnd
78
80 property color trackIconActiveColor: control.enabled ? control.MD.Style.onPrimaryColor : control.MD.Style.inverseOnSurfaceColor
82 property color trackIconInactiveColor: control.enabled ? control.MD.Style.onSecondaryContainerColor : control.MD.Style.onSurfaceColor
83
88 property string valueIndicatorText: control.value.toLocaleString(Qt.locale(), "f", Number.isInteger(control.value) ? 0 : 2)
89
90 value: centered ? (from + to) / 2 : from
91 snapMode: T.Slider.SnapAlways
92 hoverEnabled: true
93 focusPolicy: Qt.StrongFocus
94
95 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, implicitHandleWidth + leftPadding + rightPadding)
96 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, implicitHandleHeight + topPadding + bottomPadding)
97
98 QtObject {
99 id: metrics
100
101 readonly property real handleHeight: {
102 switch (control.size) {
103 case Slider.Size.ExtraSmall:
104 return MD.Tokens.slider.activeHandleHeightExtraSmall;
105 case Slider.Size.Small:
106 return MD.Tokens.slider.activeHandleHeightSmall;
107 case Slider.Size.Medium:
108 return MD.Tokens.slider.activeHandleHeightMedium;
109 case Slider.Size.Large:
110 return MD.Tokens.slider.activeHandleHeightLarge;
111 case Slider.Size.ExtraLarge:
112 return MD.Tokens.slider.activeHandleHeightExtraLarge;
113 }
114 return MD.Tokens.slider.activeHandleHeightExtraSmall;
115 }
116
117 readonly property real trackHeight: {
118 switch (control.size) {
119 case Slider.Size.ExtraSmall:
120 return MD.Tokens.slider.activeTrackHeightExtraSmall;
121 case Slider.Size.Small:
122 return MD.Tokens.slider.activeTrackHeightSmall;
123 case Slider.Size.Medium:
124 return MD.Tokens.slider.activeTrackHeightMedium;
125 case Slider.Size.Large:
126 return MD.Tokens.slider.activeTrackHeightLarge;
127 case Slider.Size.ExtraLarge:
128 return MD.Tokens.slider.activeTrackHeightExtraLarge;
129 }
130 return MD.Tokens.slider.activeTrackHeightExtraSmall;
131 }
132
133 readonly property real trackOuterCornerRadius: {
134 switch (control.size) {
135 case Slider.Size.ExtraSmall:
136 return MD.Tokens.slider.activeTrackLeadingCornerRadiusExtraSmall;
137 case Slider.Size.Small:
138 return MD.Tokens.slider.activeTrackLeadingCornerRadiusSmall;
139 case Slider.Size.Medium:
140 return MD.Tokens.slider.activeTrackLeadingCornerRadiusMedium;
141 case Slider.Size.Large:
142 return MD.Tokens.slider.activeTrackLeadingCornerRadiusLarge;
143 case Slider.Size.ExtraLarge:
144 return MD.Tokens.slider.activeTrackLeadingCornerRadiusExtraLarge;
145 }
146 return MD.Tokens.slider.activeTrackLeadingCornerRadiusExtraSmall;
147 }
148
149 readonly property real trackIconSize: {
150 switch (control.size) {
151 case Slider.Size.Medium:
152 return MD.Tokens.slider.trackIconSizeMedium;
153 case Slider.Size.Large:
154 return MD.Tokens.slider.trackIconSizeLarge;
155 case Slider.Size.ExtraLarge:
156 return MD.Tokens.slider.trackIconSizeExtraLarge;
157 }
158 return 0;
159 }
160
161 readonly property real trackIconPadding: {
162 switch (control.size) {
163 case Slider.Size.Medium:
164 return MD.Tokens.slider.trackIconPaddingMedium;
165 case Slider.Size.Large:
166 return MD.Tokens.slider.trackIconPaddingLarge;
167 case Slider.Size.ExtraLarge:
168 return MD.Tokens.slider.trackIconPaddingExtraLarge;
169 }
170 return 0;
171 }
172
173 readonly property real effectiveHandleWidth: control.pressed ? MD.Tokens.slider.pressedHandleWidth : (control.visualFocus ? MD.Tokens.slider.focusHandleWidth : MD.Tokens.slider.handleWidth)
174 readonly property real handleContainerSize: trackOuterCornerRadius * 2
175 readonly property bool reservesLabelSpace: control.labelBehavior === Slider.LabelBehavior.WithinBounds || control.labelBehavior === Slider.LabelBehavior.Visible
176 readonly property real labelSpace: {
177 if (!reservesLabelSpace)
178 return 0;
179 const indicatorSize = control.horizontal ? sliderHandle.valueIndicatorHeight : sliderHandle.valueIndicatorWidth;
180 return indicatorSize + MD.Tokens.slider.valueIndicatorActiveBottomSpace;
181 }
182
183 readonly property color activeTrackColor: control.enabled ? control.MD.Style.primaryColor : control.MD.Style.onSurfaceColor
184 readonly property color inactiveTrackColor: control.enabled ? control.MD.Style.secondaryContainerColor : control.MD.Style.onSurfaceColor
185 readonly property color activeTickColor: control.enabled ? control.MD.Style.onPrimaryColor : control.MD.Style.inverseOnSurfaceColor
186 readonly property color inactiveTickColor: control.enabled ? control.MD.Style.onSecondaryContainerColor : control.MD.Style.onSurfaceColor
187 readonly property color handleColor: control.enabled ? control.MD.Style.primaryColor : control.MD.Style.onSurfaceColor
188 readonly property real activeTrackOpacity: control.enabled ? MD.Tokens.slider.visibleOpacity : MD.Tokens.slider.disabledActiveTrackOpacity
189 readonly property real inactiveTrackOpacity: control.enabled ? MD.Tokens.slider.visibleOpacity : MD.Tokens.slider.disabledInactiveTrackOpacity
190 readonly property real handleOpacity: control.enabled ? MD.Tokens.slider.visibleOpacity : MD.Tokens.slider.disabledHandleOpacity
191 }
192
193 background: MD.SliderTrack {
194 horizontal: control.horizontal
195 mirrored: control.mirrored
196 centered: control.centered
197 rangeMode: false
198 controlEnabled: control.enabled
199 visualPosition: control.visualPosition
200 secondVisualPosition: control.visualPosition
201 rangeFrom: control.from
202 rangeTo: control.to
203 stepSize: control.stepSize
204 tickVisibilityMode: control.tickVisibilityMode
205 autoLimitMode: Slider.TickVisibilityMode.AutoLimit
206 autoHideMode: Slider.TickVisibilityMode.AutoHide
207 hiddenMode: Slider.TickVisibilityMode.Hidden
208 trackHeight: metrics.trackHeight
209 trackOuterCornerRadius: metrics.trackOuterCornerRadius
210 handleHeight: metrics.handleHeight
211 effectiveHandleWidth: metrics.effectiveHandleWidth
212 labelSpace: metrics.labelSpace
213 activeTrackColor: metrics.activeTrackColor
214 inactiveTrackColor: metrics.inactiveTrackColor
215 activeTickColor: metrics.activeTickColor
216 inactiveTickColor: metrics.inactiveTickColor
217 activeTrackOpacity: metrics.activeTrackOpacity
218 inactiveTrackOpacity: metrics.inactiveTrackOpacity
219 trackIconActiveStart: control.trackIconActiveStart
220 trackIconActiveEnd: control.trackIconActiveEnd
221 trackIconInactiveStart: control.trackIconInactiveStart
222 trackIconInactiveEnd: control.trackIconInactiveEnd
223 trackIconActiveColor: control.trackIconActiveColor
224 trackIconInactiveColor: control.trackIconInactiveColor
225 trackIconSize: metrics.trackIconSize
226 trackIconPadding: metrics.trackIconPadding
227 }
228
229 handle: MD.SliderHandle {
230 id: sliderHandle
231
232 x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.mirrored ? (control.availableWidth - metrics.labelSpace - width) / 2 : metrics.labelSpace + (control.availableWidth - metrics.labelSpace - width) / 2))
233 y: control.topPadding + (control.horizontal ? metrics.labelSpace + (control.availableHeight - metrics.labelSpace - height) / 2 : control.visualPosition * (control.availableHeight - height))
234
235 valueIndicatorText: control.valueIndicatorText
236 labelBehavior: control.labelBehavior
237 handleHasFocus: control.visualFocus
238 handlePressed: control.pressed
239 handleHovered: control.hovered
240 controlEnabled: control.enabled
241 horizontal: control.horizontal
242 mirrored: control.mirrored
243 controlWidth: control.width
244 controlHeight: control.height
245 activeHandleWidth: metrics.effectiveHandleWidth
246 handleHeight: metrics.handleHeight
247 handleContainerSize: metrics.handleContainerSize
248 handleColor: metrics.handleColor
249 handleOpacity: metrics.handleOpacity
250 valueIndicatorContainerColor: control.MD.Style.inverseSurfaceColor
251 valueIndicatorLabelColor: control.MD.Style.inverseOnSurfaceColor
252 }
253}
Material Design 3 Expressive slider tokens.
Definition slider.h:15
qreal trackIconSizeMedium
Definition slider.h:61
qreal activeTrackHeightSmall
Definition slider.h:20
qreal activeHandleHeightExtraSmall
Definition slider.h:34
qreal activeTrackHeightExtraLarge
Definition slider.h:23
qreal trackIconPaddingExtraLarge
Definition slider.h:66
qreal activeTrackLeadingCornerRadiusSmall
Definition slider.h:27
qreal activeHandleHeightLarge
Definition slider.h:37
qreal activeHandleHeightMedium
Definition slider.h:36
QML_ANONYMOUSqreal activeTrackHeightExtraSmall
Definition slider.h:19
qreal activeHandleHeightSmall
Definition slider.h:35
qreal activeTrackLeadingCornerRadiusExtraLarge READ activeTrackLeadingCornerRadiusExtraLarge
Definition slider.h:33
qreal activeTrackHeightMedium
Definition slider.h:21
qreal handleHeight
Definition slider.h:52
qreal trackIconSizeExtraLarge
Definition slider.h:63
qreal trackIconPaddingMedium
Definition slider.h:64
qreal trackIconSizeLarge
Definition slider.h:62
qreal trackIconPaddingLarge
Definition slider.h:65
qreal activeTrackHeightLarge
Definition slider.h:22
qreal valueIndicatorActiveBottomSpace
Definition slider.h:87
qreal activeTrackLeadingCornerRadiusLarge
Definition slider.h:31
qreal activeTrackLeadingCornerRadiusMedium
Definition slider.h:29
qreal activeHandleHeightExtraLarge
Definition slider.h:38
qreal activeTrackLeadingCornerRadiusExtraSmall READ activeTrackLeadingCornerRadiusExtraSmall
Definition slider.h:25