All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.render.BarChartRenderer.kt Maven / Gradle / Ivy

There is a newer version: 0.11.4
Show newest version
package com.juul.krayon.chart.render

import com.juul.krayon.chart.data.ClusteredDataSet
import com.juul.krayon.chart.render.components.AxisRenderer
import com.juul.krayon.chart.render.components.BarRenderer
import com.juul.krayon.kanvas.Kanvas

private const val AXIS_PAD = 24f

/** Renderer for bar charts. */
public open class BarChartRenderer(
    style: Style = Style(),
) : Renderer> {

    public class Style(
        public val xAxisStyle: AxisRenderer.Style = defaultAxisStyle(Orientation.Horizontal),
        public val yAxisStyle: AxisRenderer.Style = defaultAxisStyle(Orientation.Vertical),
        public val barStyle: BarRenderer.Style = defaultBarStyle(Orientation.Vertical),
    )

    private val xAxisRenderer = AxisRenderer(style.xAxisStyle)
    private val yAxisRenderer = AxisRenderer(style.yAxisStyle)
    private val barRenderer = BarRenderer(style.barStyle)

    override fun  render(data: ClusteredDataSet, canvas: Kanvas) {
        val dataAreaLeft = AXIS_PAD
        val dataAreaTop = AXIS_PAD
        val dataAreaRight = canvas.width - AXIS_PAD
        val dataAreaBottom = canvas.height - AXIS_PAD
        barRenderer.render(BarRenderer.Specification(dataAreaLeft, dataAreaTop, dataAreaRight, dataAreaBottom, data), canvas)
        xAxisRenderer.render(AxisRenderer.Specification(dataAreaLeft, dataAreaBottom, dataAreaRight), canvas)
        yAxisRenderer.render(AxisRenderer.Specification(dataAreaLeft, dataAreaBottom, dataAreaTop), canvas)
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy