fancier tooltips

This commit is contained in:
end-4
2025-05-03 21:31:43 +02:00
parent bc8b01a6f6
commit ceac2931ab
3 changed files with 65 additions and 52 deletions
@@ -134,8 +134,8 @@ Singleton {
property color colSecondaryContainerActive: mix(m3colors.m3secondaryContainer, colLayer1Active, 0.54) property color colSecondaryContainerActive: mix(m3colors.m3secondaryContainer, colLayer1Active, 0.54)
property color colSurfaceContainerHighestHover: mix(m3colors.m3surfaceContainerHighest, m3colors.m3onSurface, 0.95) property color colSurfaceContainerHighestHover: mix(m3colors.m3surfaceContainerHighest, m3colors.m3onSurface, 0.95)
property color colSurfaceContainerHighestActive: mix(m3colors.m3surfaceContainerHighest, m3colors.m3onSurface, 0.85) property color colSurfaceContainerHighestActive: mix(m3colors.m3surfaceContainerHighest, m3colors.m3onSurface, 0.85)
property color colTooltip: m3colors.m3inverseSurface property color colTooltip: "#3C4043" // m3colors.m3inverseSurface in the specs, but the m3 website actually uses this color
property color colOnTooltip: m3colors.m3inverseOnSurface property color colOnTooltip: "#F8F9FA" // m3colors.m3inverseOnSurface in the specs, but the m3 website actually uses this color
property color colScrim: transparentize(m3colors.m3scrim, 0.5) property color colScrim: transparentize(m3colors.m3scrim, 0.5)
property color colShadow: transparentize(m3colors.m3shadow, 0.75) property color colShadow: transparentize(m3colors.m3shadow, 0.75)
} }
@@ -24,15 +24,15 @@ Slider {
Behavior on value { // This makes the adjusted value (like volume) shift smoothly Behavior on value { // This makes the adjusted value (like volume) shift smoothly
SmoothedAnimation { SmoothedAnimation {
velocity: Appearance.animation.elementMove.velocity velocity: Appearance.animation.elementMoveFast.velocity
} }
} }
Behavior on handleMargins { Behavior on handleMargins {
NumberAnimation { NumberAnimation {
duration: Appearance.animation.elementMove.duration duration: Appearance.animation.elementMoveFast.duration
easing.type: Appearance.animation.elementMove.type easing.type: Appearance.animation.elementMoveFast.type
easing.bezierCurve: Appearance.animation.elementMove.bezierCurve easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve
} }
} }
@@ -93,9 +93,9 @@ Slider {
Behavior on implicitWidth { Behavior on implicitWidth {
NumberAnimation { NumberAnimation {
duration: Appearance.animation.elementMove.duration duration: Appearance.animation.elementMoveFast.duration
easing.type: Appearance.animation.elementMove.type easing.type: Appearance.animation.elementMoveFast.type
easing.bezierCurve: Appearance.animation.elementMove.bezierCurve easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve
} }
} }
@@ -5,55 +5,68 @@ import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
ToolTip { ToolTip {
id: root
property string content property string content
property bool extraVisibleCondition: true property bool extraVisibleCondition: true
property bool alternativeVisibleCondition: false property bool alternativeVisibleCondition: false
property bool internalVisibleCondition: false property bool internalVisibleCondition: {
padding: 5 const ans = (extraVisibleCondition && (parent.hovered === undefined || parent?.hovered)) || alternativeVisibleCondition
return ans
}
verticalPadding: 5
horizontalPadding: 10
visible: ((extraVisibleCondition && (parent.hovered === undefined || parent?.hovered) && internalVisibleCondition)) || alternativeVisibleCondition opacity: internalVisibleCondition ? 1 : 0
visible: opacity > 0
Connections { Behavior on opacity {
target: parent NumberAnimation {
function onHoveredChanged() { duration: Appearance.animation.elementMoveFast.duration
if (parent.hovered) { easing.type: Appearance.animation.elementMoveFast.type
tooltipShowDelay.restart() easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve
} else { }
internalVisibleCondition = false }
background: Item {}
contentItem: Item {
id: contentItemBackground
implicitWidth: tooltipTextObject.width + 2 * root.horizontalPadding
implicitHeight: tooltipTextObject.height + 2 * root.verticalPadding
Rectangle {
id: backgroundRectangle
anchors.bottom: contentItemBackground.bottom
anchors.horizontalCenter: contentItemBackground.horizontalCenter
color: Appearance.colors.colTooltip
radius: Appearance.rounding.verysmall
width: internalVisibleCondition ? (tooltipTextObject.width + 2 * padding) : 0
height: internalVisibleCondition ? (tooltipTextObject.height + 2 * padding) : 0
clip: true
Behavior on width {
NumberAnimation {
duration: Appearance.animation.elementMoveFast.duration
easing.type: Appearance.animation.elementMoveFast.type
easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve
}
}
Behavior on height {
NumberAnimation {
duration: Appearance.animation.elementMoveFast.duration
easing.type: Appearance.animation.elementMoveFast.type
easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve
}
}
StyledText {
id: tooltipTextObject
anchors.centerIn: parent
text: content
font.pixelSize: Appearance.font.pixelSize.smaller
color: Appearance.colors.colOnTooltip
wrapMode: Text.Wrap
} }
} }
} }
Timer {
id: tooltipShowDelay
interval: 200
repeat: false
running: false
onTriggered: {
internalVisibleCondition = true
}
}
background: Rectangle {
color: Appearance.colors.colTooltip
radius: Appearance.rounding.small
implicitWidth: tooltipTextObject.width + 2 * padding
implicitHeight: tooltipTextObject.height + 2 * padding
Behavior on opacity {
NumberAnimation {
target: opacity
duration: Appearance.animation.elementMoveFast.duration
easing.type: Appearance.animation.elementMoveFast.type
easing.bezierCurve: Appearance.animation.elementMoveFast.bezierCurve
}
}
opacity: visible ? 1 : 0
}
StyledText {
id: tooltipTextObject
text: content
font.pixelSize: Appearance.font.pixelSize.small
color: Appearance.colors.colOnTooltip
wrapMode: Text.Wrap
}
} }