add new date style and bunch of new animations

This commit is contained in:
darksignal7
2025-10-05 13:38:53 +03:00
parent cd3b8b5bab
commit 5787e95c51
4 changed files with 160 additions and 76 deletions
@@ -21,7 +21,8 @@ Item {
property real hourHandLength: 72 property real hourHandLength: 72
property real hourHandWidth: 20 property real hourHandWidth: 20
property real minuteHandLength: 95 property real minuteHandLength: 95
property real minuteHandWidth: Config.options.background.clock.cookie.minuteHandStyle === "bold" ? hourHandWidth : 12 property real minuteHandWidth: Config.options.background.clock.cookie.minuteHandStyle === "bold" ? hourHandWidth :
Config.options.background.clock.cookie.minuteHandStyle === "medium" ? 12 : 6
property real centerDotSize: 10 property real centerDotSize: 10
property real hourDotSize: 12 property real hourDotSize: 12
property real centerGlowSize: 135 property real centerGlowSize: 135
@@ -92,34 +93,39 @@ Item {
sides: Config.options.background.clock.clockSides sides: Config.options.background.clock.clockSides
color: root.colBackground color: root.colBackground
// 12 dots around the cookie
Repeater { }
model: 12
Item { // 12 dots around the cookie
opacity: Config.options.background.clock.cookie.dialNumberStyle === "dots" ? 1.0 : 0 // Not using visible to allow smooth transition Repeater {
Behavior on opacity { model: 12
Item {
opacity: Config.options.background.clock.cookie.dialNumberStyle === "dots" ? 1.0 : 0 // Not using visible to allow smooth transition
Behavior on opacity {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
}
required property int index
rotation: 360 / 12 * index
anchors.fill: parent
Rectangle {
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
leftMargin: Config.options.background.clock.cookie.dialNumberStyle === "dots" ? 10 : 50
}
Behavior on anchors.leftMargin{
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
} }
required property int index implicitWidth: root.hourDotSize
rotation: 360 / 12 * index implicitHeight: implicitWidth
anchors.fill: parent radius: implicitWidth / 2
Rectangle { color: root.colOnBackground
anchors { opacity: 0.5
left: parent.left
verticalCenter: parent.verticalCenter
leftMargin: 10
}
implicitWidth: root.hourDotSize
implicitHeight: implicitWidth
radius: implicitWidth / 2
color: root.colOnBackground
opacity: 0.5
}
} }
} }
} }
// Center glow behind the cookie // Center glow lines
Rectangle { Rectangle {
id: glowLines id: glowLines
z: 1 z: 1
@@ -138,7 +144,7 @@ Item {
anchors { anchors {
left: parent.left left: parent.left
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
leftMargin: 50 leftMargin: Config.options.background.clock.cookie.centerGlow ? 50 : 75
} }
implicitWidth: root.hourDotSize implicitWidth: root.hourDotSize
implicitHeight: implicitWidth / 2 implicitHeight: implicitWidth / 2
@@ -148,6 +154,9 @@ Item {
Behavior on opacity { Behavior on opacity {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
} }
Behavior on anchors.leftMargin{
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
}
} }
} }
} }
@@ -167,15 +176,17 @@ Item {
required property string modelData required property string modelData
opacity: Config.options.background.clock.cookie.timeIndicators ? 1.0 : 0 // Not using visible to allow smooth transition opacity: Config.options.background.clock.cookie.timeIndicators ? 1.0 : 0 // Not using visible to allow smooth transition
Behavior on opacity { // LOOK Behavior on opacity {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
} }
anchors.horizontalCenter: parent?.horizontalCenter anchors.horizontalCenter: parent?.horizontalCenter
font { font {
// A better way to do this? probably yes, do i know : no // A better way to do this? probably yes, do i know : no
// (changing size based on am/pm selected or not)
property real numberSizeWithoutGlow: modelData.match(/am|pm/i) ? 26 : 68 property real numberSizeWithoutGlow: modelData.match(/am|pm/i) ? 26 : 68
property real numberSizeWithGlow: modelData.match(/am|pm/i) ? 10 : 40 property real numberSizeWithGlow: modelData.match(/am|pm/i) ? 10 : 40
pixelSize: Config.options.background.clock.cookie.centerGlow ? numberSizeWithGlow : numberSizeWithoutGlow pixelSize: !Config.options.background.clock.cookie.timeIndicators ? 100 : // for open/close animation
Config.options.background.clock.cookie.centerGlow ? numberSizeWithGlow : numberSizeWithoutGlow
Behavior on pixelSize { Behavior on pixelSize {
animation: Appearance.animation.elementResize.numberAnimation.createObject(this) animation: Appearance.animation.elementResize.numberAnimation.createObject(this)
} }
@@ -191,7 +202,7 @@ Item {
// Hour hand // Hour hand
Item { Item {
anchors.fill: parent anchors.fill: parent
z: 2 z: 3
rotation: -90 + (360 / 12) * (root.clockHour + root.clockMinute / 60) rotation: -90 + (360 / 12) * (root.clockHour + root.clockMinute / 60)
Rectangle { Rectangle {
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
@@ -206,7 +217,7 @@ Item {
// Minute hand // Minute hand
Item { Item {
anchors.fill: parent anchors.fill: parent
z: 3 z: Config.options.background.clock.cookie.minuteHandStyle === "thin" ? 1 : 3
Behavior on rotation{ Behavior on rotation{
animation: Appearance.animation.elementResize.numberAnimation.createObject(this) animation: Appearance.animation.elementResize.numberAnimation.createObject(this)
} }
@@ -240,20 +251,28 @@ Item {
// Center glow // Center glow
Rectangle { Rectangle {
visible: Config.options.background.clock.cookie.centerGlow opacity: Config.options.background.clock.cookie.centerGlow ? 1.0 : 0 // Not using visible to allow smooth transition
Behavior on opacity {
animation: Appearance.animation.elementResize.numberAnimation.createObject(this)
}
Behavior on implicitWidth { // Not using two animations because it looks weird
ParallelAnimation {
NumberAnimation { properties: "implicitWidth,implicitHeight"; duration: 100; easing.type: Easing.InOutQuad }
}
}
z: 0 z: 0
color: root.colTimeIndicators color: root.colTimeIndicators
anchors.centerIn: parent anchors.centerIn: parent
implicitWidth: centerGlowSize implicitWidth: Config.options.background.clock.cookie.centerGlow ? centerGlowSize : centerGlowSize * 1.75
implicitHeight: centerGlowSize implicitHeight: implicitWidth
radius: implicitWidth / 2 radius: implicitWidth / 2
} }
// Second hand/ dot // Second hand/dot
Item { Item {
id: secondHand id: secondHand
z:3 z: Config.options.background.clock.cookie.secondHandStyle === "line" ? 2 : 3
opacity: Config.options.background.clock.cookie.secondHandStyle === "dot" || Config.options.background.clock.cookie.secondHandStyle === "line" ? 1.0 : 0 // Not using visible to allow smooth transition opacity: Config.options.background.clock.cookie.secondHandStyle === "dot" || Config.options.background.clock.cookie.secondHandStyle === "line" ? 1.0 : 0 // Not using visible to allow smooth transition
Behavior on opacity { Behavior on opacity {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
@@ -264,6 +283,7 @@ Item {
rotation: (360 / 60 * clockSecond) + 90 // +90 degrees to align with minute hand rotation: (360 / 60 * clockSecond) + 90 // +90 degrees to align with minute hand
anchors.fill: parent anchors.fill: parent
Rectangle { Rectangle {
Behavior on implicitHeight { Behavior on implicitHeight {
animation: Appearance.animation.elementResize.numberAnimation.createObject(this) animation: Appearance.animation.elementResize.numberAnimation.createObject(this)
} }
@@ -282,12 +302,14 @@ Item {
} }
} }
// Date // Date (the rotating one with the second hand)
Canvas { Canvas {
z: 0
width: cookie.width width: cookie.width
height: cookie.height height: cookie.height
rotation: secondHand.rotation + 45 // +45 degrees to align with minute hand rotation: secondHand.rotation + 45 // +45 degrees to align with minute hand
opacity: Config.options.background.clock.cookie.dateInClock ? 1.0 : 0 opacity: Config.options.background.clock.cookie.dateStyle === "rotating" ? 1.0 : 0
Behavior on opacity { Behavior on opacity {
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
} }
@@ -319,8 +341,40 @@ Item {
} }
} }
} }
// Date(only today's number) in right side of the clock
Rectangle{
z: 1
implicitWidth: 45
implicitHeight: Config.options.background.clock.cookie.dateStyle === "square" ? 30 : 0
Behavior on implicitHeight{
animation: Appearance.animation.elementResize.numberAnimation.createObject(this)
}
opacity: 1.0
anchors{
verticalCenter: cookie.verticalCenter
right: cookie.right
rightMargin: 10
}
color: root.colOnBackground
radius: Appearance.rounding.small // LOOK
StyledText{
opacity: Config.options.background.clock.cookie.dateStyle === "square" ? 1.0 : 0
Behavior on opacity{
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
}
anchors.centerIn: parent
color: root.colHourHand
text: DateTime.date.substring(5,7)
font {
family: Appearance.font.family.expressive
pixelSize: 20
weight: 1000
}
}
}
// Hour Indicator numbers // Hour Indicator numbers (3-6-9-12)
Repeater { Repeater {
model: 4 model: 4
Item { Item {
@@ -335,13 +389,14 @@ Item {
anchors { anchors {
left: parent.left left: parent.left
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
leftMargin: 32 leftMargin: Config.options.background.clock.cookie.dialNumberStyle === "numbers" ? 32 : 96
}
Behavior on anchors.leftMargin{
animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this)
} }
implicitWidth: root.hourNumberSize implicitWidth: root.hourNumberSize
implicitHeight: implicitWidth implicitHeight: implicitWidth
//radius: implicitWidth / 2
color: "transparent" color: "transparent"
//opacity: 0.5
StyledText{ StyledText{
color: root.colOnBackground color: root.colOnBackground
@@ -134,6 +134,7 @@ Singleton {
property string dialNumberStyle: "dots" // Options: "dots" , "numbers", "none" property string dialNumberStyle: "dots" // Options: "dots" , "numbers", "none"
property string minuteHandStyle: "medium" // Options: "medium", "bold" property string minuteHandStyle: "medium" // Options: "medium", "bold"
property string secondHandStyle: "dot" // Options: "dot", "line" , "none" property string secondHandStyle: "dot" // Options: "dot", "line" , "none"
property string dateStyle: "rotating" // Options: "rotating", "square", "none"
property bool timeIndicators: true property bool timeIndicators: true
property bool centerGlow: true property bool centerGlow: true
property bool dateInClock: true property bool dateInClock: true
@@ -8,6 +8,7 @@ Item {
id: root id: root
property int sides: 12 property int sides: 12
property real animatedSides: 12
property int implicitSize: 100 property int implicitSize: 100
property real amplitude: implicitSize / 50 property real amplitude: implicitSize / 50
property int renderPoints: 360 property int renderPoints: 360
@@ -32,6 +33,13 @@ Item {
} }
} }
onSidesChanged: NumberAnimation {
target: root
property: "animatedSides"
to: root.sides
duration: 100
easing.type: Easing.InOutQuad
}
Shape { Shape {
id: shape id: shape
@@ -53,7 +61,7 @@ Item {
var radius = root.implicitSize / 2 - root.amplitude var radius = root.implicitSize / 2 - root.amplitude
for (var i = 0; i <= steps; i++) { for (var i = 0; i <= steps; i++) {
var angle = (i / steps) * 2 * Math.PI var angle = (i / steps) * 2 * Math.PI
var wave = waveAnimation ? Math.sin(angle * root.sides + Math.PI/2 - root.waveTime) * root.amplitude : Math.sin(angle * root.sides + Math.PI/2) * root.amplitude var wave = waveAnimation ? Math.sin(angle * root.animatedSides + Math.PI/2 - root.waveTime) * root.amplitude : Math.sin(angle * root.animatedSides + Math.PI/2) * root.amplitude
var x = Math.cos(angle) * (radius + wave) + cx var x = Math.cos(angle) * (radius + wave) + cx
var y = Math.sin(angle) * (radius + wave) + cy var y = Math.sin(angle) * (radius + wave) + cy
points.push(Qt.point(x, y)) points.push(Qt.point(x, y))
@@ -87,6 +87,7 @@ ContentPage {
} }
if (newValue != "none"){ if (newValue != "none"){
Config.options.background.clock.cookie.dateInClock = false; Config.options.background.clock.cookie.dateInClock = false;
Config.options.background.clock.cookie.dateStyle = "none";
} }
} }
options: [ options: [
@@ -138,27 +139,62 @@ ContentPage {
} }
} }
ContentSubsection { ConfigRow{
enabled: Config.options.background.clock.style === "cookie" ContentSubsection {
visible: Config.options.background.clock.style === "cookie" enabled: Config.options.background.clock.style === "cookie"
title: Translation.tr("Minute hand style") visible: Config.options.background.clock.style === "cookie"
ConfigSelectionArray { title: Translation.tr("Minute hand style")
currentValue: Config.options.background.clock.cookie.minuteHandStyle ConfigSelectionArray {
onSelected: newValue => { currentValue: Config.options.background.clock.cookie.minuteHandStyle
Config.options.background.clock.cookie.minuteHandStyle = newValue; onSelected: newValue => {
Config.options.background.clock.cookie.minuteHandStyle = newValue;
}
options: [
{
displayName: Translation.tr("Thin"),
icon: "pen_size_1",
value: "thin"
},
{
displayName: Translation.tr("Medium"),
icon: "pen_size_3",
value: "medium"
},
{
displayName: Translation.tr("Bold"),
icon: "pen_size_5",
value: "bold"
}
]
}
}
ContentSubsection {
enabled: Config.options.background.clock.style === "cookie" && Config.options.background.clock.cookie.dialNumberStyle === "none"
visible: Config.options.background.clock.style === "cookie"
title: Translation.tr("Date style")
ConfigSelectionArray {
currentValue: Config.options.background.clock.cookie.dateStyle
onSelected: newValue => {
Config.options.background.clock.cookie.dateStyle = newValue;
}
options: [
{
displayName: Translation.tr("None"),
icon: "deselect",
value: "none"
},
{
displayName: Translation.tr("Rotating"),
icon: "rotate_right",
value: "rotating"
},
{
displayName: Translation.tr("Square"),
icon: "square",
value: "square"
}
]
} }
options: [
{
displayName: Translation.tr("Medium"),
icon: "pen_size_1",
value: "medium"
},
{
displayName: Translation.tr("Bold"),
icon: "pen_size_5",
value: "bold"
},
]
} }
} }
@@ -224,22 +260,6 @@ ContentPage {
text: "Can't be turned on when using 'Numbers' dial style for aesthetic reasons" text: "Can't be turned on when using 'Numbers' dial style for aesthetic reasons"
} }
} }
ConfigSwitch {
enabled: Config.options.background.clock.style === "cookie" && Config.options.background.clock.cookie.dialNumberStyle === "none"
visible: Config.options.background.clock.style === "cookie"
buttonIcon: "date_range"
text: Translation.tr("Date inside clock")
checked: Config.options.background.clock.cookie.dateInClock
onEnabledChanged: {
checked = Config.options.background.clock.cookie.dateInClock
}
onCheckedChanged: {
Config.options.background.clock.cookie.dateInClock = checked;
}
StyledToolTip {
text: "Can only be turned on when not using any dial style for aesthetic reasons"
}
}
} }