refactor: make easing immutable in ProgressIndicator

This commit is contained in:
2023-11-30 14:09:38 +08:00
parent 01bb17c988
commit 9bdfeb7954

View File

@@ -24,7 +24,6 @@
package com.highcapable.flexiui.component package com.highcapable.flexiui.component
import androidx.compose.animation.core.CubicBezierEasing import androidx.compose.animation.core.CubicBezierEasing
import androidx.compose.animation.core.Easing
import androidx.compose.animation.core.LinearEasing import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.VectorConverter import androidx.compose.animation.core.VectorConverter
import androidx.compose.animation.core.animateFloat import androidx.compose.animation.core.animateFloat
@@ -74,8 +73,7 @@ data class CircularIndicatorStyle(
val rotationsPerCycle: Int, val rotationsPerCycle: Int,
val startAngleOffset: Float, val startAngleOffset: Float,
val baseRotationAngle: Float, val baseRotationAngle: Float,
val jumpRotationAngle: Float, val jumpRotationAngle: Float
val easing: Easing
) : IProgressIndicatorStyle ) : IProgressIndicatorStyle
@Immutable @Immutable
@@ -91,11 +89,7 @@ data class LinearIndicatorStyle(
val firstLineHeadDelay: Int, val firstLineHeadDelay: Int,
val firstLineTailDelay: Int, val firstLineTailDelay: Int,
val secondLineHeadDelay: Int, val secondLineHeadDelay: Int,
val secondLineTailDelay: Int, val secondLineTailDelay: Int
val firstLineHeadEasing: Easing,
val firstLineTailEasing: Easing,
val secondLineHeadEasing: Easing,
val secondLineTailEasing: Easing
) : IProgressIndicatorStyle ) : IProgressIndicatorStyle
@Immutable @Immutable
@@ -160,7 +154,7 @@ fun CircularProgressIndicator(
infiniteRepeatable( infiniteRepeatable(
animation = keyframes { animation = keyframes {
durationMillis = headAndTailAnimationDuration * 2 durationMillis = headAndTailAnimationDuration * 2
0f at 0 with style.easing 0f at 0 with CircularEasing
style.jumpRotationAngle at headAndTailAnimationDuration style.jumpRotationAngle at headAndTailAnimationDuration
} }
) )
@@ -171,7 +165,7 @@ fun CircularProgressIndicator(
infiniteRepeatable( infiniteRepeatable(
animation = keyframes { animation = keyframes {
durationMillis = headAndTailAnimationDuration * 2 durationMillis = headAndTailAnimationDuration * 2
0f at headAndTailAnimationDuration with style.easing 0f at headAndTailAnimationDuration with CircularEasing
style.jumpRotationAngle at durationMillis style.jumpRotationAngle at durationMillis
} }
) )
@@ -218,7 +212,7 @@ fun LinearProgressIndicator(
infiniteRepeatable( infiniteRepeatable(
animation = keyframes { animation = keyframes {
durationMillis = style.animationDuration durationMillis = style.animationDuration
0f at style.firstLineHeadDelay with style.firstLineHeadEasing 0f at style.firstLineHeadDelay with FirstLineHeadEasing
1f at style.firstLineHeadDuration + style.firstLineHeadDelay 1f at style.firstLineHeadDuration + style.firstLineHeadDelay
} }
) )
@@ -229,7 +223,7 @@ fun LinearProgressIndicator(
infiniteRepeatable( infiniteRepeatable(
animation = keyframes { animation = keyframes {
durationMillis = style.animationDuration durationMillis = style.animationDuration
0f at style.firstLineTailDelay with style.firstLineTailEasing 0f at style.firstLineTailDelay with FirstLineTailEasing
1f at style.firstLineTailDuration + style.firstLineTailDelay 1f at style.firstLineTailDuration + style.firstLineTailDelay
} }
) )
@@ -240,7 +234,7 @@ fun LinearProgressIndicator(
infiniteRepeatable( infiniteRepeatable(
animation = keyframes { animation = keyframes {
durationMillis = style.animationDuration durationMillis = style.animationDuration
0f at style.secondLineHeadDelay with style.secondLineHeadEasing 0f at style.secondLineHeadDelay with SecondLineHeadEasing
1f at style.secondLineHeadDuration + style.secondLineHeadDelay 1f at style.secondLineHeadDuration + style.secondLineHeadDelay
} }
) )
@@ -251,7 +245,7 @@ fun LinearProgressIndicator(
infiniteRepeatable( infiniteRepeatable(
animation = keyframes { animation = keyframes {
durationMillis = style.animationDuration durationMillis = style.animationDuration
0f at style.secondLineTailDelay with style.secondLineTailEasing 0f at style.secondLineTailDelay with SecondLineTailEasing
1f at style.secondLineTailDuration + style.secondLineTailDelay 1f at style.secondLineTailDuration + style.secondLineTailDelay
} }
) )
@@ -398,8 +392,7 @@ private fun defaultCircularIndicatorStyle() = CircularIndicatorStyle(
rotationsPerCycle = DefaultRotationsPerCycle, rotationsPerCycle = DefaultRotationsPerCycle,
startAngleOffset = DefaultStartAngleOffset, startAngleOffset = DefaultStartAngleOffset,
baseRotationAngle = DefaultBaseRotationAngle, baseRotationAngle = DefaultBaseRotationAngle,
jumpRotationAngle = DefaultJumpRotationAngle, jumpRotationAngle = DefaultJumpRotationAngle
easing = DefaultCircularEasing
) )
@Composable @Composable
@@ -416,11 +409,7 @@ private fun defaultLinearIndicatorStyle() = LinearIndicatorStyle(
firstLineHeadDelay = DefaultFirstLineHeadDelay, firstLineHeadDelay = DefaultFirstLineHeadDelay,
firstLineTailDelay = DefaultFirstLineTailDelay, firstLineTailDelay = DefaultFirstLineTailDelay,
secondLineHeadDelay = DefaultSecondLineHeadDelay, secondLineHeadDelay = DefaultSecondLineHeadDelay,
secondLineTailDelay = DefaultSecondLineTailDelay, secondLineTailDelay = DefaultSecondLineTailDelay
firstLineHeadEasing = DefaultFirstLineHeadEasing,
firstLineTailEasing = DefaultFirstLineTailEasing,
secondLineHeadEasing = DefaultSecondLineHeadEasing,
secondLineTailEasing = DefaultSecondLineTailEasing
) )
private fun caleRotationAngleOffset(baseRotationAngle: Float, jumpRotationAngle: Float) = (baseRotationAngle + jumpRotationAngle) % 360f private fun caleRotationAngleOffset(baseRotationAngle: Float, jumpRotationAngle: Float) = (baseRotationAngle + jumpRotationAngle) % 360f
@@ -448,8 +437,8 @@ private const val DefaultStartAngleOffset = -90f
private const val DefaultBaseRotationAngle = 286f private const val DefaultBaseRotationAngle = 286f
private const val DefaultJumpRotationAngle = 290f private const val DefaultJumpRotationAngle = 290f
private val DefaultFirstLineHeadEasing = CubicBezierEasing(0.2f, 0f, 0.8f, 1f) private val FirstLineHeadEasing = CubicBezierEasing(0.2f, 0f, 0.8f, 1f)
private val DefaultFirstLineTailEasing = CubicBezierEasing(0.4f, 0f, 1f, 1f) private val FirstLineTailEasing = CubicBezierEasing(0.4f, 0f, 1f, 1f)
private val DefaultSecondLineHeadEasing = CubicBezierEasing(0f, 0f, 0.65f, 1f) private val SecondLineHeadEasing = CubicBezierEasing(0f, 0f, 0.65f, 1f)
private val DefaultSecondLineTailEasing = CubicBezierEasing(0.1f, 0f, 0.45f, 1f) private val SecondLineTailEasing = CubicBezierEasing(0.1f, 0f, 0.45f, 1f)
private val DefaultCircularEasing = CubicBezierEasing(0.4f, 0f, 0.2f, 1f) private val CircularEasing = CubicBezierEasing(0.4f, 0f, 0.2f, 1f)