Update border API
This commit is contained in:
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())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user