Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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),
)
)
)
)
Expand Down Expand Up @@ -334,18 +335,18 @@ 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)
},
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,
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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)
Expand All @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Loading