From 2c54bd7eb4c3ffa528ef1331a77d682e7bd44b7f Mon Sep 17 00:00:00 2001 From: Kyant0 Date: Sun, 21 Sep 2025 18:21:58 +0800 Subject: [PATCH] Reset InverseLayerScope --- .../main/java/com/kyant/backdrop/Backdrop.kt | 4 +++- .../kyant/backdrop/ContentBackdropModifier.kt | 4 +++- .../com/kyant/backdrop/InverseLayerScope.kt | 18 +++++++++++++++--- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/backdrop/src/main/java/com/kyant/backdrop/Backdrop.kt b/backdrop/src/main/java/com/kyant/backdrop/Backdrop.kt index 16f4c62..d94ef35 100644 --- a/backdrop/src/main/java/com/kyant/backdrop/Backdrop.kt +++ b/backdrop/src/main/java/com/kyant/backdrop/Backdrop.kt @@ -52,7 +52,9 @@ class Backdrop internal constructor( val layerBlock = layerBlock if (layerBlock != null) { withTransform({ - val inverseLayerScope = inverseLayerScope ?: InverseLayerScope().also { inverseLayerScope = it } + val inverseLayerScope = + inverseLayerScope?.apply { reset() } + ?: InverseLayerScope().also { inverseLayerScope = it } with(inverseLayerScope) { inverseTransform(density = density, layerBlock = layerBlock) } translate(-offset.x, -offset.y) }) { diff --git a/backdrop/src/main/java/com/kyant/backdrop/ContentBackdropModifier.kt b/backdrop/src/main/java/com/kyant/backdrop/ContentBackdropModifier.kt index 2688a34..7e42605 100644 --- a/backdrop/src/main/java/com/kyant/backdrop/ContentBackdropModifier.kt +++ b/backdrop/src/main/java/com/kyant/backdrop/ContentBackdropModifier.kt @@ -205,7 +205,9 @@ private class ContentBackdropNode( val layerBlock = layerBlock if (layerBlock != null) { withTransform({ - val inverseLayerScope = inverseLayerScope ?: InverseLayerScope().also { inverseLayerScope = it } + val inverseLayerScope = + inverseLayerScope?.apply { reset() } + ?: InverseLayerScope().also { inverseLayerScope = it } with(inverseLayerScope) { inverseTransform(density = this@draw, layerBlock = layerBlock) } }) { drawLayer(layer) diff --git a/backdrop/src/main/java/com/kyant/backdrop/InverseLayerScope.kt b/backdrop/src/main/java/com/kyant/backdrop/InverseLayerScope.kt index dcf2b9b..c2fb66b 100644 --- a/backdrop/src/main/java/com/kyant/backdrop/InverseLayerScope.kt +++ b/backdrop/src/main/java/com/kyant/backdrop/InverseLayerScope.kt @@ -6,6 +6,8 @@ import androidx.compose.ui.graphics.BlendMode import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.CompositingStrategy +import androidx.compose.ui.graphics.DefaultCameraDistance +import androidx.compose.ui.graphics.DefaultShadowColor import androidx.compose.ui.graphics.GraphicsLayerScope import androidx.compose.ui.graphics.Matrix import androidx.compose.ui.graphics.RectangleShape @@ -33,13 +35,13 @@ internal class InverseLayerScope : GraphicsLayerScope { override var rotationX: Float = 0f override var rotationY: Float = 0f override var rotationZ: Float = 0f - override var cameraDistance: Float = 8f + override var cameraDistance: Float = DefaultCameraDistance override var transformOrigin: TransformOrigin = TransformOrigin.Center override var shape: Shape = RectangleShape override var clip: Boolean = false override var renderEffect: RenderEffect? = null - override var ambientShadowColor: Color = Color.Unspecified - override var spotShadowColor: Color = Color.Unspecified + override var ambientShadowColor: Color = DefaultShadowColor + override var spotShadowColor: Color = DefaultShadowColor override var compositingStrategy: CompositingStrategy = CompositingStrategy.Auto override var blendMode: BlendMode = BlendMode.SrcOver override var colorFilter: ColorFilter? = null @@ -63,6 +65,16 @@ internal class InverseLayerScope : GraphicsLayerScope { ) } + fun reset() { + scaleX = 1f + scaleY = 1f + translationX = 0f + translationY = 0f + rotationX = 0f + rotationY = 0f + rotationZ = 0f + } + private fun DrawTransform.inverseTransformAtTopLeft( rotationZ: Float = 0f, scaleX: Float = 1f,