Fluid 1.3.0
Material Design for QtQuick and Qml
Loading...
Searching...
No Matches
CheckBox.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.Templates as T
6import Fluid as MD
7
18T.CheckBox {
19 id: rootControl
20
22 property MD.typescale typescale: MD.Tokens.typescale.labelLarge
23
25 property bool error: false
26
27 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, implicitContentWidth + leftPadding + rightPadding)
28 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, implicitContentHeight + topPadding + bottomPadding, implicitIndicatorHeight + topPadding + bottomPadding)
29
30 spacing: MD.Tokens.checkBox.contentSpacing
31 padding: MD.Tokens.checkBox.contentPadding
32 verticalPadding: padding + 7
33
34 hoverEnabled: true
35 focusPolicy: Qt.StrongFocus
36
37 QtObject {
38 id: visualState
39
40 property color iconColor: rootControl.error ? rootControl.MD.Style.onErrorColor : rootControl.MD.Style.onPrimaryColor
41 property color containerColor: rootControl.checkState === Qt.Unchecked ? "transparent" : rootControl.error ? rootControl.MD.Style.errorColor : rootControl.MD.Style.primaryColor
42 property color outlineColor: rootControl.error ? rootControl.MD.Style.errorColor : MD.Style.onSurfaceVariantColor
43 property color labelColor: rootControl.MD.Style.onSurfaceColor
44 property color stateLayerColor: "transparent"
45
46 property real outlineWidth: rootControl.checkState == Qt.Checked ? MD.Tokens.checkBox.selectedOutlineWidth : MD.Tokens.checkBox.unselectedOutlineWidth
47
48 property real contentOpacity: 1.0
49 property real containerOpacity: 1.0
50 property real stateLayerOpacity: 1.0
51 }
52
53 states: [
54 State {
55 name: "disabled"
56 when: !rootControl.enabled
57
58 PropertyChanges {
59 visualState.iconColor: rootControl.MD.Style.surfaceColor
60 visualState.containerColor: rootControl.checkState === Qt.Unchecked ? "transparent" : rootControl.error ? rootControl.MD.Style.errorColor : rootControl.MD.Style.onSurfaceColor
61 visualState.outlineColor: rootControl.error ? rootControl.MD.Style.errorColor : rootControl.checkState === Qt.Checked ? MD.Style.onSurfaceVariantColor : rootControl.MD.Style.onSurfaceColor
62 visualState.outlineWidth: rootControl.checkState == Qt.Checked ? MD.Tokens.checkBox.selectedOutlineWidth : MD.Tokens.checkBox.unselectedOutlineWidth
63 visualState.contentOpacity: MD.Tokens.checkBox.selectedDisabledContainerOpacity
64 visualState.containerOpacity: MD.Tokens.checkBox.selectedDisabledContainerOpacity
65 }
66 },
67 State {
68 name: "hovered"
69 when: rootControl.hovered && rootControl.enabled
70
71 PropertyChanges {
72 visualState.outlineColor: rootControl.error ? rootControl.MD.Style.errorColor : rootControl.checkState === Qt.Checked ? MD.Style.onSurfaceVariantColor : rootControl.MD.Style.onSurfaceColor
73 visualState.stateLayerColor: rootControl.error ? rootControl.MD.Style.errorColor : rootControl.checkState === Qt.Checked ? rootControl.MD.Style.primaryColor : rootControl.MD.Style.onSurfaceColor
74 visualState.stateLayerOpacity: MD.Tokens.checkBox.hoverStateLayerOpacity
75 }
76 },
77 State {
78 name: "focused"
79 when: rootControl.visualFocus && rootControl.enabled
80
81 PropertyChanges {
82 visualState.outlineColor: rootControl.error ? rootControl.MD.Style.errorColor : rootControl.checkState === Qt.Checked ? MD.Style.onSurfaceVariantColor : rootControl.MD.Style.onSurfaceColor
83 visualState.stateLayerColor: rootControl.error ? rootControl.MD.Style.errorColor : rootControl.checkState === Qt.Checked ? rootControl.MD.Style.primaryColor : rootControl.MD.Style.onSurfaceColor
84 visualState.stateLayerOpacity: MD.Tokens.checkBox.focusStateLayerOpacity
85 }
86 },
87 State {
88 name: "pressed"
89 when: rootControl.down && rootControl.enabled
90
91 PropertyChanges {
92 visualState.outlineColor: rootControl.error ? rootControl.MD.Style.errorColor : rootControl.checkState === Qt.Checked ? MD.Style.onSurfaceVariantColor : rootControl.MD.Style.onSurfaceColor
93 visualState.stateLayerColor: rootControl.error ? rootControl.MD.Style.errorColor : rootControl.checkState === Qt.Checked ? rootControl.MD.Style.primaryColor : rootControl.MD.Style.onSurfaceColor
94 visualState.stateLayerOpacity: MD.Tokens.checkBox.pressedStateLayerOpacity
95 }
96 }
97 ]
98
99 indicator: MD.CheckIndicator {
100 x: rootControl.text ? (rootControl.mirrored ? rootControl.width - width - rootControl.rightPadding : rootControl.leftPadding) : rootControl.leftPadding + (rootControl.availableWidth - width) / 2
101 y: rootControl.topPadding + (rootControl.availableHeight - height) / 2
102
103 control: rootControl
104 color: visualState.iconColor
105 opacity: visualState.containerOpacity
106 backgroundColor: visualState.containerColor
107 outlineColor: visualState.outlineColor
108 outlineWidth: visualState.outlineWidth
109
110 MD.Ripple {
111 anchors.centerIn: parent
112 width: MD.Tokens.checkBox.stateLayerSize
113 height: MD.Tokens.checkBox.stateLayerSize
114 radius: width / 2
115 pressX: rootControl.pressX
116 pressY: rootControl.pressY
117 pressed: rootControl.pressed
118 stateOpacity: visualState.stateLayerOpacity
119 color: visualState.stateLayerColor
120 }
121 }
122
123 contentItem: MD.Label {
124 leftPadding: rootControl.indicator && !rootControl.mirrored ? rootControl.indicator.width + rootControl.spacing : 0
125 rightPadding: rootControl.indicator && rootControl.mirrored ? rootControl.indicator.width + rootControl.spacing : 0
126
127 text: rootControl.text
128 typescale: rootControl.typescale
129 color: visualState.labelColor
130 opacity: visualState.contentOpacity
131 elide: Text.ElideRight
132 verticalAlignment: Text.AlignVCenter
133 }
134}
Material Design 3 design tokens.
Definition tokens.h:71
Displays text using a selectable Material 3 type scale.
Definition Label.qml:15