import QtQuick import QtQuick.Layouts import qs import qs.services import qs.modules.common import qs.modules.common.functions import qs.modules.common.widgets import qs.modules.common.widgets.widgetCanvas import qs.modules.background.widgets AbstractBackgroundWidget { id: root configEntryName: "clock" implicitHeight: contentColumn.implicitHeight implicitWidth: contentColumn.implicitWidth property string clockStyle: Config.options.background.widgets.clock.style property bool forceCenter: (GlobalStates.screenLocked && Config.options.lock.centerClock) property bool wallpaperSafetyTriggered: false needsColText: clockStyle === "digital" x: forceCenter ? ((root.screenWidth - root.width) / 2) : targetX y: forceCenter ? ((root.screenHeight - root.height) / 2) : targetY visibleWhenLocked: true property var textHorizontalAlignment: { if (root.forceCenter) return Text.AlignHCenter; if (root.x < root.scaledScreenWidth / 3) return Text.AlignLeft; if (root.x > root.scaledScreenWidth * 2 / 3) return Text.AlignRight; return Text.AlignHCenter; } Column { id: contentColumn anchors.centerIn: parent spacing: 6 FadeLoader { id: cookieClockLoader anchors.horizontalCenter: parent.horizontalCenter shown: root.clockStyle === "cookie" sourceComponent: Column { CookieClock { anchors.horizontalCenter: parent.horizontalCenter } FadeLoader { anchors.horizontalCenter: parent.horizontalCenter shown: Config.options.background.widgets.clock.quote.enable && Config.options.background.widgets.clock.quote.text !== "" sourceComponent: CookieQuote {} } } } FadeLoader { id: digitalClockLoader anchors.horizontalCenter: parent.horizontalCenter shown: root.clockStyle === "digital" sourceComponent: ColumnLayout { id: clockColumn spacing: 6 ClockText { font.pixelSize: 90 text: DateTime.time } ClockText { Layout.topMargin: -5 text: DateTime.date } StyledText { // Somehow gets fucked up if made a ClockText??? visible: Config.options.background.widgets.clock.quote.enable && Config.options.background.widgets.clock.quote.text.length > 0 Layout.fillWidth: true horizontalAlignment: root.textHorizontalAlignment font { pixelSize: Appearance.font.pixelSize.normal weight: 350 } color: root.colText style: Text.Raised styleColor: Appearance.colors.colShadow text: Config.options.background.widgets.clock.quote.text } } } Item { id: statusText anchors.horizontalCenter: parent.horizontalCenter implicitHeight: statusTextBg.implicitHeight implicitWidth: statusTextBg.implicitWidth StyledRectangularShadow { target: statusTextBg visible: statusTextBg.visible && root.clockStyle === "cookie" opacity: statusTextBg.opacity } Rectangle { id: statusTextBg anchors.centerIn: parent clip: true opacity: (safetyStatusText.shown || lockStatusText.shown) ? 1 : 0 visible: opacity > 0 implicitHeight: statusTextRow.implicitHeight + 5 * 2 implicitWidth: statusTextRow.implicitWidth + 5 * 2 radius: Appearance.rounding.small color: ColorUtils.transparentize(Appearance.colors.colSecondaryContainer, root.clockStyle === "cookie" ? 0 : 1) Behavior on implicitWidth { animation: Appearance.animation.elementResize.numberAnimation.createObject(this) } Behavior on implicitHeight { animation: Appearance.animation.elementResize.numberAnimation.createObject(this) } Behavior on opacity { animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) } RowLayout { id: statusTextRow anchors.centerIn: parent spacing: 14 Item { Layout.fillWidth: root.textHorizontalAlignment !== Text.AlignLeft implicitWidth: 1 } ClockStatusText { id: safetyStatusText shown: root.wallpaperSafetyTriggered statusIcon: "hide_image" statusText: Translation.tr("Wallpaper safety enforced") } ClockStatusText { id: lockStatusText shown: GlobalStates.screenLocked && Config.options.lock.showLockedText statusIcon: "lock" statusText: Translation.tr("Locked") } Item { Layout.fillWidth: root.textHorizontalAlignment !== Text.AlignRight implicitWidth: 1 } } } } } component ClockText: StyledText { Layout.fillWidth: true horizontalAlignment: root.textHorizontalAlignment font { family: Appearance.font.family.expressive pixelSize: 20 weight: Font.DemiBold } color: root.colText style: Text.Raised styleColor: Appearance.colors.colShadow animateChange: Config.options.background.widgets.clock.digital.animateChange } component ClockStatusText: Row { id: statusTextRow property alias statusIcon: statusIconWidget.text property alias statusText: statusTextWidget.text property bool shown: true property color textColor: root.clockStyle === "cookie" ? Appearance.colors.colOnSecondaryContainer : root.colText opacity: shown ? 1 : 0 visible: opacity > 0 Behavior on opacity { animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) } spacing: 4 MaterialSymbol { id: statusIconWidget anchors.verticalCenter: statusTextRow.verticalCenter iconSize: Appearance.font.pixelSize.huge color: statusTextRow.textColor style: Text.Raised styleColor: Appearance.colors.colShadow } ClockText { id: statusTextWidget color: statusTextRow.textColor anchors.verticalCenter: statusTextRow.verticalCenter font { pixelSize: Appearance.font.pixelSize.large weight: Font.Normal } style: Text.Raised styleColor: Appearance.colors.colShadow } } }