Fluid 1.3.0
Material Design for QtQuick and Qml
Loading...
Searching...
No Matches
tab.h
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
4#pragma once
5
6#include <QtCore/qobject.h>
7#include <QtQml/qqmlregistration.h>
8
9#include "elevationtokens.h"
10#include "shapetokens.h"
11#include "statetokens.h"
12
13// AndroidX PrimaryNavigationTabTokens.kt and SecondaryNavigationTabTokens.kt,
14// VERSION: v0_162, at the pinned token directory:
15// https://android.googlesource.com/platform/frameworks/support/+/5ba2cdd61be7b6945db999b238d14f3c626136fb/compose/material3/material3/src/commonMain/kotlin/androidx/compose/material3/tokens/
16// ../Tab.kt supplies horizontal padding; ../TabRow.kt uses DefaultSpatial motion.
17// Material tabs specification (revision 2026-09-23_06-10-05) supplies the 2dp
18// secondary indicator, 1dp divider, primary minimum/inset, badges, and scroll offset:
19// https://m3.material.io/components/tabs/specs
20// Material Web tabs/internal/_primary-tab.scss supplies the stacked 2dp gap.
21
22namespace Fluid {
23
25struct Tab
26{
27 Q_GADGET
28 QML_ANONYMOUS
29
30 Q_PROPERTY(qreal primaryContainerHeight READ primaryContainerHeight CONSTANT FINAL)
33 Q_PROPERTY(qreal secondaryContainerHeight READ secondaryContainerHeight CONSTANT FINAL)
34 Q_PROPERTY(qreal minimumInteractiveSize READ minimumInteractiveSize CONSTANT FINAL)
35 Q_PROPERTY(qreal iconSize READ iconSize CONSTANT FINAL)
36 Q_PROPERTY(qreal horizontalPadding READ horizontalPadding CONSTANT FINAL)
37 Q_PROPERTY(qreal inlineIconLabelGap READ inlineIconLabelGap CONSTANT FINAL)
38 Q_PROPERTY(qreal stackedIconLabelGap READ stackedIconLabelGap CONSTANT FINAL)
39 Q_PROPERTY(qreal labelBadgeGap READ labelBadgeGap CONSTANT FINAL)
40 Q_PROPERTY(qreal badgeOverlap READ badgeOverlap CONSTANT FINAL)
41 Q_PROPERTY(qreal scrollableLeadingOffset READ scrollableLeadingOffset CONSTANT FINAL)
42 Q_PROPERTY(qreal primaryActiveIndicatorHeight READ primaryActiveIndicatorHeight CONSTANT FINAL)
44 CONSTANT FINAL)
47 Q_PROPERTY(
49 Q_PROPERTY(qreal dividerHeight READ dividerHeight CONSTANT FINAL)
50 Q_PROPERTY(qreal containerElevation READ containerElevation CONSTANT FINAL)
51 Q_PROPERTY(qreal hoverStateLayerOpacity READ hoverStateLayerOpacity CONSTANT FINAL)
52 Q_PROPERTY(qreal focusStateLayerOpacity READ focusStateLayerOpacity CONSTANT FINAL)
53 Q_PROPERTY(qreal pressedStateLayerOpacity READ pressedStateLayerOpacity CONSTANT FINAL)
54 Q_PROPERTY(Fluid::ShapeValue containerShape READ containerShape CONSTANT FINAL)
56 CONSTANT FINAL)
58 CONSTANT FINAL)
59
60public:
61 constexpr qreal primaryContainerHeight() const
62 {
63 return 48.0;
64 }
65
67 {
68 return 64.0;
69 }
70
71 constexpr qreal secondaryContainerHeight() const
72 {
73 return 48.0;
74 }
75
76 constexpr qreal minimumInteractiveSize() const
77 {
78 return 48.0;
79 }
80
81 constexpr qreal iconSize() const
82 {
83 return 24.0;
84 }
85
86 constexpr qreal horizontalPadding() const
87 {
88 return 16.0;
89 }
90
91 constexpr qreal inlineIconLabelGap() const
92 {
93 return 8.0;
94 }
95
96 constexpr qreal stackedIconLabelGap() const
97 {
98 return 2.0;
99 }
100
101 constexpr qreal labelBadgeGap() const
102 {
103 return 4.0;
104 }
105
106 constexpr qreal badgeOverlap() const
107 {
108 return 6.0;
109 }
110
111 constexpr qreal scrollableLeadingOffset() const
112 {
113 return 52.0;
114 }
115
116 constexpr qreal primaryActiveIndicatorHeight() const
117 {
118 return 3.0;
119 }
120
122 {
123 return 24.0;
124 }
125
127 {
128 return 2.0;
129 }
130
131 constexpr qreal secondaryActiveIndicatorHeight() const
132 {
133 return 2.0;
134 }
135
136 constexpr qreal dividerHeight() const
137 {
138 return 1.0;
139 }
140
141 constexpr qreal containerElevation() const
142 {
143 return ElevationTokens{ }.level0();
144 }
145
146 constexpr qreal hoverStateLayerOpacity() const
147 {
149 }
150
151 constexpr qreal focusStateLayerOpacity() const
152 {
154 }
155
156 constexpr qreal pressedStateLayerOpacity() const
157 {
159 }
160
161 constexpr ShapeValue containerShape() const
162 {
163 return ShapeTokens{ }.cornerNone();
164 }
165
167 {
168 return { 3.0, 3.0, 3.0, 3.0 };
169 }
170
172 {
173 return ShapeTokens{ }.cornerNone();
174 }
175};
176
177} // namespace Fluid
Material Design 3 system elevation tokens.
QML_ANONYMOUSqreal level0
Material Design 3 system shape tokens.
Definition shapetokens.h:48
Fluid::ShapeValue cornerNone
Definition shapetokens.h:66
Material Design 3 system state tokens.
Definition statetokens.h:18
qreal focusStateLayerOpacity
Definition statetokens.h:23
qreal hoverStateLayerOpacity
Definition statetokens.h:24
qreal pressedStateLayerOpacity
Definition statetokens.h:25
Immutable Material Design 3 primary and secondary tab metrics.
Definition tab.h:26
constexpr qreal labelBadgeGap() const
Definition tab.h:101
qreal primaryActiveIndicatorHeight
Definition tab.h:42
constexpr qreal secondaryActiveIndicatorHeight() const
Definition tab.h:131
qreal pressedStateLayerOpacity
Definition tab.h:53
constexpr ShapeValue primaryActiveIndicatorShape() const
Definition tab.h:166
qreal hoverStateLayerOpacity
Definition tab.h:51
constexpr qreal horizontalPadding() const
Definition tab.h:86
qreal dividerHeight
Definition tab.h:49
constexpr qreal hoverStateLayerOpacity() const
Definition tab.h:146
qreal iconSize
Definition tab.h:35
constexpr qreal dividerHeight() const
Definition tab.h:136
Fluid::ShapeValue secondaryActiveIndicatorShape
Definition tab.h:58
constexpr qreal scrollableLeadingOffset() const
Definition tab.h:111
constexpr qreal stackedIconLabelGap() const
Definition tab.h:96
constexpr qreal minimumInteractiveSize() const
Definition tab.h:76
constexpr ShapeValue secondaryActiveIndicatorShape() const
Definition tab.h:171
constexpr qreal badgeOverlap() const
Definition tab.h:106
qreal labelBadgeGap
Definition tab.h:39
qreal primaryActiveIndicatorMinimumWidth
Definition tab.h:44
constexpr ShapeValue containerShape() const
Definition tab.h:161
constexpr qreal primaryActiveIndicatorMinimumWidth() const
Definition tab.h:121
qreal minimumInteractiveSize
Definition tab.h:34
constexpr qreal inlineIconLabelGap() const
Definition tab.h:91
qreal secondaryContainerHeight
Definition tab.h:33
qreal badgeOverlap
Definition tab.h:40
QML_ANONYMOUSqreal primaryContainerHeight
Definition tab.h:30
qreal inlineIconLabelGap
Definition tab.h:37
qreal focusStateLayerOpacity
Definition tab.h:52
constexpr qreal iconSize() const
Definition tab.h:81
constexpr qreal containerElevation() const
Definition tab.h:141
constexpr qreal primaryWithIconAndLabelContainerHeight() const
Definition tab.h:66
qreal primaryActiveIndicatorHorizontalInset READ primaryActiveIndicatorHorizontalInset
Definition tab.h:46
qreal horizontalPadding
Definition tab.h:36
qreal primaryWithIconAndLabelContainerHeight READ primaryWithIconAndLabelContainerHeight
Definition tab.h:32
qreal containerElevation
Definition tab.h:50
qreal secondaryActiveIndicatorHeight
Definition tab.h:48
constexpr qreal primaryActiveIndicatorHeight() const
Definition tab.h:116
constexpr qreal focusStateLayerOpacity() const
Definition tab.h:151
qreal scrollableLeadingOffset
Definition tab.h:41
constexpr qreal secondaryContainerHeight() const
Definition tab.h:71
qreal stackedIconLabelGap
Definition tab.h:38
Fluid::ShapeValue containerShape
Definition tab.h:54
constexpr qreal primaryActiveIndicatorHorizontalInset() const
Definition tab.h:126
constexpr qreal pressedStateLayerOpacity() const
Definition tab.h:156
Fluid::ShapeValue primaryActiveIndicatorShape
Definition tab.h:56