@nativescript-community/ui-chart 1.2.36 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -0
- package/animation/ChartAnimator.d.ts +47 -4
- package/animation/ChartAnimator.js +49 -11
- package/animation/ChartAnimator.js.map +1 -1
- package/animation/Tween.d.ts +1 -1
- package/animation/Tween.js +4 -2
- package/animation/Tween.js.map +1 -1
- package/buffer/AbstractBuffer.d.ts +28 -3
- package/buffer/AbstractBuffer.js +22 -3
- package/buffer/AbstractBuffer.js.map +1 -1
- package/buffer/BarBuffer.d.ts +8 -12
- package/buffer/BarBuffer.js +33 -36
- package/buffer/BarBuffer.js.map +1 -1
- package/buffer/HorizontalBarBuffer.js +13 -10
- package/buffer/HorizontalBarBuffer.js.map +1 -1
- package/charts/BarChart.d.ts +70 -15
- package/charts/BarChart.js +92 -63
- package/charts/BarChart.js.map +1 -1
- package/charts/BarLineChartBase.d.ts +494 -73
- package/charts/BarLineChartBase.js +788 -407
- package/charts/BarLineChartBase.js.map +1 -1
- package/charts/BubbleChart.d.ts +11 -5
- package/charts/BubbleChart.js +10 -8
- package/charts/BubbleChart.js.map +1 -1
- package/charts/CandleStickChart.d.ts +8 -5
- package/charts/CandleStickChart.js +9 -10
- package/charts/CandleStickChart.js.map +1 -1
- package/charts/Chart.d.ts +420 -91
- package/charts/Chart.js +590 -290
- package/charts/Chart.js.map +1 -1
- package/charts/CombinedChart.d.ts +59 -29
- package/charts/CombinedChart.js +74 -67
- package/charts/CombinedChart.js.map +1 -1
- package/charts/HorizontalBarChart.d.ts +37 -7
- package/charts/HorizontalBarChart.js +97 -59
- package/charts/HorizontalBarChart.js.map +1 -1
- package/charts/LineChart.d.ts +3 -5
- package/charts/LineChart.js +6 -10
- package/charts/LineChart.js.map +1 -1
- package/charts/PieChart.d.ts +218 -64
- package/charts/PieChart.js +278 -168
- package/charts/PieChart.js.map +1 -1
- package/charts/PieRadarChartBase.d.ts +107 -18
- package/charts/PieRadarChartBase.js +156 -73
- package/charts/PieRadarChartBase.js.map +1 -1
- package/charts/RadarChart.d.ts +75 -35
- package/charts/RadarChart.js +114 -103
- package/charts/RadarChart.js.map +1 -1
- package/charts/ScatterChart.d.ts +10 -5
- package/charts/ScatterChart.js +11 -10
- package/charts/ScatterChart.js.map +1 -1
- package/components/AxisBase.d.ts +271 -101
- package/components/AxisBase.js +264 -254
- package/components/AxisBase.js.map +1 -1
- package/components/ComponentBase.d.ts +54 -19
- package/components/ComponentBase.js +60 -48
- package/components/ComponentBase.js.map +1 -1
- package/components/Description.d.ts +18 -9
- package/components/Description.js +12 -26
- package/components/Description.js.map +1 -1
- package/components/IMarker.d.ts +30 -1
- package/components/IMarker.js.map +1 -1
- package/components/Legend.d.ts +155 -58
- package/components/Legend.js +208 -172
- package/components/Legend.js.map +1 -1
- package/components/LegendEntry.d.ts +38 -0
- package/components/LegendEntry.js +34 -0
- package/components/LegendEntry.js.map +1 -1
- package/components/LimitLine.d.ts +40 -22
- package/components/LimitLine.js +44 -56
- package/components/LimitLine.js.map +1 -1
- package/components/MarkerImage.d.ts +1 -0
- package/components/MarkerImage.js +97 -0
- package/components/MarkerImage.js.map +1 -0
- package/components/XAxis.d.ts +41 -10
- package/components/XAxis.js +42 -24
- package/components/XAxis.js.map +1 -1
- package/components/YAxis.d.ts +114 -37
- package/components/YAxis.js +138 -106
- package/components/YAxis.js.map +1 -1
- package/data/BarData.d.ts +32 -4
- package/data/BarData.js +92 -24
- package/data/BarData.js.map +1 -1
- package/data/BarDataSet.d.ts +35 -18
- package/data/BarDataSet.js +42 -47
- package/data/BarDataSet.js.map +1 -1
- package/data/BarEntry.d.ts +3 -0
- package/data/BarEntry.js.map +1 -1
- package/data/BarLineScatterCandleBubbleData.d.ts +5 -0
- package/data/BarLineScatterCandleBubbleData.js +5 -0
- package/data/BarLineScatterCandleBubbleData.js.map +1 -1
- package/data/BarLineScatterCandleBubbleDataSet.d.ts +11 -3
- package/data/BarLineScatterCandleBubbleDataSet.js +11 -7
- package/data/BarLineScatterCandleBubbleDataSet.js.map +1 -1
- package/data/BaseDataSet.d.ts +129 -71
- package/data/BaseDataSet.js +146 -169
- package/data/BaseDataSet.js.map +1 -1
- package/data/BaseEntry.d.ts +3 -0
- package/data/BaseEntry.js.map +1 -1
- package/data/BubbleData.d.ts +7 -1
- package/data/BubbleData.js +8 -2
- package/data/BubbleData.js.map +1 -1
- package/data/BubbleDataSet.d.ts +7 -7
- package/data/BubbleDataSet.js +8 -15
- package/data/BubbleDataSet.js.map +1 -1
- package/data/BubbleEntry.d.ts +1 -0
- package/data/BubbleEntry.js.map +1 -1
- package/data/CandleData.js.map +1 -1
- package/data/CandleDataSet.d.ts +64 -30
- package/data/CandleDataSet.js +67 -74
- package/data/CandleDataSet.js.map +1 -1
- package/data/CandleEntry.d.ts +4 -0
- package/data/CandleEntry.js.map +1 -1
- package/data/ChartData.d.ts +273 -18
- package/data/ChartData.js +398 -93
- package/data/ChartData.js.map +1 -1
- package/data/CombinedData.d.ts +39 -12
- package/data/CombinedData.js +87 -71
- package/data/CombinedData.js.map +1 -1
- package/data/DataSet.d.ts +59 -8
- package/data/DataSet.js +114 -26
- package/data/DataSet.js.map +1 -1
- package/data/Entry.js.map +1 -1
- package/data/LineData.d.ts +5 -0
- package/data/LineData.js +5 -0
- package/data/LineData.js.map +1 -1
- package/data/LineDataSet.d.ts +80 -49
- package/data/LineDataSet.js +90 -135
- package/data/LineDataSet.js.map +1 -1
- package/data/LineRadarDataSet.d.ts +27 -17
- package/data/LineRadarDataSet.js +22 -35
- package/data/LineRadarDataSet.js.map +1 -1
- package/data/LineScatterCandleRadarDataSet.d.ts +30 -15
- package/data/LineScatterCandleRadarDataSet.js +36 -39
- package/data/LineScatterCandleRadarDataSet.js.map +1 -1
- package/data/PieData.d.ts +26 -0
- package/data/PieData.js +28 -2
- package/data/PieData.js.map +1 -1
- package/data/PieDataSet.d.ts +40 -36
- package/data/PieDataSet.js +36 -88
- package/data/PieDataSet.js.map +1 -1
- package/data/PieEntry.d.ts +3 -0
- package/data/PieEntry.js.map +1 -1
- package/data/RadarData.d.ts +10 -4
- package/data/RadarData.js +5 -6
- package/data/RadarData.js.map +1 -1
- package/data/RadarDataSet.d.ts +7 -21
- package/data/RadarDataSet.js +10 -49
- package/data/RadarDataSet.js.map +1 -1
- package/data/RadarEntry.js.map +1 -1
- package/data/ScatterData.d.ts +4 -1
- package/data/ScatterData.js +5 -2
- package/data/ScatterData.js.map +1 -1
- package/data/ScatterDataSet.d.ts +24 -14
- package/data/ScatterDataSet.js +26 -31
- package/data/ScatterDataSet.js.map +1 -1
- package/formatter/DefaultAxisValueFormatter.d.ts +17 -3
- package/formatter/DefaultAxisValueFormatter.js +12 -5
- package/formatter/DefaultAxisValueFormatter.js.map +1 -1
- package/formatter/DefaultFillFormatter.js +7 -7
- package/formatter/DefaultFillFormatter.js.map +1 -1
- package/formatter/DefaultValueFormatter.js.map +1 -1
- package/formatter/IAxisValueFormatter.d.ts +20 -2
- package/formatter/IAxisValueFormatter.js.map +1 -1
- package/formatter/IFillFormatter.d.ts +25 -0
- package/formatter/IFillFormatter.js.map +1 -1
- package/formatter/IValueFormatter.d.ts +21 -0
- package/formatter/IValueFormatter.js.map +1 -1
- package/formatter/ValueFormatter.d.ts +60 -0
- package/formatter/ValueFormatter.js +60 -0
- package/formatter/ValueFormatter.js.map +1 -1
- package/highlight/BarHighlighter.d.ts +22 -2
- package/highlight/BarHighlighter.js +43 -17
- package/highlight/BarHighlighter.js.map +1 -1
- package/highlight/ChartHighlighter.d.ts +87 -5
- package/highlight/ChartHighlighter.js +126 -23
- package/highlight/ChartHighlighter.js.map +1 -1
- package/highlight/CombinedHighlighter.d.ts +6 -0
- package/highlight/CombinedHighlighter.js +31 -16
- package/highlight/CombinedHighlighter.js.map +1 -1
- package/highlight/Highlight.d.ts +54 -1
- package/highlight/Highlight.js +5 -0
- package/highlight/Highlight.js.map +1 -1
- package/highlight/HorizontalBarHighlighter.d.ts +1 -1
- package/highlight/HorizontalBarHighlighter.js +14 -13
- package/highlight/HorizontalBarHighlighter.js.map +1 -1
- package/highlight/IHighlighter.d.ts +11 -1
- package/highlight/IHighlighter.js.map +1 -1
- package/highlight/PieHighlighter.js +2 -2
- package/highlight/PieHighlighter.js.map +1 -1
- package/highlight/PieRadarHighlighter.d.ts +12 -1
- package/highlight/PieRadarHighlighter.js +12 -4
- package/highlight/PieRadarHighlighter.js.map +1 -1
- package/highlight/RadarHighlighter.d.ts +12 -0
- package/highlight/RadarHighlighter.js +24 -10
- package/highlight/RadarHighlighter.js.map +1 -1
- package/index.d.ts +11 -0
- package/index.js +15 -0
- package/index.js.map +1 -0
- package/interfaces/dataprovider/BarDataProvider.d.ts +4 -4
- package/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.d.ts +8 -3
- package/interfaces/dataprovider/BubbleDataProvider.d.ts +1 -1
- package/interfaces/dataprovider/CandleDataProvider.d.ts +1 -1
- package/interfaces/dataprovider/ChartInterface.d.ts +17 -22
- package/interfaces/dataprovider/CombinedDataProvider.d.ts +1 -1
- package/interfaces/dataprovider/LineDataProvider.d.ts +1 -1
- package/interfaces/dataprovider/ScatterDataProvider.d.ts +1 -1
- package/interfaces/datasets/IBarDataSet.d.ts +8 -22
- package/interfaces/datasets/IBarLineScatterCandleBubbleDataSet.d.ts +1 -3
- package/interfaces/datasets/IBubbleDataSet.d.ts +3 -9
- package/interfaces/datasets/ICandleDataSet.d.ts +44 -41
- package/interfaces/datasets/IDataSet.d.ts +35 -151
- package/interfaces/datasets/ILineDataSet.d.ts +15 -54
- package/interfaces/datasets/ILineRadarDataSet.d.ts +7 -28
- package/interfaces/datasets/ILineScatterCandleRadarDataSet.d.ts +5 -4
- package/interfaces/datasets/IPieDataSet.d.ts +22 -40
- package/interfaces/datasets/IRadarDataSet.d.ts +7 -13
- package/interfaces/datasets/IScatterDataSet.d.ts +17 -16
- package/jobs/AnimatedMoveViewJob.d.ts +3 -0
- package/jobs/AnimatedMoveViewJob.js +12 -8
- package/jobs/AnimatedMoveViewJob.js.map +1 -1
- package/jobs/AnimatedViewPortJob.d.ts +7 -8
- package/jobs/AnimatedViewPortJob.js +16 -23
- package/jobs/AnimatedViewPortJob.js.map +1 -1
- package/jobs/AnimatedZoomJob.d.ts +8 -5
- package/jobs/AnimatedZoomJob.js +30 -26
- package/jobs/AnimatedZoomJob.js.map +1 -1
- package/jobs/MoveViewJob.d.ts +3 -0
- package/jobs/MoveViewJob.js +10 -7
- package/jobs/MoveViewJob.js.map +1 -1
- package/jobs/ViewPortJob.d.ts +3 -5
- package/jobs/ViewPortJob.js +5 -11
- package/jobs/ViewPortJob.js.map +1 -1
- package/jobs/ZoomJob.js +14 -14
- package/jobs/ZoomJob.js.map +1 -1
- package/listener/BarLineChartTouchListener.d.ts +82 -1
- package/listener/BarLineChartTouchListener.js +169 -67
- package/listener/BarLineChartTouchListener.js.map +1 -1
- package/listener/ChartTouchListener.d.ts +39 -5
- package/listener/ChartTouchListener.js +38 -11
- package/listener/ChartTouchListener.js.map +1 -1
- package/listener/PieRadarChartTouchListener.d.ts +56 -1
- package/listener/PieRadarChartTouchListener.js +201 -17
- package/listener/PieRadarChartTouchListener.js.map +1 -1
- package/model/GradientColor.js.map +1 -1
- package/package.json +23 -15
- package/renderer/AxisRenderer.d.ts +66 -7
- package/renderer/AxisRenderer.js +69 -21
- package/renderer/AxisRenderer.js.map +1 -1
- package/renderer/BarChartRenderer.d.ts +11 -0
- package/renderer/BarChartRenderer.js +99 -71
- package/renderer/BarChartRenderer.js.map +1 -1
- package/renderer/BarLineScatterCandleBubbleRenderer.d.ts +37 -0
- package/renderer/BarLineScatterCandleBubbleRenderer.js +36 -8
- package/renderer/BarLineScatterCandleBubbleRenderer.js.map +1 -1
- package/renderer/BubbleChartRenderer.d.ts +6 -2
- package/renderer/BubbleChartRenderer.js +51 -40
- package/renderer/BubbleChartRenderer.js.map +1 -1
- package/renderer/CandleStickChartRenderer.d.ts +1 -1
- package/renderer/CandleStickChartRenderer.js +64 -50
- package/renderer/CandleStickChartRenderer.js.map +1 -1
- package/renderer/CombinedChartRenderer.d.ts +20 -1
- package/renderer/CombinedChartRenderer.js +72 -42
- package/renderer/CombinedChartRenderer.js.map +1 -1
- package/renderer/DataRenderer.d.ts +78 -4
- package/renderer/DataRenderer.js +65 -6
- package/renderer/DataRenderer.js.map +1 -1
- package/renderer/HorizontalBarChartRenderer.d.ts +5 -2
- package/renderer/HorizontalBarChartRenderer.js +87 -66
- package/renderer/HorizontalBarChartRenderer.js.map +1 -1
- package/renderer/LegendRenderer.d.ts +32 -0
- package/renderer/LegendRenderer.js +98 -59
- package/renderer/LegendRenderer.js.map +1 -1
- package/renderer/LineChartRenderer.d.ts +38 -1
- package/renderer/LineChartRenderer.js +185 -110
- package/renderer/LineChartRenderer.js.map +1 -1
- package/renderer/LineRadarRenderer.d.ts +19 -0
- package/renderer/LineRadarRenderer.js +25 -1
- package/renderer/LineRadarRenderer.js.map +1 -1
- package/renderer/LineScatterCandleRadarRenderer.d.ts +11 -0
- package/renderer/LineScatterCandleRadarRenderer.js +26 -9
- package/renderer/LineScatterCandleRadarRenderer.js.map +1 -1
- package/renderer/PieChartRenderer.d.ts +45 -1
- package/renderer/PieChartRenderer.js +195 -122
- package/renderer/PieChartRenderer.js.map +1 -1
- package/renderer/RadarChartRenderer.d.ts +10 -0
- package/renderer/RadarChartRenderer.js +119 -77
- package/renderer/RadarChartRenderer.js.map +1 -1
- package/renderer/Renderer.d.ts +8 -0
- package/renderer/Renderer.js +5 -0
- package/renderer/Renderer.js.map +1 -1
- package/renderer/ScatterChartRenderer.d.ts +5 -5
- package/renderer/ScatterChartRenderer.js +51 -37
- package/renderer/ScatterChartRenderer.js.map +1 -1
- package/renderer/XAxisRenderer.d.ts +29 -4
- package/renderer/XAxisRenderer.js +128 -95
- package/renderer/XAxisRenderer.js.map +1 -1
- package/renderer/XAxisRendererHorizontalBarChart.d.ts +11 -0
- package/renderer/XAxisRendererHorizontalBarChart.js +75 -57
- package/renderer/XAxisRendererHorizontalBarChart.js.map +1 -1
- package/renderer/XAxisRendererRadarChart.d.ts +5 -0
- package/renderer/XAxisRendererRadarChart.js +26 -13
- package/renderer/XAxisRendererRadarChart.js.map +1 -1
- package/renderer/YAxisRenderer.d.ts +42 -5
- package/renderer/YAxisRenderer.js +126 -69
- package/renderer/YAxisRenderer.js.map +1 -1
- package/renderer/YAxisRendererHorizontalBarChart.d.ts +22 -1
- package/renderer/YAxisRendererHorizontalBarChart.js +80 -58
- package/renderer/YAxisRendererHorizontalBarChart.js.map +1 -1
- package/renderer/YAxisRendererRadarChart.js +62 -32
- package/renderer/YAxisRendererRadarChart.js.map +1 -1
- package/renderer/scatter/ChevronDownShapeRenderer.d.ts +4 -0
- package/renderer/scatter/ChevronDownShapeRenderer.js +5 -1
- package/renderer/scatter/ChevronDownShapeRenderer.js.map +1 -1
- package/renderer/scatter/ChevronUpShapeRenderer.d.ts +4 -0
- package/renderer/scatter/ChevronUpShapeRenderer.js +5 -1
- package/renderer/scatter/ChevronUpShapeRenderer.js.map +1 -1
- package/renderer/scatter/CircleShapeRenderer.d.ts +4 -0
- package/renderer/scatter/CircleShapeRenderer.js +8 -5
- package/renderer/scatter/CircleShapeRenderer.js.map +1 -1
- package/renderer/scatter/CrossShapeRenderer.d.ts +4 -0
- package/renderer/scatter/CrossShapeRenderer.js +5 -1
- package/renderer/scatter/CrossShapeRenderer.js.map +1 -1
- package/renderer/scatter/IShapeRenderer.d.ts +14 -0
- package/renderer/scatter/IShapeRenderer.js.map +1 -1
- package/renderer/scatter/SquareShapeRenderer.d.ts +4 -0
- package/renderer/scatter/SquareShapeRenderer.js +8 -5
- package/renderer/scatter/SquareShapeRenderer.js.map +1 -1
- package/renderer/scatter/TriangleShapeRenderer.d.ts +4 -0
- package/renderer/scatter/TriangleShapeRenderer.js +9 -5
- package/renderer/scatter/TriangleShapeRenderer.js.map +1 -1
- package/renderer/scatter/XShapeRenderer.d.ts +4 -0
- package/renderer/scatter/XShapeRenderer.js +5 -1
- package/renderer/scatter/XShapeRenderer.js.map +1 -1
- package/utils/ColorTemplate.d.ts +21 -1
- package/utils/ColorTemplate.js +21 -3
- package/utils/ColorTemplate.js.map +1 -1
- package/utils/HorizontalViewPortHandler.d.ts +3 -0
- package/utils/HorizontalViewPortHandler.js +3 -0
- package/utils/HorizontalViewPortHandler.js.map +1 -1
- package/utils/MPSize.d.ts +7 -0
- package/utils/ObjectPool.d.ts +56 -0
- package/utils/ObjectPool.js +66 -8
- package/utils/ObjectPool.js.map +1 -1
- package/utils/Transformer.d.ts +118 -0
- package/utils/Transformer.js +141 -7
- package/utils/Transformer.js.map +1 -1
- package/utils/TransformerHorizontalBarChart.d.ts +10 -0
- package/utils/TransformerHorizontalBarChart.js +18 -2
- package/utils/TransformerHorizontalBarChart.js.map +1 -1
- package/utils/Utils.d.ts +139 -17
- package/utils/Utils.js +185 -60
- package/utils/Utils.js.map +1 -1
- package/utils/ViewPortHandler.d.ts +234 -19
- package/utils/ViewPortHandler.js +306 -63
- package/utils/ViewPortHandler.js.map +1 -1
- package/utils/colors/colorful.js.map +1 -1
- package/utils/colors/joyful.js.map +1 -1
- package/utils/colors/liberty.js.map +1 -1
- package/utils/colors/material.js.map +1 -1
- package/utils/colors/pastel.js.map +1 -1
- package/utils/colors/vordiplom.js.map +1 -1
- package/charts/index.d.ts +0 -11
- package/charts/index.js +0 -15
- package/charts/index.js.map +0 -1
|
@@ -12,9 +12,13 @@ function almostEquals(x, y, epsilon) {
|
|
|
12
12
|
return Math.abs(x - y) < epsilon;
|
|
13
13
|
}
|
|
14
14
|
function _isPointInArea(point, area, margin = 0.5) {
|
|
15
|
+
// margin - default is to match rounded decimals
|
|
15
16
|
return point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;
|
|
16
17
|
}
|
|
17
18
|
export function splineCurve(firstPoint, middlePoint, afterPoint, tension) {
|
|
19
|
+
// Props to Rob Spencer at scaled innovation for his post on splining between points
|
|
20
|
+
// http://scaledinnovation.com/analytics/splines/aboutSplines.html
|
|
21
|
+
// This function must also respect "skipped" points
|
|
18
22
|
const previous = firstPoint;
|
|
19
23
|
const current = middlePoint;
|
|
20
24
|
const next = afterPoint;
|
|
@@ -22,9 +26,10 @@ export function splineCurve(firstPoint, middlePoint, afterPoint, tension) {
|
|
|
22
26
|
const d12 = distanceBetweenPoints(next, current);
|
|
23
27
|
let s01 = d01 / (d01 + d12);
|
|
24
28
|
let s12 = d12 / (d01 + d12);
|
|
29
|
+
// If all points are the same, s01 & s02 will be inf
|
|
25
30
|
s01 = isNaN(s01) ? 0 : s01;
|
|
26
31
|
s12 = isNaN(s12) ? 0 : s12;
|
|
27
|
-
const fa = tension * s01;
|
|
32
|
+
const fa = tension * s01; // scaling factor for triangle Ta
|
|
28
33
|
const fb = tension * s12;
|
|
29
34
|
return {
|
|
30
35
|
previous: {
|
|
@@ -40,16 +45,24 @@ export function splineCurve(firstPoint, middlePoint, afterPoint, tension) {
|
|
|
40
45
|
function getXYValue(dataSet, index) {
|
|
41
46
|
const yKey = dataSet.yProperty;
|
|
42
47
|
const entry = dataSet.getEntryForIndex(index);
|
|
43
|
-
|
|
48
|
+
const yVal = entry[yKey];
|
|
49
|
+
if (yVal === undefined || yVal === null) {
|
|
44
50
|
return null;
|
|
45
51
|
}
|
|
46
52
|
return { x: dataSet.getEntryXValue(entry, index), y: entry[yKey] };
|
|
47
53
|
}
|
|
54
|
+
// fix drawing "too" thin paths on iOS
|
|
48
55
|
export class DataSetImageCache {
|
|
56
|
+
/**
|
|
57
|
+
* Sets up the cache, returns true if a change of cache was required.
|
|
58
|
+
*
|
|
59
|
+
* @param set
|
|
60
|
+
* @return
|
|
61
|
+
*/
|
|
49
62
|
init(set) {
|
|
50
|
-
const size = set.
|
|
63
|
+
const size = set.circleColors.length || 1;
|
|
51
64
|
let changeRequired = false;
|
|
52
|
-
if (this.circleBitmaps
|
|
65
|
+
if (!this.circleBitmaps) {
|
|
53
66
|
this.circleBitmaps = [];
|
|
54
67
|
changeRequired = true;
|
|
55
68
|
}
|
|
@@ -59,22 +72,34 @@ export class DataSetImageCache {
|
|
|
59
72
|
}
|
|
60
73
|
return changeRequired;
|
|
61
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Fills the cache with bitmaps for the given dataset.
|
|
77
|
+
*
|
|
78
|
+
* @param set
|
|
79
|
+
* @param drawCircleHole
|
|
80
|
+
* @param drawTransparentCircleHole
|
|
81
|
+
*/
|
|
62
82
|
fill(set, renderPaint, circlePaintInner, drawCircleHole, drawTransparentCircleHole) {
|
|
63
|
-
const colorCount = set.
|
|
64
|
-
const circleRadius = set.
|
|
65
|
-
const circleHoleRadius = set.
|
|
83
|
+
const colorCount = set.circleColors.length || 1;
|
|
84
|
+
const circleRadius = set.circleRadius;
|
|
85
|
+
const circleHoleRadius = set.circleHoleRadius;
|
|
66
86
|
const scale = set.circleHighRes ? Screen.mainScreen.scale : 1;
|
|
67
87
|
for (let i = 0; i < colorCount; i++) {
|
|
68
88
|
const canvas = new Canvas(Math.round(circleRadius * 2 * scale), Math.round(circleRadius * 2 * scale));
|
|
69
89
|
canvas.scale(scale, scale);
|
|
70
|
-
renderPaint.setColor(set.
|
|
90
|
+
renderPaint.setColor(set.circleColors[i] || set.color);
|
|
71
91
|
if (drawTransparentCircleHole) {
|
|
72
92
|
const circlePathBuffer = Utils.getTempPath();
|
|
93
|
+
// Begin path for circle with hole
|
|
73
94
|
circlePathBuffer.reset();
|
|
95
|
+
// const oldType = circlePathBuffer.getFillType();
|
|
74
96
|
circlePathBuffer.setFillType(FillType.EVEN_ODD);
|
|
75
97
|
circlePathBuffer.addCircle(circleRadius, circleRadius, circleRadius, Direction.CW);
|
|
98
|
+
// Cut hole in path
|
|
76
99
|
circlePathBuffer.addCircle(circleRadius, circleRadius, circleHoleRadius, Direction.CCW);
|
|
100
|
+
// Fill in-between
|
|
77
101
|
canvas.drawPath(circlePathBuffer, renderPaint);
|
|
102
|
+
// circlePathBuffer.setFillType(oldType);
|
|
78
103
|
}
|
|
79
104
|
else {
|
|
80
105
|
canvas.drawCircle(circleRadius, circleRadius, circleRadius, renderPaint);
|
|
@@ -85,22 +110,34 @@ export class DataSetImageCache {
|
|
|
85
110
|
this.circleBitmaps[i] = canvas.getImage();
|
|
86
111
|
}
|
|
87
112
|
}
|
|
113
|
+
/**
|
|
114
|
+
* Returns the cached Bitmap at the given index.
|
|
115
|
+
*
|
|
116
|
+
* @param index
|
|
117
|
+
* @return
|
|
118
|
+
*/
|
|
88
119
|
getBitmap(index) {
|
|
89
120
|
return this.circleBitmaps[index % this.circleBitmaps.length];
|
|
90
121
|
}
|
|
91
122
|
}
|
|
92
123
|
export class LineChartRenderer extends LineRadarRenderer {
|
|
93
|
-
constructor(chart, animator, viewPortHandler) {
|
|
94
|
-
super(animator, viewPortHandler);
|
|
95
|
-
this.mImageCaches = new Map();
|
|
96
|
-
this.mChart = chart;
|
|
97
|
-
}
|
|
98
124
|
get fillPath() {
|
|
99
125
|
if (!LineChartRenderer.mFillPath) {
|
|
100
126
|
LineChartRenderer.mFillPath = new Path();
|
|
101
127
|
}
|
|
102
128
|
return LineChartRenderer.mFillPath;
|
|
103
129
|
}
|
|
130
|
+
constructor(chart, animator, viewPortHandler) {
|
|
131
|
+
super(animator, viewPortHandler);
|
|
132
|
+
/**
|
|
133
|
+
* cache for the circle bitmaps of all datasets
|
|
134
|
+
*/
|
|
135
|
+
this.mImageCaches = new Map();
|
|
136
|
+
this.mChart = chart;
|
|
137
|
+
// if (__ANDROID__) {
|
|
138
|
+
// this.mBitmapConfig = android.graphics.Bitmap.Config.ARGB_8888;
|
|
139
|
+
// }
|
|
140
|
+
}
|
|
104
141
|
get circlePaintInner() {
|
|
105
142
|
if (!this.mCirclePaintInner) {
|
|
106
143
|
this.mCirclePaintInner = Utils.getTemplatePaint('white-fill');
|
|
@@ -108,10 +145,10 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
108
145
|
return this.mCirclePaintInner;
|
|
109
146
|
}
|
|
110
147
|
drawData(c) {
|
|
111
|
-
const width = this.mViewPortHandler.
|
|
112
|
-
const height = this.mViewPortHandler.
|
|
113
|
-
let drawBitmap = this.mDrawBitmap
|
|
114
|
-
if (drawBitmap
|
|
148
|
+
const width = this.mViewPortHandler.chartWidth;
|
|
149
|
+
const height = this.mViewPortHandler.chartHeight;
|
|
150
|
+
let drawBitmap = this.mDrawBitmap?.get();
|
|
151
|
+
if (!drawBitmap || drawBitmap.width !== width || drawBitmap.height !== height) {
|
|
115
152
|
if (width > 0 && height > 0) {
|
|
116
153
|
this.mBitmapCanvas = new Canvas(width, height);
|
|
117
154
|
drawBitmap = this.mBitmapCanvas.getImage();
|
|
@@ -123,9 +160,9 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
123
160
|
else {
|
|
124
161
|
this.mBitmapCanvas.clear();
|
|
125
162
|
}
|
|
126
|
-
const lineData = this.mChart.
|
|
163
|
+
const lineData = this.mChart.lineData;
|
|
127
164
|
let needsBitmapDrawing = false;
|
|
128
|
-
for (const set of lineData.
|
|
165
|
+
for (const set of lineData.visibleDataSets) {
|
|
129
166
|
needsBitmapDrawing = this.drawDataSet(c, set) || needsBitmapDrawing;
|
|
130
167
|
}
|
|
131
168
|
if (needsBitmapDrawing) {
|
|
@@ -134,11 +171,11 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
134
171
|
}
|
|
135
172
|
}
|
|
136
173
|
drawDataSet(c, dataSet) {
|
|
137
|
-
if (dataSet.
|
|
174
|
+
if (dataSet.entryCount < 1)
|
|
138
175
|
return false;
|
|
139
176
|
const renderPaint = this.renderPaint;
|
|
140
|
-
renderPaint.setStrokeWidth(dataSet.
|
|
141
|
-
renderPaint.setPathEffect(dataSet.
|
|
177
|
+
renderPaint.setStrokeWidth(dataSet.lineWidth);
|
|
178
|
+
renderPaint.setPathEffect(dataSet.dashPathEffect);
|
|
142
179
|
renderPaint.setColor(dataSet.getColor());
|
|
143
180
|
renderPaint.setStyle(Style.STROKE);
|
|
144
181
|
const scaleX = this.mViewPortHandler.getScaleX();
|
|
@@ -150,15 +187,22 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
150
187
|
generateHorizontalBezierPath(dataSet, outputPath) {
|
|
151
188
|
if (this.mXBounds.range >= 1) {
|
|
152
189
|
const pointsPerEntryPair = 6;
|
|
153
|
-
const entryCount = dataSet.
|
|
190
|
+
const entryCount = dataSet.entryCount;
|
|
154
191
|
if (!this.mLineBuffer || this.mLineBuffer.length < Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2) {
|
|
155
192
|
this.mLineBuffer = Utils.createArrayBuffer(Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2);
|
|
156
193
|
}
|
|
157
|
-
const phaseY = this.
|
|
194
|
+
const phaseY = this.animator.phaseY;
|
|
158
195
|
const yKey = dataSet.yProperty;
|
|
159
|
-
|
|
196
|
+
let firstIndex = Math.max(0, this.mXBounds.min);
|
|
197
|
+
// let firstIndex = this.mXBounds.min + 1;
|
|
160
198
|
const lastIndex = this.mXBounds.min + this.mXBounds.range;
|
|
161
199
|
let prev = dataSet.getEntryForIndex(firstIndex);
|
|
200
|
+
let yVal = prev[yKey];
|
|
201
|
+
while (firstIndex < lastIndex && (yVal === undefined || yVal === null)) {
|
|
202
|
+
firstIndex++;
|
|
203
|
+
prev = dataSet.getEntryForIndex(firstIndex);
|
|
204
|
+
yVal = prev[yKey];
|
|
205
|
+
}
|
|
162
206
|
let prevXVal = dataSet.getEntryXValue(prev, firstIndex);
|
|
163
207
|
let cur = prev;
|
|
164
208
|
let curXVal = prevXVal;
|
|
@@ -166,9 +210,11 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
166
210
|
let index = 0;
|
|
167
211
|
float32arr[index++] = prevXVal;
|
|
168
212
|
float32arr[index++] = cur[yKey] * phaseY;
|
|
213
|
+
// let the spline start
|
|
169
214
|
for (let j = firstIndex + 1; j <= lastIndex; j++) {
|
|
170
215
|
const newEntry = dataSet.getEntryForIndex(j);
|
|
171
|
-
|
|
216
|
+
const yVal = newEntry[yKey];
|
|
217
|
+
if (yVal === undefined || yVal === null) {
|
|
172
218
|
continue;
|
|
173
219
|
}
|
|
174
220
|
prev = cur;
|
|
@@ -200,15 +246,20 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
200
246
|
generateCubicPath(dataSet, outputPath) {
|
|
201
247
|
if (this.mXBounds.range >= 1) {
|
|
202
248
|
const pointsPerEntryPair = 6;
|
|
203
|
-
const entryCount = dataSet.
|
|
249
|
+
const entryCount = dataSet.entryCount;
|
|
204
250
|
if (!this.mLineBuffer || this.mLineBuffer.length < Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2) {
|
|
205
251
|
this.mLineBuffer = Utils.createArrayBuffer(Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2);
|
|
206
252
|
}
|
|
207
|
-
const phaseY = this.
|
|
253
|
+
const phaseY = this.animator.phaseY;
|
|
208
254
|
const xKey = dataSet.xProperty;
|
|
209
255
|
const yKey = dataSet.yProperty;
|
|
210
|
-
const intensity = dataSet.
|
|
256
|
+
const intensity = dataSet.cubicIntensity;
|
|
257
|
+
// Take an extra polet from the left, and an extra from the right.
|
|
258
|
+
// That's because we need 4 points for a cubic bezier (cubic=4), otherwise we get lines moving and doing weird stuff on the edges of the chart.
|
|
259
|
+
// So in the starting `prev` and `cur`, go -2, -1
|
|
260
|
+
// And in the `lastIndex`, add +1
|
|
211
261
|
const firstIndex = Math.max(0, this.mXBounds.min);
|
|
262
|
+
// let firstIndex = this.mXBounds.min + 1;
|
|
212
263
|
const lastIndex = this.mXBounds.min + this.mXBounds.range;
|
|
213
264
|
const float32arr = this.mLineBuffer;
|
|
214
265
|
let index = 0;
|
|
@@ -221,21 +272,21 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
221
272
|
for (let j = firstIndex; j <= lastIndex; j++) {
|
|
222
273
|
point = getXYValue(dataSet, j);
|
|
223
274
|
if (!point) {
|
|
224
|
-
if (j === 0) {
|
|
225
|
-
|
|
226
|
-
}
|
|
275
|
+
// if (j === 0) {
|
|
276
|
+
// return [];
|
|
277
|
+
// }
|
|
227
278
|
continue;
|
|
228
279
|
}
|
|
229
280
|
if (!prev) {
|
|
230
281
|
prev = point;
|
|
231
282
|
}
|
|
232
|
-
nextIndex = j + 1 < dataSet.
|
|
283
|
+
nextIndex = j + 1 < dataSet.entryCount ? j + 1 : j;
|
|
233
284
|
next = getXYValue(dataSet, nextIndex);
|
|
234
285
|
if (!next) {
|
|
235
286
|
continue;
|
|
236
287
|
}
|
|
237
288
|
controlPoints = splineCurve(prev, point, next, intensity);
|
|
238
|
-
if (j ===
|
|
289
|
+
if (j === firstIndex) {
|
|
239
290
|
float32arr[index++] = point.x;
|
|
240
291
|
float32arr[index++] = point.y * phaseY;
|
|
241
292
|
}
|
|
@@ -266,26 +317,38 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
266
317
|
}
|
|
267
318
|
generateLinearPath(dataSet, outputPath) {
|
|
268
319
|
if (this.mXBounds.range >= 1) {
|
|
269
|
-
const isDrawSteppedEnabled = dataSet.
|
|
270
|
-
const entryCount = dataSet.
|
|
320
|
+
const isDrawSteppedEnabled = dataSet.mode === Mode.STEPPED;
|
|
321
|
+
const entryCount = dataSet.entryCount;
|
|
271
322
|
const pointsPerEntryPair = isDrawSteppedEnabled ? 4 : 2;
|
|
272
323
|
if (!this.mLineBuffer || this.mLineBuffer.length < Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2) {
|
|
273
324
|
this.mLineBuffer = Utils.createArrayBuffer(Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2);
|
|
274
325
|
}
|
|
275
|
-
const
|
|
326
|
+
const phaseX = this.animator.phaseX;
|
|
327
|
+
const phaseY = this.animator.phaseY;
|
|
276
328
|
const yKey = dataSet.yProperty;
|
|
277
|
-
const
|
|
329
|
+
// const filled = outputPath;
|
|
330
|
+
// outputPath.reset();
|
|
331
|
+
let firstIndex = Math.max(0, this.mXBounds.min);
|
|
278
332
|
const lastIndex = this.mXBounds.min + this.mXBounds.range;
|
|
279
|
-
|
|
280
|
-
|
|
333
|
+
let firstEntry = dataSet.getEntryForIndex(firstIndex);
|
|
334
|
+
let entryXVal = dataSet.getEntryXValue(firstEntry, firstIndex);
|
|
335
|
+
let yVal = firstEntry[yKey];
|
|
336
|
+
while (firstIndex < lastIndex && (yVal === undefined || yVal === null)) {
|
|
337
|
+
firstIndex++;
|
|
338
|
+
firstEntry = dataSet.getEntryForIndex(firstIndex);
|
|
339
|
+
entryXVal = dataSet.getEntryXValue(firstEntry, firstIndex);
|
|
340
|
+
yVal = firstEntry[yKey];
|
|
341
|
+
}
|
|
281
342
|
const float32arr = this.mLineBuffer;
|
|
282
343
|
float32arr[0] = entryXVal;
|
|
283
|
-
float32arr[1] =
|
|
344
|
+
float32arr[1] = firstEntry[yKey] * phaseY;
|
|
284
345
|
let index = 2;
|
|
346
|
+
// create a new path
|
|
285
347
|
let currentEntry = null;
|
|
286
348
|
let currentEntryXVal;
|
|
287
349
|
let currentEntryYVal;
|
|
288
350
|
let previousEntryYVal;
|
|
351
|
+
// doing the if test outside is much much faster on big data
|
|
289
352
|
if (isDrawSteppedEnabled) {
|
|
290
353
|
for (let x = firstIndex + 1; x <= lastIndex; x++) {
|
|
291
354
|
currentEntry = dataSet.getEntryForIndex(x);
|
|
@@ -338,19 +401,20 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
338
401
|
const firstIndex = Math.max(0, this.mXBounds.min);
|
|
339
402
|
const range = this.mXBounds.range;
|
|
340
403
|
const lastIndex = firstIndex + range;
|
|
341
|
-
const width = this.mViewPortHandler.
|
|
342
|
-
const chartRect = this.mViewPortHandler.
|
|
404
|
+
const width = this.mViewPortHandler.chartWidth;
|
|
405
|
+
const chartRect = this.mViewPortHandler.chartRect;
|
|
343
406
|
let lastColor;
|
|
344
407
|
const gradientDelta = 0;
|
|
345
408
|
const posDelta = gradientDelta / width;
|
|
346
409
|
for (let index = 0; index < nbColors; index++) {
|
|
347
410
|
const color = colors[index];
|
|
348
411
|
let colorIndex = color[xKey || 'index'];
|
|
412
|
+
// if filtered we need to get the real index
|
|
349
413
|
if (dataSet.isFiltered()) {
|
|
350
414
|
dataSet.setIgnoreFiltered(true);
|
|
351
415
|
const entry = dataSet.getEntryForIndex(colorIndex);
|
|
352
416
|
dataSet.setIgnoreFiltered(false);
|
|
353
|
-
if (entry
|
|
417
|
+
if (entry) {
|
|
354
418
|
colorIndex = dataSet.getEntryIndexForXValue(dataSet.getEntryXValue(entry, colorIndex), NaN, Rounding.CLOSEST);
|
|
355
419
|
}
|
|
356
420
|
}
|
|
@@ -395,16 +459,16 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
395
459
|
}
|
|
396
460
|
draw(c, dataSet) {
|
|
397
461
|
const result = false;
|
|
398
|
-
const drawFilled = dataSet.
|
|
399
|
-
const drawLine = dataSet.
|
|
462
|
+
const drawFilled = dataSet.drawFilledEnabled;
|
|
463
|
+
const drawLine = dataSet.lineWidth > 0;
|
|
400
464
|
if (!drawFilled && !drawLine) {
|
|
401
465
|
return result;
|
|
402
466
|
}
|
|
403
|
-
const trans = this.mChart.getTransformer(dataSet.
|
|
467
|
+
const trans = this.mChart.getTransformer(dataSet.axisDependency);
|
|
404
468
|
const linePath = Utils.getTempPath();
|
|
405
|
-
this.mXBounds.set(this.mChart, dataSet, this.
|
|
469
|
+
this.mXBounds.set(this.mChart, dataSet, this.animator);
|
|
406
470
|
let points;
|
|
407
|
-
switch (dataSet.
|
|
471
|
+
switch (dataSet.mode) {
|
|
408
472
|
default:
|
|
409
473
|
case Mode.LINEAR:
|
|
410
474
|
case Mode.STEPPED:
|
|
@@ -420,16 +484,17 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
420
484
|
if (!points) {
|
|
421
485
|
return result;
|
|
422
486
|
}
|
|
423
|
-
const colors = dataSet.
|
|
487
|
+
const colors = dataSet.colors;
|
|
424
488
|
const nbColors = colors.length;
|
|
425
489
|
const renderPaint = this.renderPaint;
|
|
426
490
|
let paintColorsShader;
|
|
427
491
|
if (nbColors > 0) {
|
|
492
|
+
// TODO: we transforms points in there. Could be dangerous if used after
|
|
428
493
|
paintColorsShader = this.getMultiColorsShader(colors, points, trans, dataSet);
|
|
429
494
|
}
|
|
430
495
|
let oldShader;
|
|
431
496
|
if (drawFilled) {
|
|
432
|
-
const useColorsForFill = dataSet.
|
|
497
|
+
const useColorsForFill = dataSet.useColorsForFill;
|
|
433
498
|
if (paintColorsShader && useColorsForFill) {
|
|
434
499
|
oldShader = renderPaint.getShader();
|
|
435
500
|
renderPaint.setShader(paintColorsShader);
|
|
@@ -440,12 +505,13 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
440
505
|
const minEntryValue = dataSet.getEntryXValue(dataSet.getEntryForIndex(this.mXBounds.min), this.mXBounds.min);
|
|
441
506
|
const maxEntryValue = dataSet.getEntryXValue(dataSet.getEntryForIndex(this.mXBounds.min + this.mXBounds.range), this.mXBounds.min + this.mXBounds.range);
|
|
442
507
|
this.drawFill(c, dataSet, fillPath, trans, minEntryValue, maxEntryValue);
|
|
508
|
+
this.lastLinePath = linePath;
|
|
443
509
|
if (paintColorsShader && useColorsForFill) {
|
|
444
510
|
renderPaint.setShader(oldShader);
|
|
445
511
|
oldShader = null;
|
|
446
512
|
}
|
|
447
513
|
}
|
|
448
|
-
const customRender = this.mChart.
|
|
514
|
+
const customRender = this.mChart.customRenderer;
|
|
449
515
|
if (drawLine) {
|
|
450
516
|
const useColorsForLine = dataSet.useColorsForLine;
|
|
451
517
|
if (paintColorsShader && useColorsForLine) {
|
|
@@ -475,38 +541,45 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
475
541
|
}
|
|
476
542
|
}
|
|
477
543
|
drawFill(c, dataSet, spline, trans, min, max, color, fillMin) {
|
|
478
|
-
|
|
479
|
-
|
|
544
|
+
const fillFormatter = dataSet.fillFormatter;
|
|
545
|
+
if (fillFormatter.getFillLinePath) {
|
|
546
|
+
fillFormatter.getFillLinePath(dataSet, this.mChart, spline, this.lastLinePath);
|
|
547
|
+
}
|
|
548
|
+
else if (fillMin === undefined) {
|
|
549
|
+
fillMin = fillFormatter.getFillLinePosition(dataSet, this.mChart);
|
|
550
|
+
spline.lineTo(max, fillMin);
|
|
551
|
+
spline.lineTo(min, fillMin);
|
|
552
|
+
spline.close();
|
|
480
553
|
}
|
|
481
|
-
spline.lineTo(max, fillMin);
|
|
482
|
-
spline.lineTo(min, fillMin);
|
|
483
|
-
spline.close();
|
|
484
554
|
trans && trans.pathValueToPixel(spline);
|
|
485
|
-
const drawable = dataSet.
|
|
486
|
-
if (drawable
|
|
487
|
-
this.drawFilledPathBitmap(c, spline, drawable, dataSet.
|
|
555
|
+
const drawable = dataSet.fillDrawable;
|
|
556
|
+
if (drawable) {
|
|
557
|
+
this.drawFilledPathBitmap(c, spline, drawable, dataSet.fillShader);
|
|
488
558
|
}
|
|
489
559
|
else {
|
|
490
|
-
this.drawFilledPath(c, spline, color || dataSet.
|
|
560
|
+
this.drawFilledPath(c, spline, color || dataSet.fillColor, dataSet.fillAlpha, dataSet.fillShader);
|
|
491
561
|
}
|
|
492
562
|
}
|
|
493
563
|
drawValuesForDataset(c, dataSet, dataSetIndex) {
|
|
494
564
|
const yKey = dataSet.yProperty;
|
|
565
|
+
// apply the text-styling defined by the DataSet
|
|
495
566
|
this.applyValueTextStyle(dataSet);
|
|
496
|
-
const
|
|
497
|
-
|
|
498
|
-
|
|
567
|
+
const chart = this.mChart;
|
|
568
|
+
const trans = chart.getTransformer(dataSet.axisDependency);
|
|
569
|
+
// make sure the values do not interfear with the circles
|
|
570
|
+
let valOffset = dataSet.circleRadius * 1.75;
|
|
571
|
+
if (!dataSet.drawCirclesEnabled)
|
|
499
572
|
valOffset = valOffset / 2;
|
|
500
|
-
this.mXBounds.set(
|
|
501
|
-
const { points, count } = trans.generateTransformedValues(dataSet, this.
|
|
502
|
-
const formatter = dataSet.
|
|
503
|
-
const iconsOffset = dataSet.
|
|
504
|
-
const valuesOffset = dataSet.
|
|
505
|
-
const drawIcons = dataSet.
|
|
506
|
-
const drawValues = dataSet.
|
|
573
|
+
this.mXBounds.set(chart, dataSet, this.animator);
|
|
574
|
+
const { points, count } = trans.generateTransformedValues(dataSet, this.animator.phaseX, this.animator.phaseY, this.mXBounds.min, this.mXBounds.max);
|
|
575
|
+
const formatter = dataSet.valueFormatter;
|
|
576
|
+
const iconsOffset = dataSet.iconsOffset;
|
|
577
|
+
const valuesOffset = dataSet.valuesOffset;
|
|
578
|
+
const drawIcons = dataSet.drawIconsEnabled;
|
|
579
|
+
const drawValues = dataSet.drawValuesEnabled;
|
|
507
580
|
const length = count;
|
|
508
581
|
const paint = this.valuePaint;
|
|
509
|
-
const customRender =
|
|
582
|
+
const customRender = chart.customRenderer;
|
|
510
583
|
for (let j = 0; j < length; j += 2) {
|
|
511
584
|
const x = points[j];
|
|
512
585
|
const y = points[j + 1];
|
|
@@ -518,24 +591,27 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
518
591
|
const entry = dataSet.getEntryForIndex(index);
|
|
519
592
|
if (!entry)
|
|
520
593
|
continue;
|
|
594
|
+
const yVal = entry[yKey];
|
|
595
|
+
if (yVal === undefined || yVal === null) {
|
|
596
|
+
continue;
|
|
597
|
+
}
|
|
521
598
|
if (drawValues) {
|
|
522
|
-
this.drawValue(c, formatter.getFormattedValue(
|
|
599
|
+
this.drawValue(c, chart, dataSet, dataSetIndex, entry, index, formatter.getFormattedValue(yVal, entry), valuesOffset.x + x, valuesOffset.y + y - valOffset, dataSet.getValueTextColor(j / 2), paint, customRender);
|
|
523
600
|
}
|
|
524
|
-
if (drawIcons
|
|
525
|
-
|
|
526
|
-
Utils.drawIcon(c, this.mChart, icon, x + iconsOffset.x, y + iconsOffset.y);
|
|
601
|
+
if (drawIcons) {
|
|
602
|
+
this.drawIcon(c, chart, dataSet, dataSetIndex, entry, index, dataSet.getEntryIcon(entry), x + iconsOffset.x, y + iconsOffset.y, customRender);
|
|
527
603
|
}
|
|
528
604
|
}
|
|
529
605
|
}
|
|
530
606
|
drawValues(c) {
|
|
531
|
-
const data = this.mChart.
|
|
532
|
-
const dataSets = data.
|
|
533
|
-
if (!this.isDrawingValuesAllowed(this.mChart) || dataSets.some((d) => d.
|
|
607
|
+
const data = this.mChart.lineData;
|
|
608
|
+
const dataSets = data.dataSets;
|
|
609
|
+
if (!this.isDrawingValuesAllowed(this.mChart) || dataSets.some((d) => d.drawValuesEnabled || d.drawIconsEnabled) === false) {
|
|
534
610
|
return;
|
|
535
611
|
}
|
|
536
612
|
for (let i = 0; i < dataSets.length; i++) {
|
|
537
613
|
const dataSet = dataSets[i];
|
|
538
|
-
if (!this.shouldDrawValues(dataSet) || dataSet.
|
|
614
|
+
if (!this.shouldDrawValues(dataSet) || dataSet.entryCount < 1)
|
|
539
615
|
continue;
|
|
540
616
|
this.drawValuesForDataset(c, dataSet, i);
|
|
541
617
|
}
|
|
@@ -545,15 +621,15 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
545
621
|
}
|
|
546
622
|
drawCirclesForDataset(c, dataSet) {
|
|
547
623
|
const paint = this.circlePaintInner;
|
|
548
|
-
paint.setColor(dataSet.
|
|
549
|
-
const phaseY = this.
|
|
624
|
+
paint.setColor(dataSet.circleHoleColor);
|
|
625
|
+
const phaseY = this.animator.phaseY;
|
|
550
626
|
const yKey = dataSet.yProperty;
|
|
551
|
-
const trans = this.mChart.getTransformer(dataSet.
|
|
552
|
-
this.mXBounds.set(this.mChart, dataSet, this.
|
|
553
|
-
const circleRadius = dataSet.
|
|
554
|
-
const circleHoleRadius = dataSet.
|
|
555
|
-
const drawCircleHole = dataSet.
|
|
556
|
-
const drawTransparentCircleHole = drawCircleHole && dataSet.
|
|
627
|
+
const trans = this.mChart.getTransformer(dataSet.axisDependency);
|
|
628
|
+
this.mXBounds.set(this.mChart, dataSet, this.animator);
|
|
629
|
+
const circleRadius = dataSet.circleRadius;
|
|
630
|
+
const circleHoleRadius = dataSet.circleHoleRadius;
|
|
631
|
+
const drawCircleHole = dataSet.drawCircleHoleEnabled && circleHoleRadius < circleRadius && circleHoleRadius > 0;
|
|
632
|
+
const drawTransparentCircleHole = drawCircleHole && dataSet.circleHoleColor === ColorTemplate.COLOR_NONE;
|
|
557
633
|
let imageCache;
|
|
558
634
|
if (this.mImageCaches.get(dataSet)) {
|
|
559
635
|
imageCache = this.mImageCaches.get(dataSet);
|
|
@@ -563,6 +639,7 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
563
639
|
this.mImageCaches.set(dataSet, imageCache);
|
|
564
640
|
}
|
|
565
641
|
const changeRequired = imageCache.init(dataSet);
|
|
642
|
+
// only fill the cache with new bitmaps if a change is required
|
|
566
643
|
if (changeRequired) {
|
|
567
644
|
const renderPaint = this.renderPaint;
|
|
568
645
|
imageCache.fill(dataSet, renderPaint, paint, drawCircleHole, drawTransparentCircleHole);
|
|
@@ -572,14 +649,15 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
572
649
|
const destRect = Utils.getTempRectF();
|
|
573
650
|
for (let j = this.mXBounds.min; j <= boundsRangeCount; j++) {
|
|
574
651
|
const e = dataSet.getEntryForIndex(j);
|
|
575
|
-
if (e
|
|
652
|
+
if (!e)
|
|
576
653
|
continue;
|
|
577
654
|
const yVal = e[yKey];
|
|
578
|
-
if (yVal
|
|
655
|
+
if (yVal === null || yVal === undefined)
|
|
579
656
|
continue;
|
|
580
657
|
circleBuffer[0] = dataSet.getEntryXValue(e, j);
|
|
581
658
|
circleBuffer[1] = yVal * phaseY;
|
|
582
659
|
trans.pointValuesToPixel(circleBuffer);
|
|
660
|
+
// native buffer access is slow
|
|
583
661
|
const cx = circleBuffer[0];
|
|
584
662
|
const cy = circleBuffer[1];
|
|
585
663
|
if (!this.mViewPortHandler.isInBoundsRight(cx))
|
|
@@ -587,15 +665,15 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
587
665
|
if (!this.mViewPortHandler.isInBoundsLeft(cx) || !this.mViewPortHandler.isInBoundsY(cy))
|
|
588
666
|
continue;
|
|
589
667
|
const circleBitmap = imageCache.getBitmap(j);
|
|
590
|
-
if (circleBitmap
|
|
668
|
+
if (circleBitmap) {
|
|
591
669
|
destRect.set(cx - circleRadius, cy - circleRadius, cx - circleRadius + 2 * circleRadius, cy - circleRadius + 2 * circleRadius);
|
|
592
670
|
c.drawBitmap(circleBitmap, null, destRect, null);
|
|
593
671
|
}
|
|
594
672
|
}
|
|
595
673
|
}
|
|
596
674
|
drawCircles(c) {
|
|
597
|
-
const dataSets = this.mChart.
|
|
598
|
-
if (dataSets.some((d) => d.
|
|
675
|
+
const dataSets = this.mChart.lineData.visibleDataSets;
|
|
676
|
+
if (dataSets.some((d) => d.drawCirclesEnabled) === false) {
|
|
599
677
|
return;
|
|
600
678
|
}
|
|
601
679
|
const renderPaint = this.renderPaint;
|
|
@@ -605,24 +683,25 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
605
683
|
circleBuffer[1] = 0;
|
|
606
684
|
for (let i = 0; i < dataSets.length; i++) {
|
|
607
685
|
const dataSet = dataSets[i];
|
|
608
|
-
if (!dataSet.
|
|
686
|
+
if (!dataSet.drawCirclesEnabled || dataSet.entryCount === 0)
|
|
609
687
|
continue;
|
|
610
688
|
this.drawCirclesForDataset(c, dataSet);
|
|
611
689
|
}
|
|
612
690
|
}
|
|
613
|
-
drawHighlighted(c, indices, actualDraw) {
|
|
614
|
-
const lineData = this.mChart.
|
|
615
|
-
const customRender = this.mChart.
|
|
691
|
+
drawHighlighted(c, indices, actualDraw = true) {
|
|
692
|
+
const lineData = this.mChart.lineData;
|
|
693
|
+
const customRender = this.mChart.customRenderer;
|
|
616
694
|
const paint = this.highlightPaint;
|
|
617
695
|
for (const high of indices) {
|
|
618
696
|
const set = lineData.getDataSetByIndex(high.dataSetIndex);
|
|
619
|
-
if (set
|
|
697
|
+
if (!set || !set.highlightEnabled)
|
|
620
698
|
continue;
|
|
621
699
|
const { entry, index } = lineData.getEntryAndIndexForHighlight(high);
|
|
700
|
+
// let e = set.getEntryForXValue(high.x high.y);
|
|
622
701
|
if (!this.isInBoundsX(entry, set))
|
|
623
702
|
continue;
|
|
624
703
|
const yKey = set.yProperty;
|
|
625
|
-
const pix = this.mChart.getTransformer(set.
|
|
704
|
+
const pix = this.mChart.getTransformer(set.axisDependency).getPixelForValues(set.getEntryXValue(entry, index), entry[yKey] * this.animator.phaseY);
|
|
626
705
|
high.drawX = pix.x;
|
|
627
706
|
high.drawY = pix.y;
|
|
628
707
|
if (!actualDraw) {
|
|
@@ -632,21 +711,23 @@ export class LineChartRenderer extends LineRadarRenderer {
|
|
|
632
711
|
customRender.drawHighlight(c, high, set, paint);
|
|
633
712
|
}
|
|
634
713
|
else {
|
|
635
|
-
this.drawHighlightLines(c,
|
|
714
|
+
this.drawHighlightLines(c, high.xPx, high.yPx, set);
|
|
636
715
|
}
|
|
637
716
|
}
|
|
638
717
|
}
|
|
718
|
+
/**
|
|
719
|
+
* Releases the drawing bitmap. This should be called when {@link LineChart#onDetachedFromWindow()}.
|
|
720
|
+
*/
|
|
639
721
|
releaseBitmap() {
|
|
640
|
-
if (this.mBitmapCanvas
|
|
722
|
+
if (this.mBitmapCanvas) {
|
|
641
723
|
this.mBitmapCanvas.setBitmap(null);
|
|
642
724
|
this.mBitmapCanvas = null;
|
|
643
725
|
}
|
|
644
|
-
if (this.mDrawBitmap
|
|
726
|
+
if (this.mDrawBitmap) {
|
|
645
727
|
const drawBitmap = this.mDrawBitmap.get();
|
|
646
|
-
if (drawBitmap
|
|
728
|
+
if (drawBitmap) {
|
|
647
729
|
releaseImage(drawBitmap);
|
|
648
730
|
}
|
|
649
|
-
this.mDrawBitmap.clear();
|
|
650
731
|
this.mDrawBitmap = null;
|
|
651
732
|
}
|
|
652
733
|
}
|
|
@@ -663,12 +744,6 @@ __decorate([
|
|
|
663
744
|
__decorate([
|
|
664
745
|
profile
|
|
665
746
|
], LineChartRenderer.prototype, "generateCubicPath", null);
|
|
666
|
-
__decorate([
|
|
667
|
-
profile
|
|
668
|
-
], LineChartRenderer.prototype, "generateLinearPath", null);
|
|
669
|
-
__decorate([
|
|
670
|
-
profile
|
|
671
|
-
], LineChartRenderer.prototype, "draw", null);
|
|
672
747
|
__decorate([
|
|
673
748
|
profile
|
|
674
749
|
], LineChartRenderer.prototype, "drawLines", null);
|