@@ -23,7 +23,9 @@ import androidx.compose.runtime.setValue
2323import androidx.compose.ui.Modifier
2424import androidx.compose.ui.draw.clip
2525import androidx.compose.ui.graphics.Color
26+ import androidx.compose.ui.graphics.isSpecified
2627import androidx.compose.ui.graphics.toArgb
28+ import androidx.compose.ui.platform.LocalDensity
2729import androidx.compose.ui.res.stringResource
2830import androidx.compose.ui.text.style.TextAlign
2931import androidx.compose.ui.tooling.preview.Preview
@@ -253,55 +255,8 @@ private fun MarketCapChartContent(
253255 splitFraction = markerFraction + 0.005f ,
254256 )
255257
256- val markerFill = CodeTheme .colors.background
257-
258- val activeMarker = rememberDefaultCartesianMarker(
259- label = rememberTextComponent(
260- color = Color .Transparent ,
261- ),
262- valueFormatter = remember {
263- DefaultCartesianMarker .ValueFormatter .default(colorCode = false )
264- },
265- indicator = {
266- shapeComponent(
267- fill = fill(markerFill),
268- strokeFill = fill(trendColor),
269- strokeThickness = 2 .dp,
270- margins = Insets (4f ),
271- shape = markerCorneredShape(CorneredShape .Corner .Rounded ),
272- shadow = Shadow (
273- radiusDp = 20f ,
274- color = trendColor.copy(0.20f ).toArgb()
275- )
276- )
277- },
278- indicatorSize = CodeTheme .dimens.grid.x4,
279- guideline = null ,
280- )
281-
282- val persistentMarker = rememberDefaultCartesianMarker(
283- label = rememberTextComponent(
284- color = Color .Transparent ,
285- ),
286- valueFormatter = remember {
287- DefaultCartesianMarker .ValueFormatter .default(colorCode = false )
288- },
289- indicator = { color ->
290- shapeComponent(
291- fill = fill(markerFill),
292- strokeFill = fill(color),
293- strokeThickness = 2 .dp,
294- margins = Insets (4f ),
295- shape = markerCorneredShape(CorneredShape .Corner .Rounded ),
296- shadow = Shadow (
297- radiusDp = 20f ,
298- color = trendColor.copy(0.20f ).toArgb()
299- )
300- )
301- },
302- indicatorSize = CodeTheme .dimens.grid.x4,
303- guideline = null ,
304- )
258+ val activeMarker = rememberChartMarker(strokeFill = trendColor)
259+ val persistentMarker = rememberChartMarker()
305260
306261 val chart = rememberCartesianChart(
307262 rememberLineCartesianLayer(
@@ -323,7 +278,11 @@ private fun MarketCapChartContent(
323278 ),
324279 ),
325280 persistentMarkers = remember(isDragging, persistentMarker) {
326- { persistentMarker at 99.0 } // last point in normalized range
281+ if (isDragging) {
282+ { persistentMarker at 99.0 }
283+ } else {
284+ { activeMarker at 99.0 }
285+ }
327286 },
328287 markerVisibilityListener = markerVisibilityListener,
329288 markerController = CartesianMarkerController .rememberShowOnPress(consumeMoveEvents = true ),
@@ -341,6 +300,34 @@ private fun MarketCapChartContent(
341300 )
342301}
343302
303+ @Composable
304+ private fun rememberChartMarker (
305+ strokeFill : Color = Color .Unspecified ,
306+ outerFill : Color = strokeFill.takeIf { it.isSpecified }?.copy(0.20f) ? : Color .Transparent ,
307+ ): CartesianMarker {
308+ val markerFill = CodeTheme .colors.background
309+
310+ return rememberDefaultCartesianMarker(
311+ label = rememberTextComponent(
312+ color = Color .Transparent ,
313+ ),
314+ valueFormatter = remember {
315+ DefaultCartesianMarker .ValueFormatter .default(colorCode = false )
316+ },
317+ indicator = { color ->
318+ outerFillShapeComponent(
319+ outerFill = fill(outerFill),
320+ margins = Insets (6f ),
321+ innerFill = fill(markerFill),
322+ strokeFill = fill(strokeFill.takeIf { it.isSpecified } ? : color),
323+ strokeThickness = 2 .dp,
324+ )
325+ },
326+ indicatorSize = CodeTheme .dimens.grid.x3,
327+ guideline = null ,
328+ )
329+ }
330+
344331@Composable
345332private fun rememberSplitLineFill (
346333 leftColor : Color ,
0 commit comments