Skip to content

Commit 7835378

Browse files
committed
fix(deps): migrate Vico charting API from 2.x to 3.x
Adapts to Vico 3.0 module restructuring: - Update all vico.core imports to vico.compose package - Replace fill() helper with Fill() constructor - Replace LineStroke.continuous() with LineStroke.Continuous() - Replace ShaderProvider with Compose Brush API - Replace shapeComponent with ShapeComponent constructor - Use Compose Canvas.nativeCanvas for Android Paint drawing - Update Fill.color (now Compose Color) with .toArgb() for Paint - Update Insets property names (startDp→start, topDp→top, etc.) - Update Insets constructors from Float to Dp - Use CircleShape instead of markerCorneredShape - Replace rememberTextComponent color param with style TextStyle - Replace model.extraStore with extraStore (MeasuringContext)
1 parent 219f3cc commit 7835378

6 files changed

Lines changed: 67 additions & 69 deletions

File tree

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/LineSplitShader.kt

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@ package com.flipcash.app.tokens.internal.components.marketcap
33
import android.graphics.Paint
44
import androidx.compose.runtime.Composable
55
import androidx.compose.runtime.remember
6-
import com.patrykandpatrick.vico.core.cartesian.CartesianDrawingContext
7-
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
8-
import com.patrykandpatrick.vico.core.cartesian.layer.LineCartesianLayer
9-
import com.patrykandpatrick.vico.core.common.Fill
10-
import com.patrykandpatrick.vico.core.common.data.ExtraStore
6+
import androidx.compose.ui.graphics.ShaderBrush
7+
import androidx.compose.ui.graphics.nativeCanvas
8+
import androidx.compose.ui.graphics.toArgb
9+
import com.patrykandpatrick.vico.compose.cartesian.CartesianDrawingContext
10+
import com.patrykandpatrick.vico.compose.cartesian.axis.Axis
11+
import com.patrykandpatrick.vico.compose.cartesian.layer.LineCartesianLayer
12+
import com.patrykandpatrick.vico.compose.common.Fill
13+
import com.patrykandpatrick.vico.compose.common.data.ExtraStore
1114

