Fluid 1.3.0
Material Design for QtQuick and Qml
Loading...
Searching...
No Matches
PlainToolTip.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 Fluid as MD
7import "../core/UiMetrics.js" as UiMetrics
8import "../internal/MotionAnimation.js" as MotionAnimation
9
10import QtQuick
11import QtQuick.Templates as T
12
41T.ToolTip {
42 id: control
43 objectName: "plainToolTip"
44
45 MD.Style.theme: control.parent ? control.parent.MD.Style.theme : MD.Style.System
46
48 readonly property real _anchorWindowY: control.parent
49 ? control.parent.mapToItem(null, 0, 0).y
50 + control.parent.y * 0 : 0
52 readonly property bool _opensBelow: control.parent
53 ? control._anchorWindowY - control.height
54 - MD.Tokens.toolTip.anchorSpacing
55 < MD.Tokens.toolTip.viewportMargin : false
57 readonly property bool _layoutMirrored: control.mirrored
58 || control.locale.textDirection === Qt.RightToLeft
59 || (control.parent
60 && control.parent.LayoutMirroring.enabled)
62 readonly property real _naturalWidth: control.implicitContentWidth
63 + control.leftPadding + control.rightPadding
64
65 x: control.parent ? (control.parent.width - control.width) / 2 : 0
66 y: control.parent ? (control._opensBelow
67 ? control.parent.height + MD.Tokens.toolTip.anchorSpacing
68 : -control.height - MD.Tokens.toolTip.anchorSpacing) : 0
69
70 implicitWidth: Math.max(MD.Tokens.toolTip.minimumWidth,
71 Math.min(MD.Tokens.toolTip.plainMaximumWidth, _naturalWidth))
72 implicitHeight: Math.max(MD.Tokens.toolTip.minimumHeight,
73 control.implicitContentHeight
74 + control.topPadding + control.bottomPadding)
75
76 margins: MD.Tokens.toolTip.viewportMargin
77 leftPadding: MD.Tokens.toolTip.plainHorizontalPadding
78 rightPadding: MD.Tokens.toolTip.plainHorizontalPadding
79 topPadding: MD.Tokens.toolTip.plainVerticalPadding
80 bottomPadding: MD.Tokens.toolTip.plainVerticalPadding
81 closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent
82 | T.Popup.CloseOnReleaseOutsideParent
83 transformOrigin: control._opensBelow ? Item.Top : Item.Bottom
84
85 contentItem: MD.Label {
86 objectName: "plainToolTipLabel"
87 width: control.availableWidth
88 text: control.text
89 typescale: MD.Tokens.typescale.bodySmall
90 color: control.MD.Style.inverseOnSurfaceColor
91 horizontalAlignment: control._layoutMirrored ? Text.AlignRight : Text.AlignLeft
92 wrapMode: Text.Wrap
93 elide: Text.ElideNone
94 Accessible.ignored: true
95 }
96
97 background: Rectangle {
98 objectName: "plainToolTipBackground"
99 readonly property var containerShape: MD.Tokens.toolTip.plainContainerShape
100
101 implicitWidth: MD.Tokens.toolTip.minimumWidth
102 implicitHeight: MD.Tokens.toolTip.minimumHeight
103 color: control.MD.Style.inverseSurfaceColor
104 topLeftRadius: UiMetrics.resolveShapeRadius(containerShape.topLeft, width, height)
105 topRightRadius: UiMetrics.resolveShapeRadius(containerShape.topRight, width, height)
106 bottomLeftRadius: UiMetrics.resolveShapeRadius(containerShape.bottomLeft, width, height)
107 bottomRightRadius: UiMetrics.resolveShapeRadius(containerShape.bottomRight, width, height)
108 }
109
110 enter: Transition {
111 NumberAnimation {
112 property: "scale"
113 from: MD.Tokens.toolTip.closedScale
114 to: 1
115 duration: MotionAnimation.expressiveFastSpatialDuration
116 easing.type: Easing.BezierSpline
117 easing.bezierCurve: MotionAnimation.expressiveFastSpatialCurve
118 }
119 NumberAnimation {
120 property: "opacity"
121 from: 0
122 to: 1
123 duration: MotionAnimation.expressiveFastEffectsDuration
124 easing.type: Easing.BezierSpline
125 easing.bezierCurve: MotionAnimation.expressiveFastEffectsCurve
126 }
127 }
128
129 exit: Transition {
130 NumberAnimation {
131 property: "scale"
132 from: 1
133 to: MD.Tokens.toolTip.closedScale
134 duration: MotionAnimation.expressiveFastSpatialDuration
135 easing.type: Easing.BezierSpline
136 easing.bezierCurve: MotionAnimation.expressiveFastSpatialCurve
137 }
138 NumberAnimation {
139 property: "opacity"
140 from: 1
141 to: 0
142 duration: MotionAnimation.expressiveFastEffectsDuration
143 easing.type: Easing.BezierSpline
144 easing.bezierCurve: MotionAnimation.expressiveFastEffectsCurve
145 }
146 }
147}
Material Design 3 design tokens.
Definition tokens.h:65
Displays text using a selectable Material 3 type scale.
Definition Label.qml:15