@@ -9,6 +9,7 @@ import androidx.compose.foundation.background
9
9
import androidx.compose.foundation.interaction.MutableInteractionSource
10
10
import androidx.compose.foundation.interaction.collectIsFocusedAsState
11
11
import androidx.compose.foundation.layout.fillMaxWidth
12
+ import androidx.compose.foundation.shape.CornerSize
12
13
import androidx.compose.foundation.text.BasicTextField
13
14
import androidx.compose.foundation.text.KeyboardActions
14
15
import androidx.compose.foundation.text.KeyboardOptions
@@ -45,6 +46,8 @@ import kiwi.orbit.compose.ui.controls.internal.OrbitPreviews
45
46
import kiwi.orbit.compose.ui.controls.internal.Preview
46
47
import kiwi.orbit.compose.ui.foundation.LocalTextStyle
47
48
import kiwi.orbit.compose.ui.foundation.ProvideMergedTextStyle
49
+ import kiwi.orbit.compose.ui.utils.ExpandedCornerSize
50
+ import kiwi.orbit.compose.ui.utils.drawStrokeOutlineRoundRect
48
51
49
52
/* *
50
53
* TextFiled control allowing a text single-line or multi-line input.
@@ -212,6 +215,7 @@ private fun TextFiledDecorationBox(
212
215
modifier = Modifier
213
216
.background(OrbitTheme .colors.surface.normal, OrbitTheme .shapes.normal)
214
217
.borderWithGlow(
218
+ cornerSize = OrbitTheme .shapes.normal.topStart,
215
219
provideBorderColor = { borderColor },
216
220
provideGlowColor = { borderColor.copy(borderColor.alpha * GlowOpacity ) },
217
221
provideGlowWidth = { glowWidth },
@@ -276,6 +280,7 @@ private fun Transition<InputState>.animateGlowWidth(): State<Dp> =
276
280
}
277
281
278
282
private fun Modifier.borderWithGlow (
283
+ cornerSize : CornerSize ,
279
284
provideBorderColor : () -> Color ,
280
285
provideGlowColor : () -> Color ,
281
286
provideGlowWidth : () -> Dp ,
@@ -284,23 +289,23 @@ private fun Modifier.borderWithGlow(
284
289
val glowColor = provideGlowColor()
285
290
val glowWidth = provideGlowWidth()
286
291
287
- val cornerSizePx = CornerSize .toPx()
288
292
val borderWidthPx = BorderWidth .toPx()
289
293
val glowWidthPx = glowWidth.toPx()
290
294
291
- val glowTopLeft = Offset (- glowWidthPx / 2f , - glowWidthPx / 2f )
292
- val glowSize = Size (size.width + glowWidthPx, size.height + glowWidthPx)
293
- val glowCornerRadius = CornerRadius (cornerSizePx + glowWidthPx / 2f )
294
- val glowStyle = Stroke (glowWidthPx)
295
+ val glowCornerSize = ExpandedCornerSize (cornerSize, extraSize = glowWidth)
296
+ val glowCornerRadius = CornerRadius (glowCornerSize.toPx(size, density = this ))
297
+ val glowTopLeft = Offset (- glowWidthPx, - glowWidthPx)
298
+ val glowSize = Size (size.width + glowWidthPx * 2 , size.height + glowWidthPx * 2 )
299
+ val glowStroke = Stroke (glowWidthPx)
295
300
296
- val borderTopLeft = Offset (borderWidthPx / 2f , borderWidthPx / 2f )
297
- val borderSize = Size (size.width - borderWidthPx, size.height - borderWidthPx)
298
- val borderCornerRadius = CornerRadius (cornerSizePx - borderWidthPx / 2f )
299
- val borderStyle = Stroke (borderWidthPx)
301
+ val borderRadius = CornerRadius (cornerSize.toPx(size, density = this ) )
302
+ val borderTopLeft = Offset . Zero
303
+ val borderSize = size
304
+ val borderStroke = Stroke (borderWidthPx)
300
305
301
306
onDrawBehind {
302
- drawRoundRect (glowColor, glowTopLeft, glowSize, glowCornerRadius, glowStyle )
303
- drawRoundRect (borderColor, borderTopLeft, borderSize, borderCornerRadius, borderStyle )
307
+ drawStrokeOutlineRoundRect (glowColor, glowTopLeft, glowSize, glowCornerRadius, glowStroke )
308
+ drawStrokeOutlineRoundRect (borderColor, borderTopLeft, borderSize, borderRadius, borderStroke )
304
309
}
305
310
}
306
311
@@ -313,7 +318,6 @@ private enum class InputState {
313
318
314
319
private val BorderWidth = 2 .dp
315
320
private val GlowWidth = 2 .dp
316
- private val CornerSize = 6 .dp
317
321
318
322
private const val GlowOpacity = 0.1f
319
323
private const val AnimationDuration = 150
0 commit comments