Skip to content

Commit

Permalink
Do not measure clipped graphics
Browse files Browse the repository at this point in the history
  • Loading branch information
MatkovIvan committed Mar 15, 2024
1 parent 2194c06 commit ac6cd20
Showing 1 changed file with 7 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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()
}

Expand All @@ -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)
Expand All @@ -281,7 +284,6 @@ internal class RenderNodeLayer(
currentRenderEffect != null ||
compositingStrategy == CompositingStrategy.Offscreen
if (requiresLayer) {
val bounds = size.toSize().toRect()
canvas.saveLayer(
bounds,
Paint().apply {
Expand Down

0 comments on commit ac6cd20

Please sign in to comment.