From f0079cb8937f8a48467f0b62b07ae89f4e7b8aa6 Mon Sep 17 00:00:00 2001 From: Hannes Achleitner Date: Thu, 10 Apr 2025 08:37:44 +0200 Subject: [PATCH 1/2] AbstractBuffer buffer as MutableList --- .../com/github/mikephil/charting/buffer/AbstractBuffer.kt | 5 ++--- .../java/com/github/mikephil/charting/buffer/BarBuffer.kt | 4 ++-- .../github/mikephil/charting/buffer/HorizontalBarBuffer.kt | 2 +- .../github/mikephil/charting/renderer/BarChartRenderer.kt | 3 +-- .../mikephil/charting/renderer/HorizontalBarChartRenderer.kt | 4 ++-- .../mikephil/charting/renderer/RoundedBarChartRenderer.kt | 4 ++-- .../charting/renderer/RoundedHorizontalBarChartRenderer.kt | 2 +- 7 files changed, 11 insertions(+), 13 deletions(-) diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt index 13e971a5f..b4593eb14 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt @@ -5,14 +5,14 @@ package com.github.mikephil.charting.buffer * * @param The data the buffer accepts to be fed with. */ -abstract class AbstractBuffer(size: Int) { +abstract class AbstractBuffer { /** index in the buffer */ @JvmField protected var index: Int = 0 /** float-buffer that holds the data points to draw, order: x,y,x,y,... */ @JvmField - val buffer: FloatArray + val buffer: MutableList = mutableListOf() /** animation phase x-axis */ @JvmField @@ -30,7 +30,6 @@ abstract class AbstractBuffer(size: Int) { init { index = 0 - buffer = FloatArray(size) } /** limits the drawing on the x-axis */ diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt index 89b8eda43..871d6e231 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt @@ -3,7 +3,7 @@ package com.github.mikephil.charting.buffer import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import kotlin.math.abs -open class BarBuffer(size: Int, dataSetCount: Int, containsStacks: Boolean) : AbstractBuffer(size) { +open class BarBuffer(dataSetCount: Int, containsStacks: Boolean) : AbstractBuffer() { protected var dataSetIndex: Int = 0 protected var dataSetCount: Int = 1 @@ -48,7 +48,7 @@ open class BarBuffer(size: Int, dataSetCount: Int, containsStacks: Boolean) : Ab ", containsStacks=" + containsStacks + ", inverted=" + inverted + ", barWidth=" + barWidth + - ", buffer=" + buffer.contentToString() + + ", buffer=" + buffer + ", index=" + index + '}' } diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt index 7d40b4997..408452a1a 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt @@ -3,7 +3,7 @@ package com.github.mikephil.charting.buffer import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import kotlin.math.abs -class HorizontalBarBuffer(size: Int, dataSetCount: Int, containsStacks: Boolean) : BarBuffer(size, dataSetCount, containsStacks) { +class HorizontalBarBuffer(size: Int, dataSetCount: Int, containsStacks: Boolean) : BarBuffer(dataSetCount, containsStacks) { override fun feed(data: IBarDataSet?) { val size = (data?.entryCount ?: 0) * phaseX val barWidthHalf = barWidth / 2f diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt index 423afcd73..e309b0a56 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt @@ -62,7 +62,6 @@ open class BarChartRenderer( barData.dataSets.forEach { barBuffers.add( BarBuffer( - it.entryCount * 4 * (if (it.isStacked) it.stackSize else 1), barData.dataSetCount, it.isStacked ) ) @@ -163,7 +162,7 @@ open class BarChartRenderer( setBarWidth(chart.barData.barWidth) feed(dataSet) } - trans!!.pointValuesToPixel(buffer.buffer) + trans!!.pointValuesToPixel(buffer.buffer.toFloatArray()) val isCustomFill = dataSet.fills != null && dataSet.fills.isNotEmpty() val isSingleColor = dataSet.colors.size == 1 diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.kt index 6ef1bd3d9..e09c4889a 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.kt @@ -104,9 +104,9 @@ open class HorizontalBarChartRenderer( buffer.feed(dataSet) - trans!!.pointValuesToPixel(buffer.buffer) + trans!!.pointValuesToPixel(buffer.buffer.toFloatArray()) - val isCustomFill = dataSet.fills != null && dataSet.fills.isNotEmpty() + val isCustomFill = dataSet.fills != null && !dataSet.fills.isEmpty() val isSingleColor = dataSet.colors.size == 1 val isInverted = chart.isInverted(dataSet.axisDependency) diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedBarChartRenderer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedBarChartRenderer.kt index 1bb9d14de..9f463f0d8 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedBarChartRenderer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedBarChartRenderer.kt @@ -79,13 +79,13 @@ class RoundedBarChartRenderer(chart: BarDataProvider, animator: ChartAnimator, v } } - val buffer = barBuffers!![index]!! + val buffer = barBuffers[index]!! buffer.setPhases(phaseX, phaseY) buffer.setDataSet(index) buffer.setInverted(chart.isInverted(dataSet.axisDependency)) buffer.setBarWidth(chart.barData.barWidth) buffer.feed(dataSet) - trans!!.pointValuesToPixel(buffer.buffer) + trans!!.pointValuesToPixel(buffer.buffer.toFloatArray()) // if multiple colors has been assigned to Bar Chart if (dataSet.colors.size > 1) { diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedHorizontalBarChartRenderer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedHorizontalBarChartRenderer.kt index e59ff54b8..2e9e70745 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedHorizontalBarChartRenderer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RoundedHorizontalBarChartRenderer.kt @@ -86,7 +86,7 @@ class RoundedHorizontalBarChartRenderer(chart: BarDataProvider, animator: ChartA buffer.setInverted(chart.isInverted(dataSet.axisDependency)) buffer.setBarWidth(chart.barData.barWidth) buffer.feed(dataSet) - trans!!.pointValuesToPixel(buffer.buffer) + trans!!.pointValuesToPixel(buffer.buffer.toFloatArray()) // if multiple colors has been assigned to Bar Chart if (dataSet.colors.size > 1) { From eceb86799bc45f7f6fd4eda475c38d96f6417086 Mon Sep 17 00:00:00 2001 From: Hannes Achleitner Date: Sun, 30 Nov 2025 13:46:35 +0100 Subject: [PATCH 2/2] Buffer size --- .../com/github/mikephil/charting/buffer/AbstractBuffer.kt | 5 +++-- .../java/com/github/mikephil/charting/buffer/BarBuffer.kt | 2 +- .../github/mikephil/charting/buffer/HorizontalBarBuffer.kt | 2 +- .../github/mikephil/charting/renderer/BarChartRenderer.kt | 5 +++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt index b4593eb14..02bc6b979 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/AbstractBuffer.kt @@ -5,14 +5,14 @@ package com.github.mikephil.charting.buffer * * @param The data the buffer accepts to be fed with. */ -abstract class AbstractBuffer { +abstract class AbstractBuffer(size: Int) { /** index in the buffer */ @JvmField protected var index: Int = 0 /** float-buffer that holds the data points to draw, order: x,y,x,y,... */ @JvmField - val buffer: MutableList = mutableListOf() + var buffer: MutableList = mutableListOf() /** animation phase x-axis */ @JvmField @@ -30,6 +30,7 @@ abstract class AbstractBuffer { init { index = 0 + buffer = FloatArray(size).toMutableList() } /** limits the drawing on the x-axis */ diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt index 871d6e231..df00daf5f 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/BarBuffer.kt @@ -3,7 +3,7 @@ package com.github.mikephil.charting.buffer import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import kotlin.math.abs -open class BarBuffer(dataSetCount: Int, containsStacks: Boolean) : AbstractBuffer() { +open class BarBuffer(size: Int, dataSetCount: Int, containsStacks: Boolean) : AbstractBuffer(size) { protected var dataSetIndex: Int = 0 protected var dataSetCount: Int = 1 diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt index 408452a1a..7d40b4997 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/buffer/HorizontalBarBuffer.kt @@ -3,7 +3,7 @@ package com.github.mikephil.charting.buffer import com.github.mikephil.charting.interfaces.datasets.IBarDataSet import kotlin.math.abs -class HorizontalBarBuffer(size: Int, dataSetCount: Int, containsStacks: Boolean) : BarBuffer(dataSetCount, containsStacks) { +class HorizontalBarBuffer(size: Int, dataSetCount: Int, containsStacks: Boolean) : BarBuffer(size, dataSetCount, containsStacks) { override fun feed(data: IBarDataSet?) { val size = (data?.entryCount ?: 0) * phaseX val barWidthHalf = barWidth / 2f diff --git a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt index e309b0a56..615b2dc43 100644 --- a/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt +++ b/MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt @@ -59,10 +59,11 @@ open class BarChartRenderer( val barData = chart.barData barBuffers = mutableListOf() - barData.dataSets.forEach { + barData.dataSets.forEach { iBarDataSet -> barBuffers.add( BarBuffer( - barData.dataSetCount, it.isStacked + iBarDataSet.entryCount * 4 * (if (iBarDataSet.isStacked) iBarDataSet.stackSize else 1), + barData.dataSetCount, iBarDataSet.isStacked ) ) }