1215
class SplitState {
1316
var canvasX: Float = Float.MAX_VALUE
@@ -35,18 +38,15 @@ class HorizontalSplitLineFill(
3538
verticalAxisPosition: Axis.Position.Vertical?,
3639
) {
3740
with(context) {
38-
val canvasSplitX = splitX(model.extraStore).coerceIn(layerBounds.left, layerBounds.right)
41+
val canvasSplitX = splitX(extraStore).coerceIn(layerBounds.left, layerBounds.right)
42+
val height = layerBounds.bottom + halfLineThickness - (layerBounds.top - halfLineThickness)
3943

4044
// Left portion
41-
paint.color = leftFill.color
42-
paint.shader = leftFill.shaderProvider?.getShader(
43-
this,
44-
layerBounds.left,
45-
layerBounds.top - halfLineThickness,
46-
canvasSplitX,
47-
layerBounds.bottom + halfLineThickness,
45+
paint.color = leftFill.color.toArgb()
46+
paint.shader = (leftFill.brush as? ShaderBrush)?.createShader(
47+
androidx.compose.ui.geometry.Size(canvasSplitX - layerBounds.left, height)
4848
)
49-
canvas.drawRect(
49+
canvas.nativeCanvas.drawRect(
5050
layerBounds.left,
5151
layerBounds.top - halfLineThickness,
5252
canvasSplitX,
@@ -55,15 +55,11 @@ class HorizontalSplitLineFill(
5555
)
5656

5757
// Right portion
58-
paint.color = rightFill.color
59-
paint.shader = rightFill.shaderProvider?.getShader(
60-
this,
61-
canvasSplitX,
62-
layerBounds.top - halfLineThickness,
63-
layerBounds.right,
64-
layerBounds.bottom + halfLineThickness,
58+
paint.color = rightFill.color.toArgb()
59+
paint.shader = (rightFill.brush as? ShaderBrush)?.createShader(
60+
androidx.compose.ui.geometry.Size(layerBounds.right - canvasSplitX, height)
6561
)
66-
canvas.drawRect(
62+
canvas.nativeCanvas.drawRect(
6763
canvasSplitX,
6864
layerBounds.top - halfLineThickness,
6965
layerBounds.right,

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/MarketCapChart.kt

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -44,24 +44,23 @@ import com.getcode.ui.components.charts.LineTrend
4444
import com.getcode.ui.components.charts.TrendType
4545
import com.getcode.ui.components.charts.yValues
4646
import com.getcode.util.vibration.LocalVibrator
47+
import androidx.compose.ui.graphics.Brush
4748
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
48-
import com.patrykandpatrick.vico.compose.cartesian.layer.continuous
49+
import com.patrykandpatrick.vico.compose.cartesian.data.CartesianChartModelProducer
50+
import com.patrykandpatrick.vico.compose.cartesian.data.lineSeries
51+
import com.patrykandpatrick.vico.compose.cartesian.layer.LineCartesianLayer
4952
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLine
5053
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLineCartesianLayer
54+
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker
55+
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerController
56+
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerVisibilityListener
57+
import com.patrykandpatrick.vico.compose.cartesian.marker.DefaultCartesianMarker
5158
import com.patrykandpatrick.vico.compose.cartesian.marker.rememberDefaultCartesianMarker
5259
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
5360
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoScrollState
61+
import com.patrykandpatrick.vico.compose.common.Fill
62+
import com.patrykandpatrick.vico.compose.common.Insets
5463
import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent
55-
import com.patrykandpatrick.vico.compose.common.fill
56-
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
57-
import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
58-
import com.patrykandpatrick.vico.core.cartesian.layer.LineCartesianLayer
59-
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker
60-
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerController
61-
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerVisibilityListener
62-
import com.patrykandpatrick.vico.core.cartesian.marker.DefaultCartesianMarker
63-
import com.patrykandpatrick.vico.core.common.Insets
64-
import com.patrykandpatrick.vico.core.common.shader.ShaderProvider
6564
import kotlinx.coroutines.runBlocking
6665
import kotlin.time.Duration
6766

@@ -274,25 +273,27 @@ private fun MarketCapChartContent(
274273
LineCartesianLayer.rememberLine(
275274
fill = remember(trend) {
276275
LineCartesianLayer.LineFill.double(
277-
leftFill = fill(trendColor),
278-
rightFill = fill(trendPressedColor),
276+
leftFill = Fill(trendColor),
277+
rightFill = Fill(trendPressedColor),
279278
splitX = {
280279
splitState.canvasX - with(density) { indicatorSize.toPx() / 4 }
281280
}
282281
)
283282
},
284283
stroke = remember(trend) {
285-
LineCartesianLayer.LineStroke.continuous(
284+
LineCartesianLayer.LineStroke.Continuous(
286285
thickness = strokeSize,
287286
cap = StrokeCap.Round
288287
)
289288
},
290289
areaFill = remember(trend) {
291290
LineCartesianLayer.AreaFill.single(
292-
fill(
293-
ShaderProvider.verticalGradient(
294-
trendColor.copy(alpha = trendAlpha).toArgb(),
295-
trendColor.copy(alpha = 0f).toArgb(),
291+
Fill(
292+
Brush.verticalGradient(
293+
listOf(
294+
trendColor.copy(alpha = trendAlpha),
295+
trendColor.copy(alpha = 0f),
296+
)
296297
)
297298
)
298299
)
@@ -334,18 +335,18 @@ private fun rememberChartMarker(
334335

335336
return rememberDefaultCartesianMarker(
336337
label = rememberTextComponent(
337-
color = Color.Transparent,
338+
style = androidx.compose.ui.text.TextStyle(color = Color.Transparent),
338339
),
339340
valueFormatter = remember {
340341
DefaultCartesianMarker.ValueFormatter.default(colorCode = false)
341342
},
342343
indicator = remember(strokeFill) {
343344
{ color ->
344345
outerFillShapeComponent(
345-
outerFill = fill(outerFill),
346-
margins = Insets(6f),
347-
innerFill = fill(markerFill),
348-
strokeFill = fill(strokeFill ?: color),
346+
outerFill = Fill(outerFill),
347+
margins = Insets(6.dp),
348+
innerFill = Fill(markerFill),
349+
strokeFill = Fill(strokeFill ?: color),
349350
strokeThickness = 2.dp,
350351
)
351352
}

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/OuterFillShapeComponent.kt

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
package com.flipcash.app.tokens.internal.components.marketcap
22

33
import android.graphics.Paint
4+
import androidx.compose.foundation.shape.CircleShape
5+
import androidx.compose.ui.graphics.Shape
6+
import androidx.compose.ui.graphics.nativeCanvas
7+
import androidx.compose.ui.graphics.toArgb
48
import androidx.compose.ui.unit.Dp
59
import androidx.compose.ui.unit.dp
6-
import com.patrykandpatrick.vico.compose.common.component.shapeComponent
7-
import com.patrykandpatrick.vico.compose.common.shape.markerCorneredShape
8-
import com.patrykandpatrick.vico.core.common.DrawingContext
9-
import com.patrykandpatrick.vico.core.common.Fill
10-
import com.patrykandpatrick.vico.core.common.Insets
11-
import com.patrykandpatrick.vico.core.common.component.Component
12-
import com.patrykandpatrick.vico.core.common.shape.CorneredShape
13-
import com.patrykandpatrick.vico.core.common.shape.Shape
10+
import com.patrykandpatrick.vico.compose.common.DrawingContext
11+
import com.patrykandpatrick.vico.compose.common.Fill
12+
import com.patrykandpatrick.vico.compose.common.Insets
13+
import com.patrykandpatrick.vico.compose.common.component.Component
14+
import com.patrykandpatrick.vico.compose.common.component.ShapeComponent
1415

1516
class OuterFillShapeComponent(
1617
private val outerFill: Fill,
@@ -34,15 +35,15 @@ class OuterFillShapeComponent(
3435
val centerY = (top + bottom) / 2
3536

3637
with(context) {
37-
val outerLeft = left - outerInsets.startDp.pixels
38-
val outerTop = top - outerInsets.topDp.pixels
39-
val outerRight = right + outerInsets.endDp.pixels
40-
val outerBottom = bottom + outerInsets.bottomDp.pixels
38+
val outerLeft = left - outerInsets.start.pixels
39+
val outerTop = top - outerInsets.top.pixels
40+
val outerRight = right + outerInsets.end.pixels
41+
val outerBottom = bottom + outerInsets.bottom.pixels
4142
val outerRadius = minOf(outerRight - outerLeft, outerBottom - outerTop) / 2
4243

4344
// Draw outer fill
44-
outerPaint.color = outerFill.color
45-
canvas.drawCircle(centerX, centerY, outerRadius, outerPaint)
45+
outerPaint.color = outerFill.color.toArgb()
46+
canvas.nativeCanvas.drawCircle(centerX, centerY, outerRadius, outerPaint)
4647

4748
// Draw inner component
4849
inner.draw(context, left, top, right, bottom)
@@ -52,13 +53,13 @@ class OuterFillShapeComponent(
5253

5354
fun outerFillShapeComponent(
5455
outerFill: Fill,
55-
margins: Insets = Insets(4f),
56+
margins: Insets = Insets(4.dp),
5657
innerFill: Fill,
5758
strokeFill: Fill,
58-
shape: Shape = markerCorneredShape(CorneredShape.Corner.Rounded),
59+
shape: Shape = CircleShape,
5960
strokeThickness: Dp = 2.dp,
6061
): Component {
61-
val inner = shapeComponent(
62+
val inner = ShapeComponent(
6263
fill = innerFill,
6364
shape = shape,
6465
strokeFill = strokeFill,

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnLongPress.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package com.flipcash.app.tokens.internal.components.marketcap
22

33
import androidx.compose.runtime.Composable
44
import androidx.compose.runtime.remember
5-
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker
6-
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerController
7-
import com.patrykandpatrick.vico.core.cartesian.marker.Interaction
5+
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker
6+
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerController
7+
import com.patrykandpatrick.vico.compose.cartesian.marker.Interaction
88

99
private class ShowOnLongPress : CartesianMarkerController {
1010

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnShortLongPress.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package com.flipcash.app.tokens.internal.components.marketcap
22

33
import androidx.compose.runtime.Composable
44
import androidx.compose.runtime.remember
5-
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker
6-
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerController
7-
import com.patrykandpatrick.vico.core.cartesian.marker.Interaction
5+
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker
6+
import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerController
7+
import com.patrykandpatrick.vico.compose.cartesian.marker.Interaction
88

99

1010
private class ShowOnShortLongPress(

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ rinku = "1.6.0"
9292
haze = "1.7.2"
9393
cloudy = "0.5.0"
9494
phantom-connect-kmp = "2.0.2-1.0.0"
95-
vico = "2.4.1"
95+
vico = "3.0.2"
9696

9797
androidxTestRules = "1.7.0"
9898
archCore = "2.2.0"

0 commit comments

Comments
 (0)