Coverage Summary for Class: WidthByTextKt (com.vsevolodganin.clicktrack.utils.compose)
Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
WidthByTextKt |
0%
(0/1)
|
0%
(0/5)
|
0%
(0/8)
|
0%
(0/15)
|
0%
(0/204)
|
package com.vsevolodganin.clicktrack.utils.compose
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.widthIn
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalFontFamilyResolver
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.MultiParagraphIntrinsics
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.unit.Dp
fun Modifier.widthByText(text: String, style: TextStyle) = composed {
width(dpByText(text, style))
}
fun Modifier.widthInByText(minText: String? = null, maxText: String? = null, style: TextStyle) = composed {
val min = minText?.let { dpByText(it, style) } ?: Dp.Unspecified
val max = maxText?.let { dpByText(it, style) } ?: Dp.Unspecified
this.widthIn(min = min, max = max)
}
@Composable
private fun dpByText(text: String, style: TextStyle): Dp {
val maxIntrinsics = MultiParagraphIntrinsics(
annotatedString = AnnotatedString(text),
style = style,
placeholders = emptyList(),
density = LocalDensity.current,
fontFamilyResolver = LocalFontFamilyResolver.current,
)
return with(LocalDensity.current) {
maxIntrinsics.maxIntrinsicWidth.toDp()
}
}