diff --git a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.skiko.kt b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.skiko.kt index e676e3e04b3bb..87c3cdb9eafeb 100644 --- a/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.skiko.kt +++ b/compose/ui/ui/src/skikoMain/kotlin/androidx/compose/ui/platform/RenderNodeLayer.skiko.kt @@ -19,6 +19,7 @@ package androidx.compose.ui.platform import org.jetbrains.skia.Rect as SkRect import androidx.compose.ui.geometry.MutableRect import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Rect import androidx.compose.ui.geometry.RoundRect import androidx.compose.ui.geometry.toRect import androidx.compose.ui.graphics.Canvas @@ -42,6 +43,7 @@ import androidx.compose.ui.graphics.asSkiaPath import androidx.compose.ui.graphics.nativeCanvas import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.graphics.toSkiaRRect +import androidx.compose.ui.graphics.toSkiaRect import androidx.compose.ui.node.OwnedLayer import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.IntOffset @@ -237,11 +239,12 @@ internal class RenderNodeLayer( override fun drawLayer(canvas: Canvas) { if (picture == null) { + val bounds = size.toSize().toRect() val pictureCanvas = pictureRecorder.beginRecording( - bounds = PICTURE_BOUNDS, - bbh = bbhFactory + bounds = if (clip) bounds.toSkiaRect() else PICTURE_BOUNDS, + bbh = if (clip) null else bbhFactory ) - performDrawLayer(pictureCanvas.asComposeCanvas()) + performDrawLayer(pictureCanvas.asComposeCanvas(), bounds) picture = pictureRecorder.finishRecordingAsPicture() } @@ -260,7 +263,7 @@ internal class RenderNodeLayer( matrix.timesAssign(inverseMatrix) } - private fun performDrawLayer(canvas: Canvas) { + private fun performDrawLayer(canvas: Canvas, bounds: Rect) { if (alpha > 0) { if (shadowElevation > 0) { drawShadow(canvas) @@ -281,7 +284,6 @@ internal class RenderNodeLayer( currentRenderEffect != null || compositingStrategy == CompositingStrategy.Offscreen if (requiresLayer) { - val bounds = size.toSize().toRect() canvas.saveLayer( bounds, Paint().apply {