diff --git a/liquid-glass/src/main/java/com/kyant/liquidglass/GlassBorder.kt b/liquid-glass/src/main/java/com/kyant/liquidglass/GlassBorder.kt index a996d4c..632ff6a 100644 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/GlassBorder.kt +++ b/liquid-glass/src/main/java/com/kyant/liquidglass/GlassBorder.kt @@ -4,29 +4,46 @@ import android.graphics.RenderEffect import android.graphics.RuntimeShader import android.graphics.Shader import android.os.Build +import androidx.annotation.FloatRange import androidx.compose.runtime.Immutable import androidx.compose.runtime.Stable import androidx.compose.ui.geometry.Size import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import kotlin.math.PI @Immutable sealed interface GlassBorder { + val width: Dp + + @get:FloatRange(from = 0.0, to = 1.0) + val intensity: Float + @Stable fun createRenderEffect(density: Density, size: Size, cornerRadius: Float): RenderEffect? { return null } @Immutable - data object None : GlassBorder + data object None : GlassBorder { + + override val width: Dp = Dp.Unspecified + + override val intensity: Float = 0f + } @Immutable - data object Solid : GlassBorder + data class Solid( + override val width: Dp = 2.dp, + @param:FloatRange(from = 0.0, to = 1.0) override val intensity: Float = 0.4f + ) : GlassBorder @Immutable data class Highlight( + override val width: Dp = 2.dp, + @param:FloatRange(from = 0.0, to = 1.0) override val intensity: Float = 0.4f, val angle: Float = 45f, val decay: Float = 1f ) : GlassBorder { 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 d353fc0..346cc99 100644 --- a/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassModifier.kt +++ b/liquid-glass/src/main/java/com/kyant/liquidglass/LiquidGlassModifier.kt @@ -35,7 +35,7 @@ import androidx.compose.ui.node.invalidateLayer import androidx.compose.ui.node.requireGraphicsContext import androidx.compose.ui.platform.InspectorInfo import androidx.compose.ui.unit.Constraints -import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.isSpecified fun Modifier.liquidGlass( state: LiquidGlassProviderState, @@ -239,7 +239,8 @@ internal class LiquidGlassModifierNode( graphicsLayer?.renderEffect = renderEffect.asComposeRenderEffect() - if (style.border != GlassBorder.None) { + val borderWidth = style.border.width + if (style.border.width.isSpecified) { borderGraphicsLayer?.let { layer -> val borderOutline = style.shape.createOutline(size, layoutDirection, this) val borderRenderEffect = style.border.createRenderEffect(this, size, cornerRadiusPx) @@ -249,8 +250,8 @@ internal class LiquidGlassModifierNode( layer.record { drawOutline( outline = borderOutline, - brush = SolidColor(Color.White.copy(alpha = 0.4f)), - style = Stroke(2.dp.toPx()) + brush = SolidColor(Color.White.copy(alpha = style.border.intensity)), + style = Stroke(borderWidth.toPx()) ) } }