Skip to content

Commit 4c93349

Browse files
authored
Merge pull request #470 from AppDevNext/KotlinBarLineScatterCandleBubbleRenderer
Kotlin bar line scatter candle bubble renderer
2 parents ff5ce66 + dd93dbf commit 4c93349

13 files changed

+109
-116
lines changed

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarChartRenderer.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import kotlin.math.min
1919

2020
open class BarChartRenderer(
2121
@JvmField var chart: BarDataProvider,
22-
animator: ChartAnimator?,
23-
viewPortHandler: ViewPortHandler?
22+
animator: ChartAnimator,
23+
viewPortHandler: ViewPortHandler
2424
) : BarLineScatterCandleBubbleRenderer(animator, viewPortHandler) {
2525
/**
2626
* the rect object that is used for drawing the bars
@@ -48,8 +48,8 @@ open class BarChartRenderer(
4848
private var roundedBarRadius = 0f
4949

5050
constructor(
51-
chart: BarDataProvider, animator: ChartAnimator?,
52-
viewPortHandler: ViewPortHandler?, mDrawRoundedBars: Boolean, mRoundedBarRadius: Float
51+
chart: BarDataProvider, animator: ChartAnimator,
52+
viewPortHandler: ViewPortHandler, mDrawRoundedBars: Boolean, mRoundedBarRadius: Float
5353
) : this(chart, animator, viewPortHandler) {
5454
this.drawRoundedBars = mDrawRoundedBars
5555
this.roundedBarRadius = mRoundedBarRadius

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BarLineScatterCandleBubbleRenderer.java

Lines changed: 0 additions & 83 deletions
This file was deleted.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package com.github.mikephil.charting.renderer
2+
3+
import com.github.mikephil.charting.animation.ChartAnimator
4+
import com.github.mikephil.charting.data.DataSet
5+
import com.github.mikephil.charting.data.Entry
6+
import com.github.mikephil.charting.interfaces.dataprovider.BarLineScatterCandleBubbleDataProvider
7+
import com.github.mikephil.charting.interfaces.datasets.IBarLineScatterCandleBubbleDataSet
8+
import com.github.mikephil.charting.interfaces.datasets.IDataSet
9+
import com.github.mikephil.charting.utils.ViewPortHandler
10+
import kotlin.math.max
11+
import kotlin.math.min
12+
13+
abstract class BarLineScatterCandleBubbleRenderer(animator: ChartAnimator, viewPortHandler: ViewPortHandler) : DataRenderer(animator, viewPortHandler) {
14+
/**
15+
* buffer for storing the current minimum and maximum visible x
16+
*/
17+
protected var xBounds: XBounds = XBounds()
18+
19+
/**
20+
* Returns true if the DataSet values should be drawn, false if not.
21+
*/
22+
protected fun shouldDrawValues(set: IDataSet<*>): Boolean {
23+
return set.isVisible() && (set.isDrawValuesEnabled() || set.isDrawIconsEnabled())
24+
}
25+
26+
/**
27+
* Checks if the provided entry object is in bounds for drawing considering the current animation phase.
28+
*/
29+
protected fun <T : Entry> isInBoundsX(entry: T, set: IBarLineScatterCandleBubbleDataSet<T>): Boolean {
30+
val entryIndex = set.getEntryIndex(entry).toFloat()
31+
32+
return if (entryIndex >= set.getEntryCount() * animator.phaseX) {
33+
false
34+
} else {
35+
true
36+
}
37+
}
38+
39+
/**
40+
* Class representing the bounds of the current viewport in terms of indices in the values array of a DataSet.
41+
*/
42+
protected inner class XBounds {
43+
/**
44+
* minimum visible entry index
45+
*/
46+
var min: Int = 0
47+
48+
/**
49+
* maximum visible entry index
50+
*/
51+
var max: Int = 0
52+
53+
/**
54+
* range of visible entry indices
55+
*/
56+
var range: Int = 0
57+
58+
/**
59+
* Calculates the minimum and maximum x values as well as the range between them.
60+
*/
61+
fun <T : Entry> set(chart: BarLineScatterCandleBubbleDataProvider, dataSet: IBarLineScatterCandleBubbleDataSet<T>) {
62+
val phaseX = max(0f, min(1f, animator.phaseX))
63+
64+
val low = chart.lowestVisibleX
65+
val high = chart.highestVisibleX
66+
67+
val entryFrom = dataSet.getEntryForXValue(low, Float.NaN, DataSet.Rounding.DOWN)
68+
val entryTo = dataSet.getEntryForXValue(high, Float.NaN, DataSet.Rounding.UP)
69+
70+
min = if (entryFrom == null) 0 else dataSet.getEntryIndex(entryFrom)
71+
max = if (entryTo == null) 0 else dataSet.getEntryIndex(entryTo)
72+
range = ((max - min) * phaseX).toInt()
73+
}
74+
}
75+
}

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/BubbleChartRenderer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import kotlin.math.sqrt
1919
@Suppress("MemberVisibilityCanBePrivate")
2020
open class BubbleChartRenderer(
2121
@JvmField
22-
var dataProvider: BubbleDataProvider, animator: ChartAnimator?,
23-
viewPortHandler: ViewPortHandler?
22+
var dataProvider: BubbleDataProvider, animator: ChartAnimator,
23+
viewPortHandler: ViewPortHandler
2424
) : BarLineScatterCandleBubbleRenderer(animator, viewPortHandler) {
2525
override fun initBuffers() {
2626
}

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/CandleStickChartRenderer.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import com.github.mikephil.charting.utils.ViewPortHandler
1313

1414
open class CandleStickChartRenderer(
1515
@JvmField
16-
var dataProvider: CandleDataProvider, animator: ChartAnimator?,
17-
viewPortHandler: ViewPortHandler?
16+
var dataProvider: CandleDataProvider, animator: ChartAnimator,
17+
viewPortHandler: ViewPortHandler
1818
) : LineScatterCandleRadarRenderer(animator, viewPortHandler) {
1919
private val shadowBuffers = FloatArray(8)
2020
private val bodyBuffers = FloatArray(4)
@@ -39,6 +39,7 @@ open class CandleStickChartRenderer(
3939
val barSpace = dataSet.barSpace
4040
val showCandleBar = dataSet.showCandleBar
4141

42+
this.xBounds
4243
xBounds.set(dataProvider, dataSet)
4344

4445
paintRender.strokeWidth = dataSet.shadowWidth

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/HorizontalBarChartRenderer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import kotlin.math.min
2222
*/
2323
@Suppress("MemberVisibilityCanBePrivate")
2424
open class HorizontalBarChartRenderer(
25-
chart: BarDataProvider, animator: ChartAnimator?,
26-
viewPortHandler: ViewPortHandler?
25+
chart: BarDataProvider, animator: ChartAnimator,
26+
viewPortHandler: ViewPortHandler
2727
) : BarChartRenderer(chart, animator, viewPortHandler) {
2828
override fun initBuffers() {
2929
val barData = chart.barData

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineChartRenderer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ import kotlin.math.max
2323
import kotlin.math.min
2424

2525
open class LineChartRenderer(
26-
@JvmField var dataProvider: LineDataProvider, animator: ChartAnimator?,
27-
viewPortHandler: ViewPortHandler?
26+
@JvmField var dataProvider: LineDataProvider, animator: ChartAnimator,
27+
viewPortHandler: ViewPortHandler
2828
) : LineRadarRenderer(animator, viewPortHandler) {
2929
/**
3030
* paint for the inner circle of the value indicators

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineRadarRenderer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import com.github.mikephil.charting.animation.ChartAnimator
99
import com.github.mikephil.charting.utils.ViewPortHandler
1010
import com.github.mikephil.charting.utils.getSDKInt
1111

12-
abstract class LineRadarRenderer(animator: ChartAnimator?, viewPortHandler: ViewPortHandler?) :
12+
abstract class LineRadarRenderer(animator: ChartAnimator, viewPortHandler: ViewPortHandler) :
1313
LineScatterCandleRadarRenderer(animator, viewPortHandler) {
1414
/**
1515
* Draws the provided path in filled mode with the provided drawable.

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/LineScatterCandleRadarRenderer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import com.github.mikephil.charting.animation.ChartAnimator
66
import com.github.mikephil.charting.interfaces.datasets.ILineScatterCandleRadarDataSet
77
import com.github.mikephil.charting.utils.ViewPortHandler
88

9-
abstract class LineScatterCandleRadarRenderer(animator: ChartAnimator?, viewPortHandler: ViewPortHandler?) :
9+
abstract class LineScatterCandleRadarRenderer(animator: ChartAnimator, viewPortHandler: ViewPortHandler) :
1010
BarLineScatterCandleBubbleRenderer(animator, viewPortHandler) {
1111
/**
1212
* path that is used for drawing highlight-lines (drawLines(...) cannot be used because of dashes)

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/RadarChartRenderer.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ import com.github.mikephil.charting.utils.Utils
1515
import com.github.mikephil.charting.utils.ViewPortHandler
1616

1717
open class RadarChartRenderer(
18-
protected var chart: RadarChart, animator: ChartAnimator?,
19-
viewPortHandler: ViewPortHandler?
18+
protected var chart: RadarChart, animator: ChartAnimator,
19+
viewPortHandler: ViewPortHandler
2020
) : LineRadarRenderer(animator, viewPortHandler) {
2121
var webPaint: Paint
2222
protected set
@@ -300,11 +300,11 @@ open class RadarChartRenderer(
300300

301301
if (set == null || !set.isHighlightEnabled) continue
302302

303-
val e = set.getEntryForIndex(high.x.toInt())
303+
val radarEntry = set.getEntryForIndex(high.x.toInt())
304304

305-
if (!isInBoundsX(e, set)) continue
305+
if (!isInBoundsX(radarEntry, set)) continue
306306

307-
val y = (e.y - chart.yChartMin)
307+
val y = (radarEntry.y - chart.yChartMin)
308308

309309
Utils.getPosition(
310310
center,

0 commit comments

Comments
 (0)