If I use what
@Albert Chang suggested it works without additional recompositions. So thank you!
@Composable
fun SegmentedProgressIndicator(
progressProvider: () -> Float,
numberOfSegments: Int,
modifier: Modifier = Modifier,
color: Color = Color.White,
backgroundColor: Color = color.copy(alpha = BackgroundOpacity),
progressHeight: Dp = ProgressHeight,
segmentGap: Dp = SegmentGap
) {
val gap: Float
val barHeight: Float
with(LocalDensity.current) {
gap = segmentGap.toPx()
barHeight = progressHeight.toPx()
}
Canvas(
modifier
.semantics(mergeDescendants = true) {
progressBarRangeInfo = ProgressBarRangeInfo(progressProvider().coerceIn(0f..1f), 0f..1f, 0)
}
.height(progressHeight)
) {
drawSegments(1f, backgroundColor, barHeight, numberOfSegments, gap)
drawSegments(progressProvider(), color, barHeight, numberOfSegments, gap)
}
}