Skip to content

Commit

Permalink
Make updates related to CartesianLayer padding, `HorizontalAxis.Ite…
Browse files Browse the repository at this point in the history
…mPlacer`, and more

Co-authored-by: Patryk Goworowski <patrykgoworowski@gmail.com>
  • Loading branch information
patrickmichalik and Gowsky committed Sep 15, 2024
1 parent ea32a91 commit e4a8cb6
Show file tree
Hide file tree
Showing 108 changed files with 1,232 additions and 1,782 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ package com.patrykandpatrick.vico.sample.previews.composables.column

import androidx.compose.runtime.Composable
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottomAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStartAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottom
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStart
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberColumnCartesianLayer
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoScrollState
import com.patrykandpatrick.vico.core.cartesian.AutoScrollCondition
import com.patrykandpatrick.vico.core.cartesian.Scroll
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModel
import com.patrykandpatrick.vico.sample.previews.annotation.ChartPreview
import com.patrykandpatrick.vico.sample.previews.resource.PreviewSurface
Expand All @@ -44,8 +46,8 @@ public fun DefaultColumnChart(
chart =
rememberCartesianChart(
rememberColumnCartesianLayer(),
startAxis = rememberStartAxis(),
bottomAxis = rememberBottomAxis(),
startAxis = VerticalAxis.rememberStart(),
bottomAxis = HorizontalAxis.rememberBottom(),
),
model = model,
scrollState =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ package com.patrykandpatrick.vico.sample.previews.composables.line

import androidx.compose.runtime.Composable
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottomAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStartAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottom
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStart
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLineCartesianLayer
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoScrollState
import com.patrykandpatrick.vico.core.cartesian.Scroll
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModel
import com.patrykandpatrick.vico.sample.previews.annotation.ChartPreview
import com.patrykandpatrick.vico.sample.previews.resource.PreviewSurface
Expand All @@ -42,8 +44,8 @@ fun DefaultLineChart(
chart =
rememberCartesianChart(
rememberLineCartesianLayer(),
startAxis = rememberStartAxis(),
bottomAxis = rememberBottomAxis(),
startAxis = VerticalAxis.rememberStart(),
bottomAxis = HorizontalAxis.rememberBottom(),
),
model = model,
scrollState = rememberVicoScrollState(scrollable, initialScroll),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,64 +24,60 @@ import androidx.compose.ui.unit.dp
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberAxisGuidelineComponent
import com.patrykandpatrick.vico.compose.common.component.fixed
import com.patrykandpatrick.vico.compose.common.component.rememberLayeredComponent
import com.patrykandpatrick.vico.compose.common.component.rememberShadow
import com.patrykandpatrick.vico.compose.common.component.rememberShapeComponent
import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent
import com.patrykandpatrick.vico.compose.common.of
import com.patrykandpatrick.vico.compose.common.shape.markerCornered
import com.patrykandpatrick.vico.compose.common.component.shadow
import com.patrykandpatrick.vico.compose.common.dimensions
import com.patrykandpatrick.vico.compose.common.shape.markerCorneredShape
import com.patrykandpatrick.vico.core.cartesian.CartesianMeasuringContext
import com.patrykandpatrick.vico.core.cartesian.HorizontalDimensions
import com.patrykandpatrick.vico.core.cartesian.Insets
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModel
import com.patrykandpatrick.vico.core.cartesian.marker.CartesianMarker
import com.patrykandpatrick.vico.core.cartesian.marker.DefaultCartesianMarker
import com.patrykandpatrick.vico.core.common.Dimensions
import com.patrykandpatrick.vico.core.common.LayeredComponent
import com.patrykandpatrick.vico.core.common.component.Shadow
import com.patrykandpatrick.vico.core.common.component.ShapeComponent
import com.patrykandpatrick.vico.core.common.component.TextComponent
import com.patrykandpatrick.vico.core.common.copyColor
import com.patrykandpatrick.vico.core.common.shape.Corner
import com.patrykandpatrick.vico.core.common.shape.Shape
import com.patrykandpatrick.vico.core.common.shape.CorneredShape

@Composable
internal fun rememberMarker(
labelPosition: DefaultCartesianMarker.LabelPosition = DefaultCartesianMarker.LabelPosition.Top,
showIndicator: Boolean = true,
): CartesianMarker {
val labelBackgroundShape = Shape.markerCornered(Corner.FullyRounded)
val labelBackgroundShape = markerCorneredShape(Corner.FullyRounded)
val labelBackground =
rememberShapeComponent(
color = MaterialTheme.colorScheme.surfaceBright,
shape = labelBackgroundShape,
shadow =
rememberShadow(
radius = LABEL_BACKGROUND_SHADOW_RADIUS_DP.dp,
dy = LABEL_BACKGROUND_SHADOW_DY_DP.dp,
),
shadow(radius = LABEL_BACKGROUND_SHADOW_RADIUS_DP.dp, dy = LABEL_BACKGROUND_SHADOW_DY_DP.dp),
)
val label =
rememberTextComponent(
color = MaterialTheme.colorScheme.onSurface,
textAlignment = Layout.Alignment.ALIGN_CENTER,
padding = Dimensions.of(8.dp, 4.dp),
padding = dimensions(8.dp, 4.dp),
background = labelBackground,
minWidth = TextComponent.MinWidth.fixed(40.dp),
)
val indicatorFrontComponent =
rememberShapeComponent(MaterialTheme.colorScheme.surface, Shape.Pill)
val indicatorCenterComponent = rememberShapeComponent(shape = Shape.Pill)
val indicatorRearComponent = rememberShapeComponent(shape = Shape.Pill)
rememberShapeComponent(MaterialTheme.colorScheme.surface, CorneredShape.Pill)
val indicatorCenterComponent = rememberShapeComponent(shape = CorneredShape.Pill)
val indicatorRearComponent = rememberShapeComponent(shape = CorneredShape.Pill)
val indicator =
rememberLayeredComponent(
rear = indicatorRearComponent,
front =
rememberLayeredComponent(
rear = indicatorCenterComponent,
front = indicatorFrontComponent,
padding = Dimensions.of(5.dp),
padding = dimensions(5.dp),
),
padding = Dimensions.of(10.dp),
padding = dimensions(10.dp),
)
val guideline = rememberAxisGuidelineComponent()
return remember(label, labelPosition, indicator, showIndicator, guideline) {
Expand All @@ -93,19 +89,19 @@ internal fun rememberMarker(
if (showIndicator) {
{ color ->
LayeredComponent(
rear = ShapeComponent(color.copyColor(alpha = 0.15f), Shape.Pill),
rear = ShapeComponent(color.copyColor(alpha = 0.15f), CorneredShape.Pill),
front =
LayeredComponent(
rear =
ShapeComponent(
color = color,
shape = Shape.Pill,
shape = CorneredShape.Pill,
shadow = Shadow(radiusDp = 12f, color = color),
),
front = indicatorFrontComponent,
padding = Dimensions.of(5.dp),
padding = dimensions(5.dp),
),
padding = Dimensions.of(10.dp),
padding = dimensions(10.dp),
)
}
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,20 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidViewBinding
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottomAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStartAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottom
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStart
import com.patrykandpatrick.vico.compose.cartesian.cartesianLayerPadding
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLine
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberLineCartesianLayer
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoZoomState
import com.patrykandpatrick.vico.compose.common.data.rememberExtraLambda
import com.patrykandpatrick.vico.compose.common.fill
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
import com.patrykandpatrick.vico.core.cartesian.data.lineSeries
import com.patrykandpatrick.vico.core.cartesian.layer.LineCartesianLayer
Expand Down Expand Up @@ -68,12 +71,20 @@ private fun ComposeChart1(modelProducer: CartesianChartModelProducer, modifier:
rememberCartesianChart(
rememberLineCartesianLayer(
LineCartesianLayer.LineProvider.series(
rememberLine(remember { LineCartesianLayer.LineFill.single(fill(Color(0xffa485e0))) })
LineCartesianLayer.rememberLine(
remember { LineCartesianLayer.LineFill.single(fill(Color(0xffa485e0))) }
)
)
),
startAxis = rememberStartAxis(),
bottomAxis = rememberBottomAxis(guideline = null),
startAxis = VerticalAxis.rememberStart(),
bottomAxis =
HorizontalAxis.rememberBottom(
guideline = null,
itemPlacer = remember { HorizontalAxis.ItemPlacer.segmented() },
),
marker = marker,
layerPadding =
cartesianLayerPadding(scalableStartPadding = 16.dp, scalableEndPadding = 16.dp),
persistentMarkers = rememberExtraLambda(marker) { marker at PERSISTENT_MARKER_X },
),
modelProducer = modelProducer,
Expand All @@ -91,7 +102,6 @@ private fun ViewChart1(modelProducer: CartesianChartModelProducer, modifier: Mod
with(chartView) {
chart?.persistentMarkers = { marker at PERSISTENT_MARKER_X }
this.modelProducer = modelProducer
chart?.bottomAxis = (chart?.bottomAxis as HorizontalAxis).copy(guideline = null)
chart?.marker = marker
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,12 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidViewBinding
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottomAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStartAxis
import com.patrykandpatrick.vico.compose.cartesian.fullWidth
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottom
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStart
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberCandlestickCartesianLayer
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
import com.patrykandpatrick.vico.core.cartesian.HorizontalLayout
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
import com.patrykandpatrick.vico.core.cartesian.data.RandomCartesianModelGenerator
import com.patrykandpatrick.vico.databinding.Chart10Binding
Expand Down Expand Up @@ -68,17 +67,16 @@ private fun ComposeChart10(modelProducer: CartesianChartModelProducer, modifier:
chart =
rememberCartesianChart(
rememberCandlestickCartesianLayer(),
startAxis = rememberStartAxis(),
startAxis = VerticalAxis.rememberStart(),
bottomAxis =
rememberBottomAxis(
HorizontalAxis.rememberBottom(
guideline = null,
itemPlacer =
remember {
HorizontalAxis.ItemPlacer.default(spacing = 3, addExtremeLabelPadding = true)
HorizontalAxis.ItemPlacer.aligned(spacing = 3, addExtremeLabelPadding = true)
},
),
marker = marker,
horizontalLayout = HorizontalLayout.fullWidth(),
),
modelProducer = modelProducer,
modifier = modifier,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,16 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidViewBinding
import com.patrykandpatrick.vico.compose.cartesian.CartesianChartHost
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottomAxis
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStartAxis
import com.patrykandpatrick.vico.compose.cartesian.decoration.rememberHorizontalLine
import com.patrykandpatrick.vico.compose.cartesian.fullWidth
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberBottom
import com.patrykandpatrick.vico.compose.cartesian.axis.rememberStart
import com.patrykandpatrick.vico.compose.cartesian.layer.rememberColumnCartesianLayer
import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
import com.patrykandpatrick.vico.compose.common.component.rememberLineComponent
import com.patrykandpatrick.vico.compose.common.component.rememberShapeComponent
import com.patrykandpatrick.vico.compose.common.component.rememberTextComponent
import com.patrykandpatrick.vico.compose.common.of
import com.patrykandpatrick.vico.core.cartesian.HorizontalLayout
import com.patrykandpatrick.vico.compose.common.component.shapeComponent
import com.patrykandpatrick.vico.compose.common.dimensions
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
import com.patrykandpatrick.vico.core.cartesian.data.CartesianValueFormatter
import com.patrykandpatrick.vico.core.cartesian.data.columnSeries
Expand All @@ -45,7 +43,7 @@ import com.patrykandpatrick.vico.core.common.Dimensions
import com.patrykandpatrick.vico.core.common.component.LineComponent
import com.patrykandpatrick.vico.core.common.component.ShapeComponent
import com.patrykandpatrick.vico.core.common.component.TextComponent
import com.patrykandpatrick.vico.core.common.shape.Shape
import com.patrykandpatrick.vico.core.common.shape.CorneredShape
import com.patrykandpatrick.vico.databinding.Chart2Binding
import com.patrykandpatrick.vico.sample.showcase.Defaults
import com.patrykandpatrick.vico.sample.showcase.UIFramework
Expand Down Expand Up @@ -89,21 +87,20 @@ private fun ComposeChart2(modelProducer: CartesianChartModelProducer, modifier:
rememberLineComponent(
color = Color(0xffff5500),
thickness = 16.dp,
shape = remember { Shape.rounded(allPercent = 40) },
shape = CorneredShape.rounded(allPercent = 40),
)
)
),
startAxis = rememberStartAxis(),
startAxis = VerticalAxis.rememberStart(),
bottomAxis =
rememberBottomAxis(
HorizontalAxis.rememberBottom(
valueFormatter = bottomAxisValueFormatter,
itemPlacer =
remember {
HorizontalAxis.ItemPlacer.default(spacing = 3, addExtremeLabelPadding = true)
HorizontalAxis.ItemPlacer.aligned(spacing = 3, addExtremeLabelPadding = true)
},
),
marker = rememberMarker(),
horizontalLayout = HorizontalLayout.fullWidth(),
decorations = listOf(rememberComposeHorizontalLine()),
),
modelProducer = modelProducer,
Expand Down Expand Up @@ -133,20 +130,18 @@ private fun ViewChart2(modelProducer: CartesianChartModelProducer, modifier: Mod
@Composable
private fun rememberComposeHorizontalLine(): HorizontalLine {
val color = Color(HORIZONTAL_LINE_COLOR)
return rememberHorizontalLine(
y = { HORIZONTAL_LINE_Y },
line = rememberLineComponent(color, HORIZONTAL_LINE_THICKNESS_DP.dp),
labelComponent =
rememberTextComponent(
margins = Dimensions.of(HORIZONTAL_LINE_LABEL_MARGIN_DP.dp),
padding =
Dimensions.of(
HORIZONTAL_LINE_LABEL_HORIZONTAL_PADDING_DP.dp,
HORIZONTAL_LINE_LABEL_VERTICAL_PADDING_DP.dp,
),
background = rememberShapeComponent(color, Shape.Pill),
),
)
val line = rememberLineComponent(color, HORIZONTAL_LINE_THICKNESS_DP.dp)
val labelComponent =
rememberTextComponent(
margins = dimensions(HORIZONTAL_LINE_LABEL_MARGIN_DP.dp),
padding =
dimensions(
HORIZONTAL_LINE_LABEL_HORIZONTAL_PADDING_DP.dp,
HORIZONTAL_LINE_LABEL_VERTICAL_PADDING_DP.dp,
),
background = shapeComponent(color, CorneredShape.Pill),
)
return remember { HorizontalLine({ HORIZONTAL_LINE_Y }, line, labelComponent) }
}

private fun getViewHorizontalLine() =
Expand All @@ -161,7 +156,7 @@ private fun getViewHorizontalLine() =
HORIZONTAL_LINE_LABEL_HORIZONTAL_PADDING_DP,
HORIZONTAL_LINE_LABEL_VERTICAL_PADDING_DP,
),
background = ShapeComponent(HORIZONTAL_LINE_COLOR, Shape.Pill),
background = ShapeComponent(HORIZONTAL_LINE_COLOR, CorneredShape.Pill),
),
)

Expand All @@ -173,6 +168,6 @@ private const val HORIZONTAL_LINE_LABEL_VERTICAL_PADDING_DP = 2f
private const val HORIZONTAL_LINE_LABEL_MARGIN_DP = 4f

private val monthNames = DateFormatSymbols.getInstance(Locale.US).shortMonths
private val bottomAxisValueFormatter = CartesianValueFormatter { x, _, _ ->
private val bottomAxisValueFormatter = CartesianValueFormatter { _, x, _ ->
"${monthNames[x.toInt() % 12]}${20 + x.toInt() / 12}"
}
Loading

0 comments on commit e4a8cb6

Please sign in to comment.