diff --git a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/LineSplitShader.kt b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/LineSplitShader.kt index 3303c4754..70b48b3d8 100644 --- a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/LineSplitShader.kt +++ b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/LineSplitShader.kt @@ -3,11 +3,14 @@ package com.flipcash.app.tokens.internal.components.marketcap import android.graphics.Paint import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.patrykandpatrick.vico.core.cartesian.CartesianDrawingContext -import com.patrykandpatrick.vico.core.cartesian.axis.Axis -import com.patrykandpatrick.vico.core.cartesian.layer.LineCartesianLayer -import com.patrykandpatrick.vico.core.common.Fill -import com.patrykandpatrick.vico.core.common.data.ExtraStore +import androidx.compose.ui.graphics.ShaderBrush +import androidx.compose.ui.graphics.nativeCanvas +import androidx.compose.ui.graphics.toArgb +import com.patrykandpatrick.vico.compose.cartesian.CartesianDrawingContext +import com.patrykandpatrick.vico.compose.cartesian.axis.Axis +import com.patrykandpatrick.vico.compose.cartesian.layer.LineCartesianLayer +import com.patrykandpatrick.vico.compose.common.Fill +import com.patrykandpatrick.vico.compose.common.data.ExtraStore class SplitState { var canvasX: Float = Float.MAX_VALUE @@ -35,18 +38,15 @@ class HorizontalSplitLineFill( verticalAxisPosition: Axis.Position.Vertical?, ) { with(context) { - val canvasSplitX = splitX(model.extraStore).coerceIn(layerBounds.left, layerBounds.right) + val canvasSplitX = splitX(extraStore).coerceIn(layerBounds.left, layerBounds.right) + val height = layerBounds.bottom + halfLineThickness - (layerBounds.top - halfLineThickness) // Left portion - paint.color = leftFill.color - paint.shader = leftFill.shaderProvider?.getShader( - this, - layerBounds.left, - layerBounds.top - halfLineThickness, - canvasSplitX, - layerBounds.bottom + halfLineThickness, + paint.color = leftFill.color.toArgb() + paint.shader = (leftFill.brush as? ShaderBrush)?.createShader( + androidx.compose.ui.geometry.Size(canvasSplitX - layerBounds.left, height) ) - canvas.drawRect( + canvas.nativeCanvas.drawRect( layerBounds.left, layerBounds.top - halfLineThickness, canvasSplitX, @@ -55,15 +55,11 @@ class HorizontalSplitLineFill( ) // Right portion - paint.color = rightFill.color - paint.shader = rightFill.shaderProvider?.getShader( - this, - canvasSplitX, - layerBounds.top - halfLineThickness, - layerBounds.right, - layerBounds.bottom + halfLineThickness, + paint.color = rightFill.color.toArgb() + paint.shader = (rightFill.brush as? ShaderBrush)?.createShader( + androidx.compose.ui.geometry.Size(layerBounds.right - canvasSplitX, height) ) - canvas.drawRect( + canvas.nativeCanvas.drawRect( canvasSplitX, layerBounds.top - halfLineThickness, layerBounds.right, diff --git a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/MarketCapChart.kt b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/MarketCapChart.kt index 481506d87..858ea84d9 100644 --- a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/MarketCapChart.kt +++ b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/MarketCapChart.kt @@ -44,24 +44,23 @@ import com.getcode.ui.components.charts.LineTrend import com.getcode.ui.components.charts.TrendType import com.getcode.ui.components.charts.yValues import com.getcode.util.vibration.LocalVibrator +import androidx.compose.ui.graphics.Brush import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost -import com.patrykandpatrick.vico.compose.cartesian.layer.continuous +import com.patrykandpatrick.vico.compose.cartesian.data.CartesianChartModelProducer +import com.patrykandpatrick.vico.compose.cartesian.data.lineSeries +import com.patrykandpatrick.vico.compose.cartesian.layer.LineCartesianLayer import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLine import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLineCartesianLayer +import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker +import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerController +import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerVisibilityListener +import com.patrykandpatrick.vico.compose.cartesian.marker.DefaultCartesianMarker import com.patrykandpatrick.vico.compose.cartesian.marker.rememberDefaultCartesianMarker import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart import com.patrykandpatrick.vico.compose.cartesian.rememberVicoScrollState +import com.patrykandpatrick.vico.compose.common.Fill +import com.patrykandpatrick.vico.compose.common.Insets import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent -import com.patrykandpatrick.vico.compose.common.fill -import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer -import com.patrykandpatrick.vico.core.cartesian.data.lineSeries -import com.patrykandpatrick.vico.core.cartesian.layer.LineCartesianLayer -import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker -import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerController -import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerVisibilityListener -import com.patrykandpatrick.vico.core.cartesian.marker.DefaultCartesianMarker -import com.patrykandpatrick.vico.core.common.Insets -import com.patrykandpatrick.vico.core.common.shader.ShaderProvider import kotlinx.coroutines.runBlocking import kotlin.time.Duration @@ -274,25 +273,27 @@ private fun MarketCapChartContent( LineCartesianLayer.rememberLine( fill = remember(trend) { LineCartesianLayer.LineFill.double( - leftFill = fill(trendColor), - rightFill = fill(trendPressedColor), + leftFill = Fill(trendColor), + rightFill = Fill(trendPressedColor), splitX = { splitState.canvasX - with(density) { indicatorSize.toPx() / 4 } } ) }, stroke = remember(trend) { - LineCartesianLayer.LineStroke.continuous( + LineCartesianLayer.LineStroke.Continuous( thickness = strokeSize, cap = StrokeCap.Round ) }, areaFill = remember(trend) { LineCartesianLayer.AreaFill.single( - fill( - ShaderProvider.verticalGradient( - trendColor.copy(alpha = trendAlpha).toArgb(), - trendColor.copy(alpha = 0f).toArgb(), + Fill( + Brush.verticalGradient( + listOf( + trendColor.copy(alpha = trendAlpha), + trendColor.copy(alpha = 0f), + ) ) ) ) @@ -334,7 +335,7 @@ private fun rememberChartMarker( return rememberDefaultCartesianMarker( label = rememberTextComponent( - color = Color.Transparent, + style = androidx.compose.ui.text.TextStyle(color = Color.Transparent), ), valueFormatter = remember { DefaultCartesianMarker.ValueFormatter.default(colorCode = false) @@ -342,10 +343,10 @@ private fun rememberChartMarker( indicator = remember(strokeFill) { { color -> outerFillShapeComponent( - outerFill = fill(outerFill), - margins = Insets(6f), - innerFill = fill(markerFill), - strokeFill = fill(strokeFill ?: color), + outerFill = Fill(outerFill), + margins = Insets(6.dp), + innerFill = Fill(markerFill), + strokeFill = Fill(strokeFill ?: color), strokeThickness = 2.dp, ) } diff --git a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/OuterFillShapeComponent.kt b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/OuterFillShapeComponent.kt index 69b49078c..5397675ef 100644 --- a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/OuterFillShapeComponent.kt +++ b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/OuterFillShapeComponent.kt @@ -1,16 +1,17 @@ package com.flipcash.app.tokens.internal.components.marketcap import android.graphics.Paint +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.nativeCanvas +import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp -import com.patrykandpatrick.vico.compose.common.component.shapeComponent -import com.patrykandpatrick.vico.compose.common.shape.markerCorneredShape -import com.patrykandpatrick.vico.core.common.DrawingContext -import com.patrykandpatrick.vico.core.common.Fill -import com.patrykandpatrick.vico.core.common.Insets -import com.patrykandpatrick.vico.core.common.component.Component -import com.patrykandpatrick.vico.core.common.shape.CorneredShape -import com.patrykandpatrick.vico.core.common.shape.Shape +import com.patrykandpatrick.vico.compose.common.DrawingContext +import com.patrykandpatrick.vico.compose.common.Fill +import com.patrykandpatrick.vico.compose.common.Insets +import com.patrykandpatrick.vico.compose.common.component.Component +import com.patrykandpatrick.vico.compose.common.component.ShapeComponent class OuterFillShapeComponent( private val outerFill: Fill, @@ -34,15 +35,15 @@ class OuterFillShapeComponent( val centerY = (top + bottom) / 2 with(context) { - val outerLeft = left - outerInsets.startDp.pixels - val outerTop = top - outerInsets.topDp.pixels - val outerRight = right + outerInsets.endDp.pixels - val outerBottom = bottom + outerInsets.bottomDp.pixels + val outerLeft = left - outerInsets.start.pixels + val outerTop = top - outerInsets.top.pixels + val outerRight = right + outerInsets.end.pixels + val outerBottom = bottom + outerInsets.bottom.pixels val outerRadius = minOf(outerRight - outerLeft, outerBottom - outerTop) / 2 // Draw outer fill - outerPaint.color = outerFill.color - canvas.drawCircle(centerX, centerY, outerRadius, outerPaint) + outerPaint.color = outerFill.color.toArgb() + canvas.nativeCanvas.drawCircle(centerX, centerY, outerRadius, outerPaint) // Draw inner component inner.draw(context, left, top, right, bottom) @@ -52,13 +53,13 @@ class OuterFillShapeComponent( fun outerFillShapeComponent( outerFill: Fill, - margins: Insets = Insets(4f), + margins: Insets = Insets(4.dp), innerFill: Fill, strokeFill: Fill, - shape: Shape = markerCorneredShape(CorneredShape.Corner.Rounded), + shape: Shape = CircleShape, strokeThickness: Dp = 2.dp, ): Component { - val inner = shapeComponent( + val inner = ShapeComponent( fill = innerFill, shape = shape, strokeFill = strokeFill, diff --git a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnLongPress.kt b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnLongPress.kt index 36069cd15..27f508269 100644 --- a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnLongPress.kt +++ b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnLongPress.kt @@ -2,9 +2,9 @@ package com.flipcash.app.tokens.internal.components.marketcap import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker -import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerController -import com.patrykandpatrick.vico.core.cartesian.marker.Interaction +import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker +import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerController +import com.patrykandpatrick.vico.compose.cartesian.marker.Interaction private class ShowOnLongPress : CartesianMarkerController { diff --git a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnShortLongPress.kt b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnShortLongPress.kt index e4cc74124..ec84edfeb 100644 --- a/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnShortLongPress.kt +++ b/apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/components/marketcap/ShowOnShortLongPress.kt @@ -2,9 +2,9 @@ package com.flipcash.app.tokens.internal.components.marketcap import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker -import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarkerController -import com.patrykandpatrick.vico.core.cartesian.marker.Interaction +import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarker +import com.patrykandpatrick.vico.compose.cartesian.marker.CartesianMarkerController +import com.patrykandpatrick.vico.compose.cartesian.marker.Interaction private class ShowOnShortLongPress(