Skip to content

Commit

Permalink
Make Axis-related updates
Browse files Browse the repository at this point in the history
  • Loading branch information
patrickmichalik committed Aug 2, 2024
1 parent c034c86 commit 69f658a
Show file tree
Hide file tree
Showing 29 changed files with 201 additions and 228 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ 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.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.core.cartesian.axis.BaseAxis
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 Down Expand Up @@ -118,8 +117,7 @@ private fun ViewChart6(modelProducer: CartesianChartModelProducer, modifier: Mod
with(chartView) {
chart?.decorations = listOf(getViewHorizontalBox())
this.modelProducer = modelProducer
(chart?.bottomAxis as HorizontalAxis<AxisPosition.Horizontal.Bottom>).valueFormatter =
bottomAxisValueFormatter
(chart?.bottomAxis as BaseAxis<*>).valueFormatter = bottomAxisValueFormatter
chart?.marker = marker
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import com.patrykandpatrick.vico.compose.cartesian.rememberCartesianChart
import com.patrykandpatrick.vico.compose.cartesian.rememberVicoZoomState
import com.patrykandpatrick.vico.compose.common.component.rememberLineComponent
import com.patrykandpatrick.vico.compose.common.fill
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.axis.BaseAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModelProducer
import com.patrykandpatrick.vico.core.cartesian.data.columnSeries
Expand Down Expand Up @@ -99,14 +99,14 @@ private fun ComposeChart8(modelProducer: CartesianChartModelProducer, modifier:
}
),
mergeMode = { ColumnCartesianLayer.MergeMode.Stacked },
verticalAxisPosition = AxisPosition.Vertical.Start,
verticalAxisPosition = Axis.Position.Vertical.Start,
),
rememberLineCartesianLayer(
lineProvider =
LineCartesianLayer.LineProvider.series(
rememberLine(remember { LineCartesianLayer.LineFill.single(fill(color4)) })
),
verticalAxisPosition = AxisPosition.Vertical.End,
verticalAxisPosition = Axis.Position.Vertical.End,
),
startAxis = rememberStartAxis(guideline = null),
endAxis = rememberEndAxis(guideline = null),
Expand All @@ -125,8 +125,9 @@ private fun ViewChart8(modelProducer: CartesianChartModelProducer, modifier: Mod
AndroidViewBinding(Chart8Binding::inflate, modifier) {
with(chartView) {
(chart?.layers?.get(0) as ColumnCartesianLayer).verticalAxisPosition =
AxisPosition.Vertical.Start
(chart?.layers?.get(1) as LineCartesianLayer).verticalAxisPosition = AxisPosition.Vertical.End
Axis.Position.Vertical.Start
(chart?.layers?.get(1) as LineCartesianLayer).verticalAxisPosition =
Axis.Position.Vertical.End
this.modelProducer = modelProducer
(chart?.startAxis as BaseAxis).guideline = null
chart?.marker = marker
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import com.patrykandpatrick.vico.core.cartesian.CartesianMeasureContext
import com.patrykandpatrick.vico.core.cartesian.FadingEdges
import com.patrykandpatrick.vico.core.cartesian.HorizontalLayout
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModel
import com.patrykandpatrick.vico.core.cartesian.decoration.Decoration
import com.patrykandpatrick.vico.core.cartesian.layer.CartesianLayer
Expand All @@ -46,10 +45,10 @@ import com.patrykandpatrick.vico.core.common.data.ExtraStore
@Composable
public fun rememberCartesianChart(
vararg layers: CartesianLayer<*>,
startAxis: Axis<AxisPosition.Vertical.Start>? = null,
topAxis: Axis<AxisPosition.Horizontal.Top>? = null,
endAxis: Axis<AxisPosition.Vertical.End>? = null,
bottomAxis: Axis<AxisPosition.Horizontal.Bottom>? = null,
startAxis: Axis<Axis.Position.Vertical.Start>? = null,
topAxis: Axis<Axis.Position.Horizontal.Top>? = null,
endAxis: Axis<Axis.Position.Vertical.End>? = null,
bottomAxis: Axis<Axis.Position.Horizontal.Bottom>? = null,
marker: CartesianMarker? = null,
markerVisibilityListener: CartesianMarkerVisibilityListener? = null,
horizontalLayout: HorizontalLayout = HorizontalLayout.segmented(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.axis.BaseAxis
import com.patrykandpatrick.vico.core.cartesian.axis.HorizontalAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianValueFormatter
Expand All @@ -42,7 +42,7 @@ public fun rememberTopAxis(
sizeConstraint: BaseAxis.SizeConstraint = remember { BaseAxis.SizeConstraint.Auto() },
titleComponent: TextComponent? = null,
title: CharSequence? = null,
): HorizontalAxis<AxisPosition.Horizontal.Top> =
): HorizontalAxis<Axis.Position.Horizontal.Top> =
remember { HorizontalAxis.top() }
.apply {
this.line = line
Expand Down Expand Up @@ -72,7 +72,7 @@ public fun rememberBottomAxis(
sizeConstraint: BaseAxis.SizeConstraint = remember { BaseAxis.SizeConstraint.Auto() },
titleComponent: TextComponent? = null,
title: CharSequence? = null,
): HorizontalAxis<AxisPosition.Horizontal.Bottom> =
): HorizontalAxis<Axis.Position.Horizontal.Bottom> =
remember { HorizontalAxis.bottom() }
.apply {
this.line = line
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.axis.BaseAxis
import com.patrykandpatrick.vico.core.cartesian.axis.VerticalAxis
import com.patrykandpatrick.vico.core.cartesian.data.CartesianValueFormatter
Expand All @@ -46,7 +46,7 @@ public fun rememberStartAxis(
sizeConstraint: BaseAxis.SizeConstraint = remember { BaseAxis.SizeConstraint.Auto() },
titleComponent: TextComponent? = null,
title: CharSequence? = null,
): VerticalAxis<AxisPosition.Vertical.Start> =
): VerticalAxis<Axis.Position.Vertical.Start> =
remember { VerticalAxis.start() }
.apply {
this.line = line
Expand Down Expand Up @@ -82,7 +82,7 @@ public fun rememberEndAxis(
sizeConstraint: BaseAxis.SizeConstraint = remember { BaseAxis.SizeConstraint.Auto() },
titleComponent: TextComponent? = null,
title: CharSequence? = null,
): VerticalAxis<AxisPosition.Vertical.End> =
): VerticalAxis<Axis.Position.Vertical.End> =
remember { VerticalAxis.end() }
.apply {
this.line = line
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package com.patrykandpatrick.vico.compose.cartesian.decoration

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.decoration.HorizontalBox
import com.patrykandpatrick.vico.core.common.HorizontalPosition
import com.patrykandpatrick.vico.core.common.VerticalPosition
Expand All @@ -36,7 +36,7 @@ public fun rememberHorizontalBox(
horizontalLabelPosition: HorizontalPosition = HorizontalPosition.Start,
verticalLabelPosition: VerticalPosition = VerticalPosition.Top,
labelRotationDegrees: Float = 0f,
verticalAxisPosition: AxisPosition.Vertical? = null,
verticalAxisPosition: Axis.Position.Vertical? = null,
): HorizontalBox =
remember(
y,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ package com.patrykandpatrick.vico.compose.cartesian.decoration

import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.decoration.HorizontalLine
import com.patrykandpatrick.vico.core.common.HorizontalPosition
import com.patrykandpatrick.vico.core.common.VerticalPosition
Expand All @@ -36,7 +36,7 @@ public fun rememberHorizontalLine(
horizontalLabelPosition: HorizontalPosition = HorizontalPosition.Start,
verticalLabelPosition: VerticalPosition = VerticalPosition.Top,
labelRotationDegrees: Float = 0f,
verticalAxisPosition: AxisPosition.Vertical? = null,
verticalAxisPosition: Axis.Position.Vertical? = null,
): HorizontalLine =
remember(
y,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.data.AxisValueOverrider
import com.patrykandpatrick.vico.core.cartesian.data.CandlestickCartesianLayerDrawingModel
import com.patrykandpatrick.vico.core.cartesian.layer.CandlestickCartesianLayer
Expand All @@ -36,7 +36,7 @@ public fun rememberCandlestickCartesianLayer(
minCandleBodyHeight: Dp = Defaults.MIN_CANDLE_BODY_HEIGHT_DP.dp,
candleSpacing: Dp = Defaults.CANDLE_SPACING_DP.dp,
scaleCandleWicks: Boolean = false,
verticalAxisPosition: AxisPosition.Vertical? = null,
verticalAxisPosition: Axis.Position.Vertical? = null,
axisValueOverrider: AxisValueOverrider = remember { AxisValueOverrider.auto() },
drawingModelInterpolator:
DrawingModelInterpolator<
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.patrykandpatrick.vico.compose.common.component.rememberLineComponent
import com.patrykandpatrick.vico.compose.common.vicoTheme
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.data.AxisValueOverrider
import com.patrykandpatrick.vico.core.cartesian.data.CartesianValueFormatter
import com.patrykandpatrick.vico.core.cartesian.data.ColumnCartesianLayerDrawingModel
Expand Down Expand Up @@ -51,7 +51,7 @@ public fun rememberColumnCartesianLayer(
),
columnCollectionSpacing: Dp = Defaults.COLUMN_COLLECTION_SPACING.dp,
mergeMode: (ExtraStore) -> MergeMode = { MergeMode.grouped() },
verticalAxisPosition: AxisPosition.Vertical? = null,
verticalAxisPosition: Axis.Position.Vertical? = null,
dataLabel: TextComponent? = null,
dataLabelVerticalPosition: VerticalPosition = VerticalPosition.Top,
dataLabelValueFormatter: CartesianValueFormatter = remember { CartesianValueFormatter.decimal() },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.patrykandpatrick.vico.compose.common.fill
import com.patrykandpatrick.vico.compose.common.vicoTheme
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.data.AxisValueOverrider
import com.patrykandpatrick.vico.core.cartesian.data.CartesianValueFormatter
import com.patrykandpatrick.vico.core.cartesian.data.LineCartesianLayerDrawingModel
Expand All @@ -48,7 +48,7 @@ public fun rememberLineCartesianLayer(
),
pointSpacing: Dp = Defaults.POINT_SPACING.dp,
axisValueOverrider: AxisValueOverrider = remember { AxisValueOverrider.auto() },
verticalAxisPosition: AxisPosition.Vertical? = null,
verticalAxisPosition: Axis.Position.Vertical? = null,
drawingModelInterpolator:
DrawingModelInterpolator<
LineCartesianLayerDrawingModel.PointInfo,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import androidx.annotation.RestrictTo
import com.patrykandpatrick.vico.core.cartesian.CartesianChart.PersistentMarkerScope
import com.patrykandpatrick.vico.core.cartesian.axis.Axis
import com.patrykandpatrick.vico.core.cartesian.axis.AxisManager
import com.patrykandpatrick.vico.core.cartesian.axis.AxisPosition
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModel
import com.patrykandpatrick.vico.core.cartesian.data.CartesianLayerModel
import com.patrykandpatrick.vico.core.cartesian.data.ChartValues
Expand Down Expand Up @@ -66,10 +65,10 @@ import kotlin.math.abs
*/
public open class CartesianChart(
vararg layers: CartesianLayer<*>,
startAxis: Axis<AxisPosition.Vertical.Start>? = null,
topAxis: Axis<AxisPosition.Horizontal.Top>? = null,
endAxis: Axis<AxisPosition.Vertical.End>? = null,
bottomAxis: Axis<AxisPosition.Horizontal.Bottom>? = null,
startAxis: Axis<Axis.Position.Vertical.Start>? = null,
topAxis: Axis<Axis.Position.Horizontal.Top>? = null,
endAxis: Axis<Axis.Position.Vertical.End>? = null,
bottomAxis: Axis<Axis.Position.Horizontal.Bottom>? = null,
public var marker: CartesianMarker? = null,
public var markerVisibilityListener: CartesianMarkerVisibilityListener? = null,
public var horizontalLayout: HorizontalLayout = HorizontalLayout.Segmented,
Expand Down Expand Up @@ -163,17 +162,17 @@ public open class CartesianChart(
public val markerTargets: SortedMap<Double, List<CartesianMarker.Target>> =
_markerTargets as SortedMap<Double, List<CartesianMarker.Target>>

/** The start axis. */
public var startAxis: Axis<AxisPosition.Vertical.Start>? by axisManager::startAxis
/** The start [Axis]. */
public var startAxis: Axis<Axis.Position.Vertical.Start>? by axisManager::startAxis

/** The top axis. */
public var topAxis: Axis<AxisPosition.Horizontal.Top>? by axisManager::topAxis
/** The top [Axis]. */
public var topAxis: Axis<Axis.Position.Horizontal.Top>? by axisManager::topAxis

/** The end axis. */
public var endAxis: Axis<AxisPosition.Vertical.End>? by axisManager::endAxis
/** The end [Axis]. */
public var endAxis: Axis<Axis.Position.Vertical.End>? by axisManager::endAxis

/** The bottom axis. */
public var bottomAxis: Axis<AxisPosition.Horizontal.Bottom>? by axisManager::bottomAxis
/** The bottom [Axis]. */
public var bottomAxis: Axis<Axis.Position.Horizontal.Bottom>? by axisManager::bottomAxis

init {
axisManager.startAxis = startAxis
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package com.patrykandpatrick.vico.core.cartesian.axis

import android.graphics.RectF
import androidx.annotation.RestrictTo
import com.patrykandpatrick.vico.core.cartesian.CartesianChart
import com.patrykandpatrick.vico.core.cartesian.CartesianDrawContext
import com.patrykandpatrick.vico.core.cartesian.CartesianMeasureContext
Expand All @@ -25,14 +26,12 @@ import com.patrykandpatrick.vico.core.cartesian.MutableHorizontalDimensions
import com.patrykandpatrick.vico.core.cartesian.data.CartesianChartModel
import com.patrykandpatrick.vico.core.cartesian.layer.CartesianLayer
import com.patrykandpatrick.vico.core.common.Bounded
import com.patrykandpatrick.vico.core.common.MeasureContext

/**
* Defines the minimal set of properties and functions required by other parts of the library to
* draw an axis.
*/
public interface Axis<Position : AxisPosition> : Bounded, ChartInsetter<CartesianChartModel> {
/** Defines the position of the axis relative to the [CartesianChart]. */
public val position: Position
/** Draws an axis. */
public interface Axis<P : Axis.Position> : Bounded, ChartInsetter<CartesianChartModel> {
/** Specifies the position of the [Axis]. */
public val position: P

/** Draws content under the [CartesianLayer]s. */
public fun drawUnderLayers(context: CartesianDrawContext)
Expand All @@ -48,4 +47,33 @@ public interface Axis<Position : AxisPosition> : Bounded, ChartInsetter<Cartesia
context: CartesianMeasureContext,
horizontalDimensions: MutableHorizontalDimensions,
)

/** Specifies the position of an [Axis]. */
public sealed class Position {
/** Specifies the position of a horizontal [Axis]. */
public sealed class Horizontal : Position() {
/** Denotes that a horizontal [Axis] is at the top of the [CartesianChart]. */
public data object Top : Horizontal()

/** Denotes that a horizontal [Axis] is at the bottom of the [CartesianChart]. */
public data object Bottom : Horizontal()
}

/** Specifies the position of a vertical [Axis]. */
public sealed class Vertical : Position() {
/** Denotes that a vertical [Axis] is at the start of the [CartesianChart]. */
public data object Start : Vertical()

/** Denotes that a vertical [Axis] is at the end of the [CartesianChart]. */
public data object End : Vertical()

/** @suppress */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public fun isLeft(context: MeasureContext): Boolean =
when (this) {
Start -> context.isLtr
End -> !context.isLtr
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@ import kotlin.reflect.KProperty
internal class AxisManager {
internal val axisCache = ArrayList<Axis<*>>(MAX_AXIS_COUNT)

var startAxis: Axis<AxisPosition.Vertical.Start>? by cacheInList()
var topAxis: Axis<AxisPosition.Horizontal.Top>? by cacheInList()
var endAxis: Axis<AxisPosition.Vertical.End>? by cacheInList()
var bottomAxis: Axis<AxisPosition.Horizontal.Bottom>? by cacheInList()
var startAxis: Axis<Axis.Position.Vertical.Start>? by cacheInList()
var topAxis: Axis<Axis.Position.Horizontal.Top>? by cacheInList()
var endAxis: Axis<Axis.Position.Vertical.End>? by cacheInList()
var bottomAxis: Axis<Axis.Position.Horizontal.Bottom>? by cacheInList()

fun setAxesBounds(
measureContext: CartesianMeasureContext,
Expand All @@ -44,7 +44,7 @@ internal class AxisManager {
setRestrictedBounds()
}

private fun Axis<AxisPosition.Vertical.Start>.setStartAxisBounds(
private fun Axis<Axis.Position.Vertical.Start>.setStartAxisBounds(
context: CartesianMeasureContext,
canvasBounds: RectF,
layerBounds: RectF,
Expand All @@ -60,7 +60,7 @@ internal class AxisManager {
}
}

private fun Axis<AxisPosition.Horizontal.Top>.setTopAxisBounds(
private fun Axis<Axis.Position.Horizontal.Top>.setTopAxisBounds(
context: CartesianMeasureContext,
canvasBounds: RectF,
insets: Insets,
Expand All @@ -75,7 +75,7 @@ internal class AxisManager {
}
}

private fun Axis<AxisPosition.Vertical.End>.setEndAxisBounds(
private fun Axis<Axis.Position.Vertical.End>.setEndAxisBounds(
context: CartesianMeasureContext,
canvasBounds: RectF,
layerBounds: RectF,
Expand All @@ -91,7 +91,7 @@ internal class AxisManager {
}
}

private fun Axis<AxisPosition.Horizontal.Bottom>.setBottomAxisBounds(
private fun Axis<Axis.Position.Horizontal.Bottom>.setBottomAxisBounds(
context: CartesianMeasureContext,
canvasBounds: RectF,
layerBounds: RectF,
Expand Down
Loading

0 comments on commit 69f658a

Please sign in to comment.