diff options
| author | nippy <you@example.com> | 2026-04-18 13:49:56 +0200 |
|---|---|---|
| committer | nippy <you@example.com> | 2026-04-18 13:49:56 +0200 |
| commit | 5d94c0a7d44a2255b81815a52a7056a94a39842d (patch) | |
| tree | 759bdea9645c6a62f9e1e4c001f7d81cccd120d2 /raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleDesktopClock/DesktopClock.qml | |
| parent | e79cdf210b267f21a186255ce1a4d50029439d54 (diff) | |
| download | RaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.tar.gz RaveOS-PKGBUILD-5d94c0a7d44a2255b81815a52a7056a94a39842d.zip | |
update Raveos themes
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleDesktopClock/DesktopClock.qml')
| -rw-r--r-- | raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleDesktopClock/DesktopClock.qml | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleDesktopClock/DesktopClock.qml b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleDesktopClock/DesktopClock.qml new file mode 100644 index 0000000..55ac34c --- /dev/null +++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/PLUGINS/ExampleDesktopClock/DesktopClock.qml @@ -0,0 +1,172 @@ +import QtQuick +import Quickshell +import qs.Common +import qs.Modules.Plugins + +DesktopPluginComponent { + id: root + + minWidth: 120 + minHeight: 120 + + property bool showSeconds: pluginData.showSeconds ?? true + property bool showDate: pluginData.showDate ?? true + property string clockStyle: pluginData.clockStyle ?? "analog" + property real backgroundOpacity: (pluginData.backgroundOpacity ?? 50) / 100 + + SystemClock { + id: systemClock + precision: root.showSeconds ? SystemClock.Seconds : SystemClock.Minutes + } + + Rectangle { + id: background + anchors.fill: parent + radius: Theme.cornerRadius + color: Theme.surfaceContainer + opacity: root.backgroundOpacity + } + + Loader { + anchors.fill: parent + anchors.margins: Theme.spacingM + sourceComponent: root.clockStyle === "digital" ? digitalClock : analogClock + } + + Component { + id: analogClock + + Item { + id: analogClockRoot + + property real clockSize: Math.min(width, height) - (root.showDate ? 30 : 0) + + Item { + id: clockFace + width: analogClockRoot.clockSize + height: analogClockRoot.clockSize + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: parent.top + anchors.topMargin: Theme.spacingS + + Repeater { + model: 12 + + Rectangle { + required property int index + property real markAngle: index * 30 + property real markRadius: clockFace.width / 2 - 8 + + x: clockFace.width / 2 + markRadius * Math.sin(markAngle * Math.PI / 180) - width / 2 + y: clockFace.height / 2 - markRadius * Math.cos(markAngle * Math.PI / 180) - height / 2 + width: index % 3 === 0 ? 8 : 4 + height: width + radius: width / 2 + color: index % 3 === 0 ? Theme.primary : Theme.outlineVariant + } + } + + Rectangle { + id: hourHand + property int hours: systemClock.date?.getHours() % 12 ?? 0 + property int minutes: systemClock.date?.getMinutes() ?? 0 + + x: clockFace.width / 2 - width / 2 + y: clockFace.height / 2 - height + 4 + width: 6 + height: clockFace.height * 0.25 + radius: 3 + color: Theme.primary + antialiasing: true + transformOrigin: Item.Bottom + rotation: (hours + minutes / 60) * 30 + } + + Rectangle { + id: minuteHand + property int minutes: systemClock.date?.getMinutes() ?? 0 + property int seconds: systemClock.date?.getSeconds() ?? 0 + + x: clockFace.width / 2 - width / 2 + y: clockFace.height / 2 - height + 4 + width: 4 + height: clockFace.height * 0.35 + radius: 2 + color: Theme.onSurface + antialiasing: true + transformOrigin: Item.Bottom + rotation: (minutes + seconds / 60) * 6 + } + + Rectangle { + id: secondHand + visible: root.showSeconds + property int seconds: systemClock.date?.getSeconds() ?? 0 + + x: clockFace.width / 2 - width / 2 + y: clockFace.height / 2 - height + 4 + width: 2 + height: clockFace.height * 0.4 + radius: 1 + color: Theme.error + antialiasing: true + transformOrigin: Item.Bottom + rotation: seconds * 6 + } + + Rectangle { + anchors.centerIn: parent + width: 10 + height: 10 + radius: 5 + color: Theme.primary + } + } + + Text { + visible: root.showDate + anchors.horizontalCenter: parent.horizontalCenter + anchors.bottom: parent.bottom + anchors.bottomMargin: Theme.spacingXS + text: systemClock.date?.toLocaleDateString(I18n.locale(), "ddd, MMM d") ?? "" + font.pixelSize: Theme.fontSizeSmall + font.weight: Font.Medium + color: Theme.surfaceText + } + } + } + + Component { + id: digitalClock + + Item { + id: digitalRoot + + property real timeFontSize: Math.min(width * 0.16, height * (root.showDate ? 0.4 : 0.5)) + property real dateFontSize: Math.max(Theme.fontSizeSmall, timeFontSize * 0.35) + + Text { + id: timeText + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + anchors.verticalCenterOffset: root.showDate ? -digitalRoot.dateFontSize * 0.8 : 0 + text: systemClock.date?.toLocaleTimeString(Qt.locale(), root.showSeconds ? "hh:mm:ss" : "hh:mm") ?? "" + font.pixelSize: digitalRoot.timeFontSize + font.weight: Font.Bold + font.family: "monospace" + color: Theme.primary + } + + Text { + id: dateText + visible: root.showDate + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: timeText.bottom + anchors.topMargin: Theme.spacingXS + text: systemClock.date?.toLocaleDateString(I18n.locale(), "ddd, MMM d") ?? "" + font.pixelSize: digitalRoot.dateFontSize + color: Theme.surfaceText + } + } + } +} |