Elye
Elye

Reputation: 60241

Why can't toPx() work outside of Canvas in Jetpack Compose?

In the below code, toPx() works in Canvas but not in Surface.
Why?

Canvas(modifier = Modifier.size(16.dp)) {
    val textPaint = Paint().asFrameworkPaint().apply {
        textSize = 32.dp.toPx()
    }
}

Surface(modifier = Modifier.size(16.dp)) {
    val textPaint = Paint().asFrameworkPaint().apply {
        textSize = 32.dp.toPx() // Error `toPx()`
    }
}    

Upvotes: 4

Views: 1477

Answers (1)

Gabriele Mariotti
Gabriele Mariotti

Reputation: 364471

The toPx() function is defined inside a Density interface and you cannot use it unless you provide it. The Canvas works with a DrawScope which provides it.

To use it you can provide the Density using theLocalDensity provider.
Something like:

val dpToPx = with(LocalDensity.current) { 32.dp.toPx() }

Upvotes: 13

Related Questions