diff --git a/.idea/gradle.xml b/.idea/gradle.xml index f6ef7a9..6be2029 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -11,6 +11,7 @@ diff --git a/backdrop/.gitignore b/backdrop/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/backdrop/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/backdrop/build.gradle.kts b/backdrop/build.gradle.kts new file mode 100644 index 0000000..dface5c --- /dev/null +++ b/backdrop/build.gradle.kts @@ -0,0 +1,47 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) + id("dev.shreyaspatil.compose-compiler-report-generator") +} + +android { + namespace = "com.kyant.backdrop" + compileSdk = 36 + buildToolsVersion = "36.0.0" + + defaultConfig { + minSdk = 21 + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_21 + targetCompatibility = JavaVersion.VERSION_21 + } + kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_21 + freeCompilerArgs.addAll( + "-jvm-default=no-compatibility", + ) + } + } + buildFeatures { + compose = true + } +} + +dependencies { + implementation(libs.androidx.compose.foundation) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) +} diff --git a/backdrop/consumer-rules.pro b/backdrop/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/backdrop/proguard-rules.pro b/backdrop/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/backdrop/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/backdrop/src/main/AndroidManifest.xml b/backdrop/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5918e6 --- /dev/null +++ b/backdrop/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/backdrop/src/main/java/com/kyant/backdrop/Backdrop.kt b/backdrop/src/main/java/com/kyant/backdrop/Backdrop.kt new file mode 100644 index 0000000..d1662a7 --- /dev/null +++ b/backdrop/src/main/java/com/kyant/backdrop/Backdrop.kt @@ -0,0 +1,21 @@ +package com.kyant.backdrop + +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.layout.LayoutCoordinates + +fun Modifier.backdrop(backdrop: Backdrop): Modifier { + val element = backdrop.element + return if (element != null) { + this then element + } else { + this + } +} + +interface Backdrop { + + val element: Modifier.Element? + + fun DrawScope.drawChild(coordinates: LayoutCoordinates) +} diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/BackdropDrawScope.kt b/backdrop/src/main/java/com/kyant/backdrop/BackdropDrawScope.kt similarity index 78% rename from liquid-glass/src/main/java/com/kyant/liquidglass/BackdropDrawScope.kt rename to backdrop/src/main/java/com/kyant/backdrop/BackdropDrawScope.kt index 5dec834..7516527 100644 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/BackdropDrawScope.kt +++ b/backdrop/src/main/java/com/kyant/backdrop/BackdropDrawScope.kt @@ -1,4 +1,4 @@ -package com.kyant.liquidglass +package com.kyant.backdrop import androidx.compose.ui.graphics.drawscope.DrawScope @@ -7,7 +7,7 @@ sealed interface BackdropDrawScope : DrawScope { fun drawBackdrop() } -internal class BackdropDrawScopeImpl internal constructor( +class SimpleBackdropDrawScope( val drawScope: DrawScope, val onDrawBackdrop: DrawScope.() -> Unit ) : BackdropDrawScope, DrawScope by drawScope { diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/Backdrop.kt b/backdrop/src/main/java/com/kyant/backdrop/LayerBackdrop.kt similarity index 51% rename from liquid-glass/src/main/java/com/kyant/liquidglass/Backdrop.kt rename to backdrop/src/main/java/com/kyant/backdrop/LayerBackdrop.kt index 5b88200..579906e 100644 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/Backdrop.kt +++ b/backdrop/src/main/java/com/kyant/backdrop/LayerBackdrop.kt @@ -1,4 +1,4 @@ -package com.kyant.liquidglass +package com.kyant.backdrop import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable @@ -9,6 +9,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.drawscope.ContentDrawScope import androidx.compose.ui.graphics.drawscope.DrawScope import androidx.compose.ui.graphics.drawscope.translate import androidx.compose.ui.graphics.isSpecified @@ -19,6 +20,10 @@ import androidx.compose.ui.graphics.rememberGraphicsLayer import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.layout.LayoutCoordinates import androidx.compose.ui.layout.positionOnScreen +import androidx.compose.ui.node.DrawModifierNode +import androidx.compose.ui.node.GlobalPositionAwareModifierNode +import androidx.compose.ui.node.ModifierNodeElement +import androidx.compose.ui.platform.InspectorInfo @Composable fun rememberLayerBackdrop(backgroundColor: Color?): LayerBackdrop { @@ -31,13 +36,6 @@ fun rememberLayerBackdrop(backgroundColor: Color?): LayerBackdrop { } } -interface Backdrop { - - val element: Modifier.Element? - - fun DrawScope.drawChild(coordinates: LayoutCoordinates) -} - @Stable class LayerBackdrop( val graphicsLayer: GraphicsLayer, @@ -59,3 +57,60 @@ class LayerBackdrop( } } } + +private class LayerBackdropElement( + val backdrop: LayerBackdrop +) : ModifierNodeElement() { + + override fun create(): LayerBackdropNode { + return LayerBackdropNode(backdrop = backdrop) + } + + override fun update(node: LayerBackdropNode) { + node.update(backdrop = backdrop) + } + + override fun InspectorInfo.inspectableProperties() { + name = "layerBackdrop" + properties["backdrop"] = backdrop + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is LayerBackdropElement) return false + + if (backdrop != other.backdrop) return false + + return true + } + + override fun hashCode(): Int { + return backdrop.hashCode() + } +} + +private class LayerBackdropNode( + var backdrop: LayerBackdrop +) : DrawModifierNode, GlobalPositionAwareModifierNode, Modifier.Node() { + + override val shouldAutoInvalidate: Boolean = false + + override fun ContentDrawScope.draw() { + drawContent() + + backdrop.graphicsLayer.record { + backdrop.backgroundColor?.let { drawRect(it) } + this@draw.drawContent() + } + } + + override fun onGloballyPositioned(coordinates: LayoutCoordinates) { + if (coordinates.isAttached) { + backdrop.backdropPosition = coordinates.positionOnScreen() + } + } + + fun update(backdrop: LayerBackdrop) { + this.backdrop = backdrop + } +} diff --git a/glassmusic/src/main/java/com/kyant/glassmusic/BottomTabs.kt b/glassmusic/src/main/java/com/kyant/glassmusic/BottomTabs.kt index 7c7247e..093fc16 100644 --- a/glassmusic/src/main/java/com/kyant/glassmusic/BottomTabs.kt +++ b/glassmusic/src/main/java/com/kyant/glassmusic/BottomTabs.kt @@ -31,7 +31,6 @@ import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor -import androidx.compose.ui.graphics.drawscope.scale import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.layout @@ -125,9 +124,7 @@ fun BottomTabs( ) { val maxScale = 1f + 4.dp / height val scale = lerp(1f, maxScale, dragFraction) - scale(1f / scale, 1f / scale, Offset.Zero) { - this@liquidGlass.drawBackdrop() - } + scale(1f / scale, 1f / scale, Offset.Zero) } .fillMaxSize() .padding(padding), @@ -233,13 +230,11 @@ fun BottomTabs( scale( lerp(1f, 0.8f, scaleXFraction), lerp(1f, 0.8f, scaleYFraction) - ) { - val scaleX = lerp(1f, 0.9f, scaleXFraction) - val scaleY = lerp(1f, 0.9f, scaleYFraction) - scale(1f / scaleX, 1f / scaleY, Offset.Zero) { - this@liquidGlass.drawBackdrop() - } - } + ) + + val scaleX = lerp(1f, 0.9f, scaleXFraction) + val scaleY = lerp(1f, 0.9f, scaleYFraction) + scale(1f / scaleX, 1f / scaleY, Offset.Zero) } .draggable( rememberDraggableState { delta -> diff --git a/liquid-glass/build.gradle.kts b/liquid-glass/build.gradle.kts index 3579208..1b599c2 100644 --- a/liquid-glass/build.gradle.kts +++ b/liquid-glass/build.gradle.kts @@ -41,6 +41,7 @@ android { } dependencies { + api(project(":backdrop")) implementation(libs.androidx.compose.foundation) implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui.graphics) diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/BackdropModifier.kt b/liquid-glass/src/main/java/com/kyant/liquidglass/BackdropModifier.kt deleted file mode 100644 index f700833..0000000 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/BackdropModifier.kt +++ /dev/null @@ -1,76 +0,0 @@ -package com.kyant.liquidglass - -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.drawscope.ContentDrawScope -import androidx.compose.ui.layout.LayoutCoordinates -import androidx.compose.ui.layout.positionOnScreen -import androidx.compose.ui.node.DrawModifierNode -import androidx.compose.ui.node.GlobalPositionAwareModifierNode -import androidx.compose.ui.node.ModifierNodeElement -import androidx.compose.ui.platform.InspectorInfo - -fun Modifier.backdrop(backdrop: Backdrop): Modifier { - val element = backdrop.element - return if (element != null) { - this then element - } else { - this - } -} - -internal class LayerBackdropElement( - val backdrop: LayerBackdrop -) : ModifierNodeElement() { - - override fun create(): LayerBackdropNode { - return LayerBackdropNode(backdrop = backdrop) - } - - override fun update(node: LayerBackdropNode) { - node.update(backdrop = backdrop) - } - - override fun InspectorInfo.inspectableProperties() { - name = "layerBackdrop" - properties["backdrop"] = backdrop - } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other !is LayerBackdropElement) return false - - if (backdrop != other.backdrop) return false - - return true - } - - override fun hashCode(): Int { - return backdrop.hashCode() - } -} - -internal class LayerBackdropNode( - var backdrop: LayerBackdrop -) : DrawModifierNode, GlobalPositionAwareModifierNode, Modifier.Node() { - - override val shouldAutoInvalidate: Boolean = false - - override fun ContentDrawScope.draw() { - drawContent() - - backdrop.graphicsLayer.record { - backdrop.backgroundColor?.let { drawRect(it) } - this@draw.drawContent() - } - } - - override fun onGloballyPositioned(coordinates: LayoutCoordinates) { - if (coordinates.isAttached) { - backdrop.backdropPosition = coordinates.positionOnScreen() - } - } - - fun update(backdrop: LayerBackdrop) { - this.backdrop = backdrop - } -} diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/Deprecated.kt b/liquid-glass/src/main/java/com/kyant/liquidglass/Deprecated.kt new file mode 100644 index 0000000..2ddcaf5 --- /dev/null +++ b/liquid-glass/src/main/java/com/kyant/liquidglass/Deprecated.kt @@ -0,0 +1,163 @@ +package com.kyant.liquidglass + +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.CompositingStrategy +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.graphics.drawscope.DrawTransform +import androidx.compose.ui.graphics.drawscope.withTransform +import androidx.compose.ui.graphics.layer.GraphicsLayer +import androidx.compose.ui.graphics.rememberGraphicsLayer +import androidx.compose.ui.layout.LayoutCoordinates +import androidx.compose.ui.layout.positionOnScreen +import androidx.compose.ui.node.DrawModifierNode +import androidx.compose.ui.node.GlobalPositionAwareModifierNode +import androidx.compose.ui.node.ModifierNodeElement +import androidx.compose.ui.platform.InspectorInfo +import com.kyant.backdrop.LayerBackdrop +import com.kyant.backdrop.backdrop + +@Deprecated(message = "[Backdrop API] Use backdrop instead of state, use onDrawBackdrop instead of transformBlock") +fun Modifier.liquidGlass( + state: LiquidGlassProviderState, + style: GlassStyle, + compositingStrategy: CompositingStrategy = CompositingStrategy.Offscreen, + transformBlock: (DrawTransform.() -> Unit)? = null +): Modifier = + this.liquidGlass( + backdrop = state.backdrop, + style = style, + compositingStrategy = compositingStrategy, + onDrawBackdrop = draw@{ + if (transformBlock != null) { + withTransform(transformBlock) { + this@draw.drawBackdrop() + } + } else { + drawBackdrop() + } + } + ) + +@Deprecated(message = "[Backdrop API] Use backdrop instead of state, use onDrawBackdrop instead of transformBlock") +fun Modifier.liquidGlass( + state: LiquidGlassProviderState, + compositingStrategy: CompositingStrategy = CompositingStrategy.Offscreen, + transformBlock: (DrawTransform.() -> Unit)? = null, + style: () -> GlassStyle +): Modifier = + this.liquidGlass( + backdrop = state.backdrop, + compositingStrategy = compositingStrategy, + onDrawBackdrop = draw@{ + if (transformBlock != null) { + withTransform(transformBlock) { + this@draw.drawBackdrop() + } + } else { + drawBackdrop() + } + }, + style = style + ) + +@Deprecated(message = "[Backdrop API] Use backdrop modifier instead") +fun Modifier.liquidGlassProvider(state: LiquidGlassProviderState): Modifier = + this.backdrop(state.backdrop) + +@RequiresApi(Build.VERSION_CODES.TIRAMISU) +private class LiquidGlassProviderElement( + val state: LiquidGlassProviderState +) : ModifierNodeElement() { + + override fun create(): LiquidGlassProviderNode { + return LiquidGlassProviderNode(state = state) + } + + override fun update(node: LiquidGlassProviderNode) { + node.update(state = state) + } + + override fun InspectorInfo.inspectableProperties() { + name = "liquidGlassProvider" + properties["state"] = state + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other !is LiquidGlassProviderElement) return false + + if (state != other.state) return false + + return true + } + + override fun hashCode(): Int { + return state.hashCode() + } +} + +@RequiresApi(Build.VERSION_CODES.TIRAMISU) +private class LiquidGlassProviderNode( + var state: LiquidGlassProviderState +) : DrawModifierNode, GlobalPositionAwareModifierNode, Modifier.Node() { + + override val shouldAutoInvalidate: Boolean = false + + override fun ContentDrawScope.draw() { + drawContent() + + state.graphicsLayer.record { + state.backgroundColor?.let { drawRect(it) } + this@draw.drawContent() + } + } + + override fun onGloballyPositioned(coordinates: LayoutCoordinates) { + if (coordinates.isAttached) { + state.position = coordinates.positionOnScreen() + } + } + + fun update( + state: LiquidGlassProviderState + ) { + this.state = state + } +} + +@Deprecated("[Backdrop API] Use `rememberLayerBackdrop` instead") +@Composable +fun rememberLiquidGlassProviderState( + backgroundColor: Color? +): LiquidGlassProviderState { + val graphicsLayer = rememberGraphicsLayer() + return remember(backgroundColor, graphicsLayer) { + LiquidGlassProviderState( + backgroundColor = backgroundColor, + graphicsLayer = graphicsLayer + ) + } +} + +@Deprecated("[Backdrop API] Use `LayerBackdrop` instead") +@Stable +class LiquidGlassProviderState internal constructor( + val backgroundColor: Color?, + internal val graphicsLayer: GraphicsLayer +) { + + internal val backdrop = LayerBackdrop(graphicsLayer, backgroundColor) + + internal var position: Offset + get() = backdrop.backdropPosition + set(value) { + backdrop.backdropPosition = value + } +} diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassModifier.kt b/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassModifier.kt index b70687d..da86410 100644 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassModifier.kt +++ b/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassModifier.kt @@ -22,6 +22,9 @@ import androidx.compose.ui.node.invalidateDraw import androidx.compose.ui.node.observeReads import androidx.compose.ui.node.requireGraphicsContext import androidx.compose.ui.platform.InspectorInfo +import com.kyant.backdrop.Backdrop +import com.kyant.backdrop.BackdropDrawScope +import com.kyant.backdrop.SimpleBackdropDrawScope import com.kyant.liquidglass.dispersion.Dispersion import com.kyant.liquidglass.highlight.GlassHighlightElement import com.kyant.liquidglass.highlight.SimpleGlassHighlightElement @@ -79,34 +82,6 @@ fun Modifier.liquidGlass( .then(GlassBrushElement(style)) .then(GlassHighlightElement(style)) -@Deprecated(message = "[Backdrop API] Use backdrop instead of state") -fun Modifier.liquidGlass( - state: LiquidGlassProviderState, - style: GlassStyle, - compositingStrategy: CompositingStrategy = CompositingStrategy.Offscreen, - onDrawBackdrop: BackdropDrawScope.() -> Unit = DefaultOnDrawBackdrop -): Modifier = - this.liquidGlass( - backdrop = state.backdrop, - style = style, - compositingStrategy = compositingStrategy, - onDrawBackdrop = onDrawBackdrop - ) - -@Deprecated(message = "[Backdrop API] Use backdrop instead of state") -fun Modifier.liquidGlass( - state: LiquidGlassProviderState, - compositingStrategy: CompositingStrategy = CompositingStrategy.Offscreen, - onDrawBackdrop: BackdropDrawScope.() -> Unit = DefaultOnDrawBackdrop, - style: () -> GlassStyle -): Modifier = - this.liquidGlass( - backdrop = state.backdrop, - compositingStrategy = compositingStrategy, - onDrawBackdrop = onDrawBackdrop, - style = style - ) - @RequiresApi(Build.VERSION_CODES.TIRAMISU) private class SimpleLiquidGlassElement( val backdrop: Backdrop, @@ -335,7 +310,7 @@ private class SimpleLiquidGlassNode( onDrawWithContent { if (graphicsLayer != null) { graphicsLayer.record { - val backdropDrawScope = BackdropDrawScopeImpl(this, drawBackdropBlock) + val backdropDrawScope = SimpleBackdropDrawScope(this, drawBackdropBlock) onDrawBackdrop(backdropDrawScope) } diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassProviderModifier.kt b/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassProviderModifier.kt deleted file mode 100644 index fbd7aef..0000000 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassProviderModifier.kt +++ /dev/null @@ -1,77 +0,0 @@ -package com.kyant.liquidglass - -import android.os.Build -import androidx.annotation.RequiresApi -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.drawscope.ContentDrawScope -import androidx.compose.ui.layout.LayoutCoordinates -import androidx.compose.ui.layout.positionOnScreen -import androidx.compose.ui.node.DrawModifierNode -import androidx.compose.ui.node.GlobalPositionAwareModifierNode -import androidx.compose.ui.node.ModifierNodeElement -import androidx.compose.ui.platform.InspectorInfo - -@Deprecated(message = "[Backdrop API] Use backdrop modifier instead") -fun Modifier.liquidGlassProvider(state: LiquidGlassProviderState): Modifier = - this.backdrop(state.backdrop) - -@RequiresApi(Build.VERSION_CODES.TIRAMISU) -private class LiquidGlassProviderElement( - val state: LiquidGlassProviderState -) : ModifierNodeElement() { - - override fun create(): LiquidGlassProviderNode { - return LiquidGlassProviderNode(state = state) - } - - override fun update(node: LiquidGlassProviderNode) { - node.update(state = state) - } - - override fun InspectorInfo.inspectableProperties() { - name = "liquidGlassProvider" - properties["state"] = state - } - - override fun equals(other: Any?): Boolean { - if (this === other) return true - if (other !is LiquidGlassProviderElement) return false - - if (state != other.state) return false - - return true - } - - override fun hashCode(): Int { - return state.hashCode() - } -} - -@RequiresApi(Build.VERSION_CODES.TIRAMISU) -private class LiquidGlassProviderNode( - var state: LiquidGlassProviderState -) : DrawModifierNode, GlobalPositionAwareModifierNode, Modifier.Node() { - - override val shouldAutoInvalidate: Boolean = false - - override fun ContentDrawScope.draw() { - drawContent() - - state.graphicsLayer.record { - state.backgroundColor?.let { drawRect(it) } - this@draw.drawContent() - } - } - - override fun onGloballyPositioned(coordinates: LayoutCoordinates) { - if (coordinates.isAttached) { - state.position = coordinates.positionOnScreen() - } - } - - fun update( - state: LiquidGlassProviderState - ) { - this.state = state - } -} diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassProviderState.kt b/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassProviderState.kt deleted file mode 100644 index 64e5c24..0000000 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassProviderState.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.kyant.liquidglass - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.Stable -import androidx.compose.runtime.remember -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.layer.GraphicsLayer -import androidx.compose.ui.graphics.rememberGraphicsLayer - -@Deprecated("[Backdrop API] Use `rememberLayerBackdrop` instead") -@Composable -fun rememberLiquidGlassProviderState( - backgroundColor: Color? -): LiquidGlassProviderState { - val graphicsLayer = rememberGraphicsLayer() - return remember(backgroundColor, graphicsLayer) { - LiquidGlassProviderState( - backgroundColor = backgroundColor, - graphicsLayer = graphicsLayer - ) - } -} - -@Deprecated("[Backdrop API] Use `LayerBackdrop` instead") -@Stable -class LiquidGlassProviderState internal constructor( - val backgroundColor: Color?, - internal val graphicsLayer: GraphicsLayer -) { - - internal val backdrop = LayerBackdrop(graphicsLayer, backgroundColor) - - internal var position: Offset - get() = backdrop.backdropPosition - set(value) { - backdrop.backdropPosition = value - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index a90b513..8fc0aab 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,6 +20,7 @@ dependencyResolutionManagement { } rootProject.name = "Glass" -include(":app") +include(":backdrop") include(":liquid-glass") +include(":app") include(":glassmusic")