Coverage Summary for Class: SurferDragHandleKt (com.georgeci.moneysurfer.uikit.components.base)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| SurferDragHandleKt |
100%
(1/1)
|
66.7%
(2/3)
|
55.6%
(10/18)
|
95%
(19/20)
|
87.4%
(235/269)
|
package com.georgeci.moneysurfer.uikit.components.base
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawBehind
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.georgeci.moneysurfer.uikit.preview.SurferComponentPreview
import com.georgeci.moneysurfer.uikit.theme.AppTheme
/**
* Six-dot reorder grip rendered with [drawBehind] so it doesn't pull a vector dependency. Sized
* to the standard 24x40 list-affordance hit target; tint defaults to onSurfaceVariant.
*/
@Composable
fun SurferDragHandle(
modifier: Modifier = Modifier,
color: Color = AppTheme.materialColors.onSurfaceVariant,
) {
Box(
modifier = modifier
.size(width = 24.dp, height = 40.dp)
.drawBehind {
val dotRadius = 1.4.dp.toPx()
val stepX = 6.dp.toPx()
val stepY = 6.dp.toPx()
val originX = size.width / 2f - stepX / 2f
val originY = size.height / 2f - stepY
for (row in 0..2) {
for (col in 0..1) {
drawCircle(
color = color,
radius = dotRadius,
center = Offset(originX + col * stepX, originY + row * stepY),
)
}
}
},
)
}
@Preview
@Composable
private fun SurferDragHandlePreview() {
SurferComponentPreview {
SurferDragHandle()
}
}