97 lines
2.8 KiB
QML
97 lines
2.8 KiB
QML
import QtQuick
|
|
import "root:/config"
|
|
|
|
// Display text with the wallpaper's RGB split baked in: a crimson and a cyan
|
|
// ghost sitting a pixel off the white body. Drives most headings in the shell.
|
|
Item {
|
|
id: root
|
|
|
|
property string text: ""
|
|
property int pixelSize: Theme.fsLarge
|
|
property int weight: Theme.weightDisplay
|
|
property string family: Theme.fontDisplay
|
|
property bool italic: true
|
|
property color color: Theme.text
|
|
property real split: 1.6
|
|
property real splitOpacity: 0.85
|
|
property int elide: Text.ElideNone
|
|
property int horizontalAlignment: Text.AlignLeft
|
|
property real letterSpacing: 0.5
|
|
|
|
implicitWidth: body.implicitWidth
|
|
implicitHeight: body.implicitHeight
|
|
|
|
Text {
|
|
id: ghostRed
|
|
anchors.fill: parent
|
|
anchors.leftMargin: -root.split
|
|
anchors.topMargin: root.split * 0.4
|
|
text: root.text
|
|
color: Theme.splitRed
|
|
opacity: root.splitOpacity
|
|
elide: root.elide
|
|
horizontalAlignment: root.horizontalAlignment
|
|
verticalAlignment: Text.AlignVCenter
|
|
font.family: root.family
|
|
font.pixelSize: root.pixelSize
|
|
font.weight: root.weight
|
|
font.italic: root.italic
|
|
font.letterSpacing: root.letterSpacing
|
|
renderType: Text.NativeRendering
|
|
}
|
|
|
|
Text {
|
|
id: ghostCyan
|
|
anchors.fill: parent
|
|
anchors.leftMargin: root.split
|
|
anchors.topMargin: -root.split * 0.4
|
|
text: root.text
|
|
color: Theme.splitCyan
|
|
opacity: root.splitOpacity
|
|
elide: root.elide
|
|
horizontalAlignment: root.horizontalAlignment
|
|
verticalAlignment: Text.AlignVCenter
|
|
font.family: root.family
|
|
font.pixelSize: root.pixelSize
|
|
font.weight: root.weight
|
|
font.italic: root.italic
|
|
font.letterSpacing: root.letterSpacing
|
|
renderType: Text.NativeRendering
|
|
}
|
|
|
|
Text {
|
|
id: body
|
|
anchors.fill: parent
|
|
text: root.text
|
|
color: root.color
|
|
elide: root.elide
|
|
horizontalAlignment: root.horizontalAlignment
|
|
verticalAlignment: Text.AlignVCenter
|
|
font.family: root.family
|
|
font.pixelSize: root.pixelSize
|
|
font.weight: root.weight
|
|
font.italic: root.italic
|
|
font.letterSpacing: root.letterSpacing
|
|
renderType: Text.NativeRendering
|
|
}
|
|
|
|
// Kick the ghosts outward briefly — used on track changes, mode flips, etc.
|
|
function glitch() {
|
|
glitchAnim.restart();
|
|
}
|
|
|
|
SequentialAnimation {
|
|
id: glitchAnim
|
|
NumberAnimation {
|
|
target: root; property: "split"
|
|
to: 5.5; duration: Theme.durFast
|
|
easing.type: Easing.OutExpo
|
|
}
|
|
NumberAnimation {
|
|
target: root; property: "split"
|
|
to: 1.6; duration: Theme.durSlow
|
|
easing.type: Easing.OutBack
|
|
}
|
|
}
|
|
}
|