Bet Creation Screen : Tooltip and bug correction
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
parent
38620fcf49
commit
e8fef8a9e5
@ -0,0 +1,129 @@
|
|||||||
|
package fr.iut.alldev.allin.ui.core
|
||||||
|
|
||||||
|
import androidx.compose.foundation.BorderStroke
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.material3.*
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.geometry.Size
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.graphics.Outline
|
||||||
|
import androidx.compose.ui.graphics.Path
|
||||||
|
import androidx.compose.ui.graphics.Shape
|
||||||
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.compose.ui.unit.*
|
||||||
|
import fr.iut.alldev.allin.ui.theme.AllInTheme
|
||||||
|
import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
fun AllInTooltip(
|
||||||
|
text: String,
|
||||||
|
state: TooltipState = rememberTooltipState(),
|
||||||
|
content: @Composable () -> Unit,
|
||||||
|
) {
|
||||||
|
|
||||||
|
TooltipBox(
|
||||||
|
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
|
||||||
|
tooltip = {
|
||||||
|
AllInPlainTooltip{
|
||||||
|
Text(
|
||||||
|
text = text,
|
||||||
|
color = AllInTheme.colors.allIn_LightGrey200,
|
||||||
|
style = AllInTheme.typography.r,
|
||||||
|
fontSize = 10.sp
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
state = state
|
||||||
|
) {
|
||||||
|
content()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal val TooltipMinHeight = 24.dp
|
||||||
|
internal val TooltipMinWidth = 40.dp
|
||||||
|
private val AllInPlainTooltipMaxWidth = 188.dp
|
||||||
|
private val AllInPlainTooltipTopPadding = 3.dp
|
||||||
|
private val AllInPlainTooltipBottomPadding = 11.dp
|
||||||
|
private val AllInPlainTooltipHorizontalPadding = 8.dp
|
||||||
|
private val AllInPlainTooltipArrowSize = 9.dp
|
||||||
|
private val AllInPlainTooltipContentPadding =
|
||||||
|
PaddingValues(
|
||||||
|
top = AllInPlainTooltipTopPadding,
|
||||||
|
bottom = AllInPlainTooltipBottomPadding,
|
||||||
|
start = AllInPlainTooltipHorizontalPadding,
|
||||||
|
end = AllInPlainTooltipHorizontalPadding
|
||||||
|
)
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun AllInPlainTooltip(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
containerColor: Color = AllInTheme.colors.allIn_Dark,
|
||||||
|
borderWidth: Dp = 1.dp,
|
||||||
|
borderColor: Color = AllInTheme.colors.allIn_DarkGrey100,
|
||||||
|
shape: Shape = AbsoluteSmoothCornerShape(10.dp, 100),
|
||||||
|
content: @Composable () -> Unit
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
){
|
||||||
|
Surface(
|
||||||
|
shape = shape,
|
||||||
|
border = BorderStroke(borderWidth, borderColor),
|
||||||
|
color = containerColor
|
||||||
|
) {
|
||||||
|
Box(
|
||||||
|
modifier = modifier
|
||||||
|
.sizeIn(
|
||||||
|
minWidth = TooltipMinWidth,
|
||||||
|
maxWidth = AllInPlainTooltipMaxWidth,
|
||||||
|
minHeight = TooltipMinHeight
|
||||||
|
)
|
||||||
|
.padding(AllInPlainTooltipContentPadding)
|
||||||
|
) {
|
||||||
|
content()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Surface(
|
||||||
|
shape = AllInArrowShape(),
|
||||||
|
border = BorderStroke(borderWidth, borderColor),
|
||||||
|
color = containerColor,
|
||||||
|
modifier = Modifier
|
||||||
|
.size(AllInPlainTooltipArrowSize)
|
||||||
|
.offset(y = -borderWidth)
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AllInArrowShape : Shape {
|
||||||
|
override fun createOutline(
|
||||||
|
size: Size,
|
||||||
|
layoutDirection: LayoutDirection,
|
||||||
|
density: Density,
|
||||||
|
) =
|
||||||
|
Outline.Generic(
|
||||||
|
Path().apply {
|
||||||
|
lineTo(size.width /2 , size.height)
|
||||||
|
lineTo(size.width , 0f)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
private fun AllInTooltipPreview() {
|
||||||
|
AllInTheme {
|
||||||
|
AllInPlainTooltip(content = {
|
||||||
|
Text(
|
||||||
|
text = "Généralement une question qui sera répondu par les utilisateurs.",
|
||||||
|
color = AllInTheme.colors.allIn_LightGrey200,
|
||||||
|
style = AllInTheme.typography.r,
|
||||||
|
fontSize = 10.sp
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue