1717 */
1818package com.health.openscale.ui.screen.components
1919
20- import android.text.Layout
20+ import androidx.compose.foundation.shape.RoundedCornerShape
2121import androidx.compose.material3.MaterialTheme
2222import androidx.compose.runtime.Composable
2323import androidx.compose.runtime.LaunchedEffect
2424import androidx.compose.runtime.mutableStateOf
2525import androidx.compose.runtime.remember
2626import androidx.compose.ui.graphics.Color
27- import androidx.compose.ui.graphics.toArgb
27+ import androidx.compose.ui.text.TextStyle
28+ import androidx.compose.ui.text.style.TextAlign
2829import androidx.compose.ui.unit.dp
2930import com.health.openscale.core.data.MeasurementType
3031import com.health.openscale.core.data.UnitType
3132import com.health.openscale.core.data.UserGoals
3233import com.health.openscale.core.utils.LocaleUtils
3334import com.health.openscale.ui.theme.White
35+ import com.patrykandpatrick.vico.compose.cartesian.axis.Axis
3436import com.patrykandpatrick.vico.compose.cartesian.axis.rememberAxisGuidelineComponent
35- import com.patrykandpatrick.vico.compose.cartesian.layer.dashed
36- import com.patrykandpatrick.vico.compose.cartesian.layer.point
37+ import com.patrykandpatrick.vico.compose.cartesian.data.CartesianChartModelProducer
38+ import com.patrykandpatrick.vico.compose.cartesian.data.CartesianLayerRangeProvider
39+ import com.patrykandpatrick.vico.compose.cartesian.data.CartesianValueFormatter
40+ import com.patrykandpatrick.vico.compose.cartesian.data.lineSeries
41+ import com.patrykandpatrick.vico.compose.cartesian.decoration.HorizontalLine
42+ import com.patrykandpatrick.vico.compose.cartesian.layer.LineCartesianLayer
3743import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLineCartesianLayer
44+ import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker
45+ import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerVisibilityListener
46+ import com.patrykandpatrick.vico.compose.cartesian.marker.DefaultCartesianMarker
3847import com.patrykandpatrick.vico.compose.cartesian.marker.rememberDefaultCartesianMarker
39- import com.patrykandpatrick.vico.compose.common.component.fixed
48+ import com.patrykandpatrick.vico.compose.common.Fill
49+ import com.patrykandpatrick.vico.compose.common.Insets
50+ import com.patrykandpatrick.vico.compose.common.LayeredComponent
51+ import com.patrykandpatrick.vico.compose.common.component.ShapeComponent
52+ import com.patrykandpatrick.vico.compose.common.component.TextComponent
4053import com.patrykandpatrick.vico.compose.common.component.rememberLineComponent
4154import com.patrykandpatrick.vico.compose.common.component.rememberShapeComponent
4255import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent
43- import com.patrykandpatrick.vico.compose.common.component.shapeComponent
44- import com.patrykandpatrick.vico.compose.common.fill
45- import com.patrykandpatrick.vico.compose.common.insets
46- import com.patrykandpatrick.vico.compose.common.shape.markerCorneredShape
47- import com.patrykandpatrick.vico.compose.common.shape.rounded
48- import com.patrykandpatrick.vico.core.cartesian.axis.Axis
49- import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
50- import com.patrykandpatrick.vico.core.cartesian.data.CartesianLayerRangeProvider
51- import com.patrykandpatrick.vico.core.cartesian.data.CartesianValueFormatter
52- import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
53- import com.patrykandpatrick.vico.core.cartesian.decoration.HorizontalLine
54- import com.patrykandpatrick.vico.core.cartesian.layer.LineCartesianLayer
55- import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker
56- import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerVisibilityListener
57- import com.patrykandpatrick.vico.core.cartesian.marker.DefaultCartesianMarker
58- import com.patrykandpatrick.vico.core.common.Fill
59- import com.patrykandpatrick.vico.core.common.LayeredComponent
60- import com.patrykandpatrick.vico.core.common.component.ShapeComponent
61- import com.patrykandpatrick.vico.core.common.component.TextComponent
62- import com.patrykandpatrick.vico.core.common.data.ExtraStore
63- import com.patrykandpatrick.vico.core.common.shape.CorneredShape
56+ import com.patrykandpatrick.vico.compose.common.data.ExtraStore
6457import java.time.LocalDate
6558import java.time.ZoneId
6659import java.time.format.DateTimeFormatter
@@ -247,22 +240,22 @@ internal fun createLineSpec(
247240 isPointConnected : Boolean = true,
248241): LineCartesianLayer .Line {
249242 val lineStroke = when {
250- ! isPointConnected -> LineCartesianLayer .LineStroke .dashed (dashLength = 0 .dp)
251- isProjection -> LineCartesianLayer .LineStroke .dashed (thickness = 2 .dp, dashLength = 4 .dp, gapLength = 4 .dp)
252- else -> LineCartesianLayer .LineStroke .Continuous (thicknessDp = 2f )
243+ ! isPointConnected -> LineCartesianLayer .LineStroke .Dashed (dashLength = 0 .dp)
244+ isProjection -> LineCartesianLayer .LineStroke .Dashed (thickness = 2 .dp, dashLength = 4 .dp, gapLength = 4 .dp)
245+ else -> LineCartesianLayer .LineStroke .Continuous (thickness = 2 .dp )
253246 }
254247
255248 val lineFill = LineCartesianLayer .LineFill .single(
256- fill = if (isPointConnected) Fill (color.toArgb()) else Fill (color.copy(alpha = 0.5f ).toArgb( ))
249+ fill = if (isPointConnected) Fill (color) else Fill (color.copy(alpha = 0.5f ))
257250 )
258251
259252 return LineCartesianLayer .Line (
260253 fill = lineFill,
261254 stroke = lineStroke,
262- areaFill = if (statisticsMode && ! isProjection) LineCartesianLayer .AreaFill .single(Fill (color.copy(alpha = 0.2f ).toArgb() )) else null ,
255+ areaFill = if (statisticsMode && ! isProjection) LineCartesianLayer .AreaFill .single(Fill (color.copy(alpha = 0.2f ))) else null ,
263256 pointProvider = if (showPoints && ! statisticsMode && ! isProjection) {
264257 LineCartesianLayer .PointProvider .single(
265- LineCartesianLayer .point (ShapeComponent (fill (color.copy(alpha = 0.7f )), CorneredShape . Pill ), 6 .dp)
258+ LineCartesianLayer .Point (ShapeComponent (Fill (color.copy(alpha = 0.7f )),shape = RoundedCornerShape ( 50 )), size = 6 .dp)
266259 )
267260 } else null ,
268261 pointConnector = LineCartesianLayer .PointConnector .cubic()
@@ -278,21 +271,26 @@ internal fun createLineSpec(
278271@Composable
279272internal fun rememberGoalLine (goal : UserGoals , type : MeasurementType ? ): HorizontalLine {
280273 val goalColor = type?.let { Color (it.color) } ? : MaterialTheme .colorScheme.onSurface
281- val goalFill = fill (goalColor.copy(alpha = 0.7f ))
274+ val goalFill = Fill (goalColor.copy(alpha = 0.7f ))
282275 val line = rememberLineComponent(fill = goalFill, thickness = 2 .dp)
283276 val labelComponent = rememberTextComponent(
284- color = White ,
285- margins = insets (start = 6 .dp),
286- padding = insets (start = 8 .dp, end = 8 .dp, bottom = 2 .dp, top = 2 .dp),
287- background = shapeComponent (goalFill, CorneredShape .rounded(topLeft = 4 .dp, topRight = 4 .dp, bottomLeft = 4 .dp, bottomRight = 4 .dp )),
277+ style = TextStyle ( color = White ) ,
278+ margins = Insets (start = 6 .dp),
279+ padding = Insets (start = 8 .dp, end = 8 .dp, bottom = 2 .dp, top = 2 .dp),
280+ background = ShapeComponent (goalFill, shape = RoundedCornerShape ( 50 )),
288281 )
289282
290283 return remember(goal, line) {
291284 HorizontalLine (
292285 y = { goal.goalValue.toDouble() },
293286 line = line,
294287 labelComponent = labelComponent,
295- label = { LocaleUtils .formatValueForDisplay(goal.goalValue.toString(), type?.unit ? : UnitType .NONE ) },
288+ label = {
289+ LocaleUtils .formatValueForDisplay(
290+ goal.goalValue.toString(),
291+ type?.unit ? : UnitType .NONE
292+ )
293+ },
296294 verticalAxisPosition = if (type?.isOnRightYAxis == true ) Axis .Position .Vertical .End else Axis .Position .Vertical .Start
297295 )
298296 }
@@ -309,21 +307,19 @@ fun rememberMarker(
309307 valueFormatter : DefaultCartesianMarker .ValueFormatter = DefaultCartesianMarker .ValueFormatter .default(),
310308 showIndicator : Boolean = true,
311309): CartesianMarker {
312- val labelBackgroundShape = markerCorneredShape(CorneredShape .Corner .Rounded )
313310 val labelBackground = rememberShapeComponent(
314- fill = fill (MaterialTheme .colorScheme.background),
315- shape = labelBackgroundShape ,
311+ fill = Fill (MaterialTheme .colorScheme.background),
312+ shape = RoundedCornerShape ( 50 ) ,
316313 strokeThickness = 1 .dp,
317- strokeFill = fill (MaterialTheme .colorScheme.outline),
314+ strokeFill = Fill (MaterialTheme .colorScheme.outline),
318315 )
319316 val label = rememberTextComponent(
320- color = MaterialTheme .colorScheme.onSurface,
321- textAlignment = Layout .Alignment .ALIGN_CENTER ,
322- padding = insets(horizontal = 8 .dp, vertical = 4 .dp),
317+ style = TextStyle (color = MaterialTheme .colorScheme.onSurface, textAlign = TextAlign .Center ),
318+ padding = Insets (horizontal = 8 .dp, vertical = 4 .dp),
323319 background = labelBackground,
324320 minWidth = TextComponent .MinWidth .fixed(40 .dp),
325321 )
326- val indicatorFrontComponent = rememberShapeComponent(fill (MaterialTheme .colorScheme.surface), CorneredShape . Pill )
322+ val indicatorFrontComponent = rememberShapeComponent(Fill (MaterialTheme .colorScheme.surface), shape = RoundedCornerShape ( 50 ) )
327323 val guideline = rememberAxisGuidelineComponent()
328324
329325 return rememberDefaultCartesianMarker(
@@ -332,13 +328,13 @@ fun rememberMarker(
332328 indicator = if (showIndicator) {
333329 { color ->
334330 LayeredComponent (
335- back = ShapeComponent (fill (color.copy(alpha = 0.15f )), CorneredShape . Pill ),
331+ back = ShapeComponent (Fill (color.copy(alpha = 0.15f )), shape = RoundedCornerShape ( 50 ) ),
336332 front = LayeredComponent (
337- back = ShapeComponent (fill = fill (color), shape = CorneredShape . Pill ),
333+ back = ShapeComponent (fill = Fill (color), shape = RoundedCornerShape ( 50 ) ),
338334 front = indicatorFrontComponent,
339- padding = insets (5 .dp),
335+ padding = Insets (5 .dp),
340336 ),
341- padding = insets (10 .dp),
337+ padding = Insets (10 .dp),
342338 )
343339 }
344340 } else null ,
0 commit comments