diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/component/ShapedLauncherIcon.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/component/ShapedLauncherIcon.kt index 9a09fdef..6602b6b6 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/component/ShapedLauncherIcon.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/component/ShapedLauncherIcon.kt @@ -416,22 +416,21 @@ private fun ClockLayer( } val second = remember { - Animatable((time.second - defaultSecond).toFloat()) + Animatable((time.second).toFloat() + (time.nano / 1000000f) / 1000f) } val minute = remember { - Animatable((time.minute - defaultMinute).toFloat() + time.second.toFloat() / 60f) + Animatable((time.minute).toFloat() + time.second.toFloat() / 60f) } val hour = remember { - Animatable((time.hour - defaultHour).toFloat() + time.minute.toFloat() / 60f) + Animatable((time.hour).toFloat() + time.minute.toFloat() / 60f) } LaunchedEffect(time) { - val h = (time.hour - defaultHour).toFloat() + (time.minute - defaultSecond).toFloat() / 60f - val m = - (time.minute - defaultMinute).toFloat() + (time.second - defaultSecond).toFloat() / 60f - val s = (time.second - defaultSecond).toFloat() + (time.nano / 1000000f) / 1000f + val h = (time.hour).toFloat() + (time.minute).toFloat() / 60f + val m = (time.minute.toFloat() + (time.second).toFloat() / 60f) + val s = (time.second).toFloat() + (time.nano / 1000000f) / 1000f second.snapTo(s) hour.snapTo(h) minute.snapTo(m) @@ -454,27 +453,18 @@ private fun ClockLayer( this.scale(scale) }) { for (sublayer in sublayers) { - withTransform({ - when (sublayer.role) { - ClockSublayerRole.Hour -> { - rotate(hour.value / 12f * 360f) - } - - ClockSublayerRole.Minute -> { - rotate(minute.value / 60f * 360f) - } - - ClockSublayerRole.Second -> { - rotate(second.value / 60f * 360f) - } - - ClockSublayerRole.Static -> {} - } - }) { - drawIntoCanvas { - sublayer.drawable.bounds = this.size.toRect().toAndroidRect() - sublayer.drawable.drawWithColorFilter(it.nativeCanvas, colorFilter) + when (sublayer.role) { + ClockSublayerRole.Hour -> { + sublayer.drawable.level = (((hour.value.toInt() - defaultHour + 12) % 12) * 60 + + ((minute.value.toInt() - defaultMinute + 60) % 60)) } + ClockSublayerRole.Minute -> sublayer.drawable.level = ((minute.value.toInt() - defaultMinute + 60) % 60) + ClockSublayerRole.Second -> sublayer.drawable.level = (((second.value.toInt() - defaultSecond + 60) % 60) * 10) + else -> {} + } + drawIntoCanvas { + sublayer.drawable.bounds = this.size.toRect().toAndroidRect() + sublayer.drawable.drawWithColorFilter(it.nativeCanvas, colorFilter) } } }