Files
quickdots/widgets/bgDate/BgDate.qml

114 lines
3.0 KiB
QML

import QtQuick
import Quickshell
import Quickshell.Wayland
import "../../config" as Cfg
import "../../components"
PanelWindow {
id: root
required property var modelData
screen: modelData
color: "transparent"
anchors { top: true; bottom: true; left: true; right: true }
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.exclusiveZone: -1
mask: Region {}
property string fullDateString: ""
property int typedChars: 0
property string secondsString: ""
function startTyping() {
typedChars = 0
secondsText.opacity = 0
typingTimer.start()
}
function updateDate(d) {
let now = d || new Date()
fullDateString = TimezoneProvider.toTz(now).toLocaleDateString(Qt.locale(),
Cfg.Config.dateFormat === "DMY" ? "dddd, d MMMM yyyy" : "dddd, MMMM d, yyyy")
startTyping()
}
Component.onCompleted: {
let d = new Date()
secondsString = Qt.formatTime(TimezoneProvider.toTz(d), "hh:mm:ss")
updateDate(d)
}
Column {
anchors.centerIn: parent
spacing: 10
Text {
id: dateText
anchors.horizontalCenter: parent.horizontalCenter
color: Cfg.Config.theme.bgDateText
styleColor: Cfg.Config.theme.bgDateShadow
font.pixelSize: 64
font.weight: Font.ExtraLight
font.letterSpacing: 4
opacity: 0.55
style: Text.Raised
renderType: Text.NativeRendering
layer.enabled: true
layer.smooth: true
text: fullDateString.substring(0, typedChars)
}
Text {
id: secondsText
anchors.horizontalCenter: parent.horizontalCenter
color: Cfg.Config.theme.bgDateSecondsText
styleColor: Cfg.Config.theme.bgDateShadow
font.pixelSize: 22
font.weight: Font.ExtraLight
font.letterSpacing: 6
opacity: 0
style: Text.Raised
renderType: Text.NativeRendering
layer.enabled: true
layer.smooth: true
text: secondsString
Behavior on opacity {
NumberAnimation {
duration: 700
easing.type: Easing.InOutQuad
}
}
}
}
Timer {
id: typingTimer
interval: 55
repeat: true
onTriggered: {
if (typedChars < fullDateString.length) {
typedChars++
} else {
stop()
secondsText.opacity = 0.55
}
}
}
Timer {
interval: 1000
running: true
repeat: true
onTriggered: {
let d = new Date()
let tzd = TimezoneProvider.toTz(d)
secondsString = Qt.formatTime(tzd, "hh:mm:ss")
if (tzd.getHours() === 0 && tzd.getMinutes() === 0 && tzd.getSeconds() === 0)
updateDate(d)
}
}
}