Update border API

This commit is contained in:
Kyant0 committed 2025-07-24 09:17:25 +08:00
1 parent 1d305c0b76
commit ea324f6d72
2 files changed
+24 -6

No files matched your search

@@ -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 {
@@ -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())
)
}
}