forked from Shinonome/dots-hyprland
fancier tooltips
This commit is contained in:
@@ -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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user