@nativescript-community/ui-chart 1.2.36 → 2.0.1

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.
Files changed (365) hide show
  1. package/README.md +6 -0
  2. package/animation/ChartAnimator.d.ts +47 -4
  3. package/animation/ChartAnimator.js +49 -11
  4. package/animation/ChartAnimator.js.map +1 -1
  5. package/animation/Tween.d.ts +1 -1
  6. package/animation/Tween.js +4 -2
  7. package/animation/Tween.js.map +1 -1
  8. package/buffer/AbstractBuffer.d.ts +28 -3
  9. package/buffer/AbstractBuffer.js +22 -3
  10. package/buffer/AbstractBuffer.js.map +1 -1
  11. package/buffer/BarBuffer.d.ts +8 -12
  12. package/buffer/BarBuffer.js +33 -36
  13. package/buffer/BarBuffer.js.map +1 -1
  14. package/buffer/HorizontalBarBuffer.js +13 -10
  15. package/buffer/HorizontalBarBuffer.js.map +1 -1
  16. package/charts/BarChart.d.ts +70 -15
  17. package/charts/BarChart.js +92 -63
  18. package/charts/BarChart.js.map +1 -1
  19. package/charts/BarLineChartBase.d.ts +494 -73
  20. package/charts/BarLineChartBase.js +788 -407
  21. package/charts/BarLineChartBase.js.map +1 -1
  22. package/charts/BubbleChart.d.ts +11 -5
  23. package/charts/BubbleChart.js +10 -8
  24. package/charts/BubbleChart.js.map +1 -1
  25. package/charts/CandleStickChart.d.ts +8 -5
  26. package/charts/CandleStickChart.js +9 -10
  27. package/charts/CandleStickChart.js.map +1 -1
  28. package/charts/Chart.d.ts +420 -91
  29. package/charts/Chart.js +590 -290
  30. package/charts/Chart.js.map +1 -1
  31. package/charts/CombinedChart.d.ts +59 -29
  32. package/charts/CombinedChart.js +74 -67
  33. package/charts/CombinedChart.js.map +1 -1
  34. package/charts/HorizontalBarChart.d.ts +37 -7
  35. package/charts/HorizontalBarChart.js +97 -59
  36. package/charts/HorizontalBarChart.js.map +1 -1
  37. package/charts/LineChart.d.ts +3 -5
  38. package/charts/LineChart.js +6 -10
  39. package/charts/LineChart.js.map +1 -1
  40. package/charts/PieChart.d.ts +218 -64
  41. package/charts/PieChart.js +278 -168
  42. package/charts/PieChart.js.map +1 -1
  43. package/charts/PieRadarChartBase.d.ts +107 -18
  44. package/charts/PieRadarChartBase.js +156 -73
  45. package/charts/PieRadarChartBase.js.map +1 -1
  46. package/charts/RadarChart.d.ts +75 -35
  47. package/charts/RadarChart.js +114 -103
  48. package/charts/RadarChart.js.map +1 -1
  49. package/charts/ScatterChart.d.ts +10 -5
  50. package/charts/ScatterChart.js +11 -10
  51. package/charts/ScatterChart.js.map +1 -1
  52. package/components/AxisBase.d.ts +271 -101
  53. package/components/AxisBase.js +264 -254
  54. package/components/AxisBase.js.map +1 -1
  55. package/components/ComponentBase.d.ts +54 -19
  56. package/components/ComponentBase.js +60 -48
  57. package/components/ComponentBase.js.map +1 -1
  58. package/components/Description.d.ts +18 -9
  59. package/components/Description.js +12 -26
  60. package/components/Description.js.map +1 -1
  61. package/components/IMarker.d.ts +30 -1
  62. package/components/IMarker.js.map +1 -1
  63. package/components/Legend.d.ts +155 -58
  64. package/components/Legend.js +208 -172
  65. package/components/Legend.js.map +1 -1
  66. package/components/LegendEntry.d.ts +38 -0
  67. package/components/LegendEntry.js +34 -0
  68. package/components/LegendEntry.js.map +1 -1
  69. package/components/LimitLine.d.ts +40 -22
  70. package/components/LimitLine.js +44 -56
  71. package/components/LimitLine.js.map +1 -1
  72. package/components/MarkerImage.d.ts +1 -0
  73. package/components/MarkerImage.js +97 -0
  74. package/components/MarkerImage.js.map +1 -0
  75. package/components/XAxis.d.ts +41 -10
  76. package/components/XAxis.js +42 -24
  77. package/components/XAxis.js.map +1 -1
  78. package/components/YAxis.d.ts +114 -37
  79. package/components/YAxis.js +138 -106
  80. package/components/YAxis.js.map +1 -1
  81. package/data/BarData.d.ts +32 -4
  82. package/data/BarData.js +92 -24
  83. package/data/BarData.js.map +1 -1
  84. package/data/BarDataSet.d.ts +35 -18
  85. package/data/BarDataSet.js +42 -47
  86. package/data/BarDataSet.js.map +1 -1
  87. package/data/BarEntry.d.ts +3 -0
  88. package/data/BarEntry.js.map +1 -1
  89. package/data/BarLineScatterCandleBubbleData.d.ts +5 -0
  90. package/data/BarLineScatterCandleBubbleData.js +5 -0
  91. package/data/BarLineScatterCandleBubbleData.js.map +1 -1
  92. package/data/BarLineScatterCandleBubbleDataSet.d.ts +11 -3
  93. package/data/BarLineScatterCandleBubbleDataSet.js +11 -7
  94. package/data/BarLineScatterCandleBubbleDataSet.js.map +1 -1
  95. package/data/BaseDataSet.d.ts +129 -71
  96. package/data/BaseDataSet.js +146 -169
  97. package/data/BaseDataSet.js.map +1 -1
  98. package/data/BaseEntry.d.ts +3 -0
  99. package/data/BaseEntry.js.map +1 -1
  100. package/data/BubbleData.d.ts +7 -1
  101. package/data/BubbleData.js +8 -2
  102. package/data/BubbleData.js.map +1 -1
  103. package/data/BubbleDataSet.d.ts +7 -7
  104. package/data/BubbleDataSet.js +8 -15
  105. package/data/BubbleDataSet.js.map +1 -1
  106. package/data/BubbleEntry.d.ts +1 -0
  107. package/data/BubbleEntry.js.map +1 -1
  108. package/data/CandleData.js.map +1 -1
  109. package/data/CandleDataSet.d.ts +64 -30
  110. package/data/CandleDataSet.js +67 -74
  111. package/data/CandleDataSet.js.map +1 -1
  112. package/data/CandleEntry.d.ts +4 -0
  113. package/data/CandleEntry.js.map +1 -1
  114. package/data/ChartData.d.ts +275 -20
  115. package/data/ChartData.js +400 -95
  116. package/data/ChartData.js.map +1 -1
  117. package/data/CombinedData.d.ts +39 -12
  118. package/data/CombinedData.js +87 -71
  119. package/data/CombinedData.js.map +1 -1
  120. package/data/DataSet.d.ts +59 -8
  121. package/data/DataSet.js +114 -26
  122. package/data/DataSet.js.map +1 -1
  123. package/data/Entry.js.map +1 -1
  124. package/data/LineData.d.ts +5 -0
  125. package/data/LineData.js +5 -0
  126. package/data/LineData.js.map +1 -1
  127. package/data/LineDataSet.d.ts +84 -49
  128. package/data/LineDataSet.js +94 -135
  129. package/data/LineDataSet.js.map +1 -1
  130. package/data/LineRadarDataSet.d.ts +27 -17
  131. package/data/LineRadarDataSet.js +22 -35
  132. package/data/LineRadarDataSet.js.map +1 -1
  133. package/data/LineScatterCandleRadarDataSet.d.ts +30 -15
  134. package/data/LineScatterCandleRadarDataSet.js +36 -39
  135. package/data/LineScatterCandleRadarDataSet.js.map +1 -1
  136. package/data/PieData.d.ts +26 -0
  137. package/data/PieData.js +28 -2
  138. package/data/PieData.js.map +1 -1
  139. package/data/PieDataSet.d.ts +40 -36
  140. package/data/PieDataSet.js +36 -88
  141. package/data/PieDataSet.js.map +1 -1
  142. package/data/PieEntry.d.ts +3 -0
  143. package/data/PieEntry.js.map +1 -1
  144. package/data/RadarData.d.ts +10 -4
  145. package/data/RadarData.js +5 -6
  146. package/data/RadarData.js.map +1 -1
  147. package/data/RadarDataSet.d.ts +7 -21
  148. package/data/RadarDataSet.js +10 -49
  149. package/data/RadarDataSet.js.map +1 -1
  150. package/data/RadarEntry.js.map +1 -1
  151. package/data/ScatterData.d.ts +4 -1
  152. package/data/ScatterData.js +5 -2
  153. package/data/ScatterData.js.map +1 -1
  154. package/data/ScatterDataSet.d.ts +24 -14
  155. package/data/ScatterDataSet.js +26 -31
  156. package/data/ScatterDataSet.js.map +1 -1
  157. package/formatter/DefaultAxisValueFormatter.d.ts +17 -3
  158. package/formatter/DefaultAxisValueFormatter.js +12 -5
  159. package/formatter/DefaultAxisValueFormatter.js.map +1 -1
  160. package/formatter/DefaultFillFormatter.js +7 -7
  161. package/formatter/DefaultFillFormatter.js.map +1 -1
  162. package/formatter/DefaultValueFormatter.js.map +1 -1
  163. package/formatter/IAxisValueFormatter.d.ts +20 -2
  164. package/formatter/IAxisValueFormatter.js.map +1 -1
  165. package/formatter/IFillFormatter.d.ts +25 -0
  166. package/formatter/IFillFormatter.js.map +1 -1
  167. package/formatter/IValueFormatter.d.ts +21 -0
  168. package/formatter/IValueFormatter.js.map +1 -1
  169. package/formatter/ValueFormatter.d.ts +60 -0
  170. package/formatter/ValueFormatter.js +60 -0
  171. package/formatter/ValueFormatter.js.map +1 -1
  172. package/highlight/BarHighlighter.d.ts +22 -2
  173. package/highlight/BarHighlighter.js +43 -17
  174. package/highlight/BarHighlighter.js.map +1 -1
  175. package/highlight/ChartHighlighter.d.ts +87 -5
  176. package/highlight/ChartHighlighter.js +129 -25
  177. package/highlight/ChartHighlighter.js.map +1 -1
  178. package/highlight/CombinedHighlighter.d.ts +6 -0
  179. package/highlight/CombinedHighlighter.js +31 -16
  180. package/highlight/CombinedHighlighter.js.map +1 -1
  181. package/highlight/Highlight.d.ts +54 -1
  182. package/highlight/Highlight.js +5 -0
  183. package/highlight/Highlight.js.map +1 -1
  184. package/highlight/HorizontalBarHighlighter.d.ts +1 -1
  185. package/highlight/HorizontalBarHighlighter.js +14 -13
  186. package/highlight/HorizontalBarHighlighter.js.map +1 -1
  187. package/highlight/IHighlighter.d.ts +11 -1
  188. package/highlight/IHighlighter.js.map +1 -1
  189. package/highlight/PieHighlighter.js +2 -2
  190. package/highlight/PieHighlighter.js.map +1 -1
  191. package/highlight/PieRadarHighlighter.d.ts +12 -1
  192. package/highlight/PieRadarHighlighter.js +12 -4
  193. package/highlight/PieRadarHighlighter.js.map +1 -1
  194. package/highlight/RadarHighlighter.d.ts +12 -0
  195. package/highlight/RadarHighlighter.js +24 -10
  196. package/highlight/RadarHighlighter.js.map +1 -1
  197. package/index.d.ts +11 -0
  198. package/index.js +15 -0
  199. package/index.js.map +1 -0
  200. package/interfaces/dataprovider/BarDataProvider.d.ts +4 -4
  201. package/interfaces/dataprovider/BarLineScatterCandleBubbleDataProvider.d.ts +8 -3
  202. package/interfaces/dataprovider/BubbleDataProvider.d.ts +1 -1
  203. package/interfaces/dataprovider/CandleDataProvider.d.ts +1 -1
  204. package/interfaces/dataprovider/ChartInterface.d.ts +17 -22
  205. package/interfaces/dataprovider/CombinedDataProvider.d.ts +1 -1
  206. package/interfaces/dataprovider/LineDataProvider.d.ts +1 -1
  207. package/interfaces/dataprovider/ScatterDataProvider.d.ts +1 -1
  208. package/interfaces/datasets/IBarDataSet.d.ts +8 -22
  209. package/interfaces/datasets/IBarLineScatterCandleBubbleDataSet.d.ts +1 -3
  210. package/interfaces/datasets/IBubbleDataSet.d.ts +3 -9
  211. package/interfaces/datasets/ICandleDataSet.d.ts +44 -41
  212. package/interfaces/datasets/IDataSet.d.ts +35 -151
  213. package/interfaces/datasets/ILineDataSet.d.ts +15 -54
  214. package/interfaces/datasets/ILineRadarDataSet.d.ts +7 -28
  215. package/interfaces/datasets/ILineScatterCandleRadarDataSet.d.ts +5 -4
  216. package/interfaces/datasets/IPieDataSet.d.ts +22 -40
  217. package/interfaces/datasets/IRadarDataSet.d.ts +7 -13
  218. package/interfaces/datasets/IScatterDataSet.d.ts +17 -16
  219. package/jobs/AnimatedMoveViewJob.d.ts +3 -0
  220. package/jobs/AnimatedMoveViewJob.js +12 -8
  221. package/jobs/AnimatedMoveViewJob.js.map +1 -1
  222. package/jobs/AnimatedViewPortJob.d.ts +7 -8
  223. package/jobs/AnimatedViewPortJob.js +16 -23
  224. package/jobs/AnimatedViewPortJob.js.map +1 -1
  225. package/jobs/AnimatedZoomJob.d.ts +8 -5
  226. package/jobs/AnimatedZoomJob.js +30 -26
  227. package/jobs/AnimatedZoomJob.js.map +1 -1
  228. package/jobs/MoveViewJob.d.ts +3 -0
  229. package/jobs/MoveViewJob.js +10 -7
  230. package/jobs/MoveViewJob.js.map +1 -1
  231. package/jobs/ViewPortJob.d.ts +3 -5
  232. package/jobs/ViewPortJob.js +5 -11
  233. package/jobs/ViewPortJob.js.map +1 -1
  234. package/jobs/ZoomJob.js +14 -14
  235. package/jobs/ZoomJob.js.map +1 -1
  236. package/listener/BarLineChartTouchListener.d.ts +82 -1
  237. package/listener/BarLineChartTouchListener.js +169 -67
  238. package/listener/BarLineChartTouchListener.js.map +1 -1
  239. package/listener/ChartTouchListener.d.ts +39 -5
  240. package/listener/ChartTouchListener.js +38 -11
  241. package/listener/ChartTouchListener.js.map +1 -1
  242. package/listener/PieRadarChartTouchListener.d.ts +56 -1
  243. package/listener/PieRadarChartTouchListener.js +201 -17
  244. package/listener/PieRadarChartTouchListener.js.map +1 -1
  245. package/model/GradientColor.js.map +1 -1
  246. package/package.json +23 -15
  247. package/renderer/AxisRenderer.d.ts +66 -7
  248. package/renderer/AxisRenderer.js +69 -21
  249. package/renderer/AxisRenderer.js.map +1 -1
  250. package/renderer/BarChartRenderer.d.ts +11 -0
  251. package/renderer/BarChartRenderer.js +99 -71
  252. package/renderer/BarChartRenderer.js.map +1 -1
  253. package/renderer/BarLineScatterCandleBubbleRenderer.d.ts +37 -0
  254. package/renderer/BarLineScatterCandleBubbleRenderer.js +36 -8
  255. package/renderer/BarLineScatterCandleBubbleRenderer.js.map +1 -1
  256. package/renderer/BubbleChartRenderer.d.ts +6 -2
  257. package/renderer/BubbleChartRenderer.js +51 -40
  258. package/renderer/BubbleChartRenderer.js.map +1 -1
  259. package/renderer/CandleStickChartRenderer.d.ts +1 -1
  260. package/renderer/CandleStickChartRenderer.js +64 -50
  261. package/renderer/CandleStickChartRenderer.js.map +1 -1
  262. package/renderer/CombinedChartRenderer.d.ts +20 -1
  263. package/renderer/CombinedChartRenderer.js +72 -42
  264. package/renderer/CombinedChartRenderer.js.map +1 -1
  265. package/renderer/DataRenderer.d.ts +78 -4
  266. package/renderer/DataRenderer.js +65 -6
  267. package/renderer/DataRenderer.js.map +1 -1
  268. package/renderer/HorizontalBarChartRenderer.d.ts +5 -2
  269. package/renderer/HorizontalBarChartRenderer.js +87 -66
  270. package/renderer/HorizontalBarChartRenderer.js.map +1 -1
  271. package/renderer/LegendRenderer.d.ts +32 -0
  272. package/renderer/LegendRenderer.js +98 -59
  273. package/renderer/LegendRenderer.js.map +1 -1
  274. package/renderer/LineChartRenderer.d.ts +38 -1
  275. package/renderer/LineChartRenderer.js +198 -113
  276. package/renderer/LineChartRenderer.js.map +1 -1
  277. package/renderer/LineRadarRenderer.d.ts +19 -0
  278. package/renderer/LineRadarRenderer.js +25 -1
  279. package/renderer/LineRadarRenderer.js.map +1 -1
  280. package/renderer/LineScatterCandleRadarRenderer.d.ts +11 -0
  281. package/renderer/LineScatterCandleRadarRenderer.js +26 -9
  282. package/renderer/LineScatterCandleRadarRenderer.js.map +1 -1
  283. package/renderer/PieChartRenderer.d.ts +45 -1
  284. package/renderer/PieChartRenderer.js +195 -122
  285. package/renderer/PieChartRenderer.js.map +1 -1
  286. package/renderer/RadarChartRenderer.d.ts +10 -0
  287. package/renderer/RadarChartRenderer.js +119 -77
  288. package/renderer/RadarChartRenderer.js.map +1 -1
  289. package/renderer/Renderer.d.ts +8 -0
  290. package/renderer/Renderer.js +5 -0
  291. package/renderer/Renderer.js.map +1 -1
  292. package/renderer/ScatterChartRenderer.d.ts +5 -5
  293. package/renderer/ScatterChartRenderer.js +51 -37
  294. package/renderer/ScatterChartRenderer.js.map +1 -1
  295. package/renderer/XAxisRenderer.d.ts +29 -4
  296. package/renderer/XAxisRenderer.js +128 -95
  297. package/renderer/XAxisRenderer.js.map +1 -1
  298. package/renderer/XAxisRendererHorizontalBarChart.d.ts +11 -0
  299. package/renderer/XAxisRendererHorizontalBarChart.js +75 -57
  300. package/renderer/XAxisRendererHorizontalBarChart.js.map +1 -1
  301. package/renderer/XAxisRendererRadarChart.d.ts +5 -0
  302. package/renderer/XAxisRendererRadarChart.js +26 -13
  303. package/renderer/XAxisRendererRadarChart.js.map +1 -1
  304. package/renderer/YAxisRenderer.d.ts +42 -5
  305. package/renderer/YAxisRenderer.js +126 -69
  306. package/renderer/YAxisRenderer.js.map +1 -1
  307. package/renderer/YAxisRendererHorizontalBarChart.d.ts +22 -1
  308. package/renderer/YAxisRendererHorizontalBarChart.js +80 -58
  309. package/renderer/YAxisRendererHorizontalBarChart.js.map +1 -1
  310. package/renderer/YAxisRendererRadarChart.js +62 -32
  311. package/renderer/YAxisRendererRadarChart.js.map +1 -1
  312. package/renderer/scatter/ChevronDownShapeRenderer.d.ts +4 -0
  313. package/renderer/scatter/ChevronDownShapeRenderer.js +5 -1
  314. package/renderer/scatter/ChevronDownShapeRenderer.js.map +1 -1
  315. package/renderer/scatter/ChevronUpShapeRenderer.d.ts +4 -0
  316. package/renderer/scatter/ChevronUpShapeRenderer.js +5 -1
  317. package/renderer/scatter/ChevronUpShapeRenderer.js.map +1 -1
  318. package/renderer/scatter/CircleShapeRenderer.d.ts +4 -0
  319. package/renderer/scatter/CircleShapeRenderer.js +8 -5
  320. package/renderer/scatter/CircleShapeRenderer.js.map +1 -1
  321. package/renderer/scatter/CrossShapeRenderer.d.ts +4 -0
  322. package/renderer/scatter/CrossShapeRenderer.js +5 -1
  323. package/renderer/scatter/CrossShapeRenderer.js.map +1 -1
  324. package/renderer/scatter/IShapeRenderer.d.ts +14 -0
  325. package/renderer/scatter/IShapeRenderer.js.map +1 -1
  326. package/renderer/scatter/SquareShapeRenderer.d.ts +4 -0
  327. package/renderer/scatter/SquareShapeRenderer.js +8 -5
  328. package/renderer/scatter/SquareShapeRenderer.js.map +1 -1
  329. package/renderer/scatter/TriangleShapeRenderer.d.ts +4 -0
  330. package/renderer/scatter/TriangleShapeRenderer.js +9 -5
  331. package/renderer/scatter/TriangleShapeRenderer.js.map +1 -1
  332. package/renderer/scatter/XShapeRenderer.d.ts +4 -0
  333. package/renderer/scatter/XShapeRenderer.js +5 -1
  334. package/renderer/scatter/XShapeRenderer.js.map +1 -1
  335. package/utils/ColorTemplate.d.ts +21 -1
  336. package/utils/ColorTemplate.js +21 -3
  337. package/utils/ColorTemplate.js.map +1 -1
  338. package/utils/HorizontalViewPortHandler.d.ts +3 -0
  339. package/utils/HorizontalViewPortHandler.js +3 -0
  340. package/utils/HorizontalViewPortHandler.js.map +1 -1
  341. package/utils/MPSize.d.ts +7 -0
  342. package/utils/ObjectPool.d.ts +56 -0
  343. package/utils/ObjectPool.js +66 -8
  344. package/utils/ObjectPool.js.map +1 -1
  345. package/utils/Transformer.d.ts +118 -0
  346. package/utils/Transformer.js +141 -7
  347. package/utils/Transformer.js.map +1 -1
  348. package/utils/TransformerHorizontalBarChart.d.ts +10 -0
  349. package/utils/TransformerHorizontalBarChart.js +18 -2
  350. package/utils/TransformerHorizontalBarChart.js.map +1 -1
  351. package/utils/Utils.d.ts +139 -17
  352. package/utils/Utils.js +185 -60
  353. package/utils/Utils.js.map +1 -1
  354. package/utils/ViewPortHandler.d.ts +234 -19
  355. package/utils/ViewPortHandler.js +306 -63
  356. package/utils/ViewPortHandler.js.map +1 -1
  357. package/utils/colors/colorful.js.map +1 -1
  358. package/utils/colors/joyful.js.map +1 -1
  359. package/utils/colors/liberty.js.map +1 -1
  360. package/utils/colors/material.js.map +1 -1
  361. package/utils/colors/pastel.js.map +1 -1
  362. package/utils/colors/vordiplom.js.map +1 -1
  363. package/charts/index.d.ts +0 -11
  364. package/charts/index.js +0 -15
  365. 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
- if (entry[yKey] === undefined || entry[yKey] === null) {
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.getCircleColorCount();
63
+ const size = set.circleColors.length || 1;
51
64
  let changeRequired = false;
52
- if (this.circleBitmaps == null) {
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.getCircleColorCount();
64
- const circleRadius = set.getCircleRadius();
65
- const circleHoleRadius = set.getCircleHoleRadius();
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.getCircleColor(i));
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.getChartWidth();
112
- const height = this.mViewPortHandler.getChartHeight();
113
- let drawBitmap = this.mDrawBitmap == null ? null : this.mDrawBitmap.get();
114
- if (drawBitmap == null || drawBitmap.width !== width || drawBitmap.height !== height) {
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.getLineData();
163
+ const lineData = this.mChart.lineData;
127
164
  let needsBitmapDrawing = false;
128
- for (const set of lineData.getVisibleDataSets()) {
165
+ for (const set of lineData.visibleDataSets) {
129
166
  needsBitmapDrawing = this.drawDataSet(c, set) || needsBitmapDrawing;
130
167
  }
131
168
  if (needsBitmapDrawing) {
@@ -134,31 +171,48 @@ export class LineChartRenderer extends LineRadarRenderer {
134
171
  }
135
172
  }
136
173
  drawDataSet(c, dataSet) {
137
- if (dataSet.getEntryCount() < 1)
174
+ if (dataSet.entryCount < 1)
138
175
  return false;
139
176
  const renderPaint = this.renderPaint;
140
- renderPaint.setStrokeWidth(dataSet.getLineWidth());
141
- renderPaint.setPathEffect(dataSet.getDashPathEffect());
177
+ renderPaint.setStrokeWidth(dataSet.lineWidth);
178
+ if (dataSet.dashPathEffect) {
179
+ renderPaint.setPathEffect(dataSet.dashPathEffect);
180
+ }
181
+ if (dataSet.shader) {
182
+ renderPaint.setShader(dataSet.shader);
183
+ }
142
184
  renderPaint.setColor(dataSet.getColor());
143
185
  renderPaint.setStyle(Style.STROKE);
144
186
  const scaleX = this.mViewPortHandler.getScaleX();
145
187
  dataSet.applyFiltering(scaleX);
146
188
  const result = this.draw(c, dataSet);
147
- renderPaint.setPathEffect(null);
189
+ if (dataSet.dashPathEffect) {
190
+ renderPaint.setPathEffect(null);
191
+ }
192
+ if (dataSet.shader) {
193
+ renderPaint.setShader(null);
194
+ }
148
195
  return result;
149
196
  }
150
197
  generateHorizontalBezierPath(dataSet, outputPath) {
151
198
  if (this.mXBounds.range >= 1) {
152
199
  const pointsPerEntryPair = 6;
153
- const entryCount = dataSet.getEntryCount();
200
+ const entryCount = dataSet.entryCount;
154
201
  if (!this.mLineBuffer || this.mLineBuffer.length < Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2) {
155
202
  this.mLineBuffer = Utils.createArrayBuffer(Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2);
156
203
  }
157
- const phaseY = this.mAnimator.getPhaseY();
204
+ const phaseY = this.animator.phaseY;
158
205
  const yKey = dataSet.yProperty;
159
- const firstIndex = Math.max(0, this.mXBounds.min);
206
+ let firstIndex = Math.max(0, this.mXBounds.min);
207
+ // let firstIndex = this.mXBounds.min + 1;
160
208
  const lastIndex = this.mXBounds.min + this.mXBounds.range;
161
209
  let prev = dataSet.getEntryForIndex(firstIndex);
210
+ let yVal = prev[yKey];
211
+ while (firstIndex < lastIndex && (yVal === undefined || yVal === null)) {
212
+ firstIndex++;
213
+ prev = dataSet.getEntryForIndex(firstIndex);
214
+ yVal = prev[yKey];
215
+ }
162
216
  let prevXVal = dataSet.getEntryXValue(prev, firstIndex);
163
217
  let cur = prev;
164
218
  let curXVal = prevXVal;
@@ -166,9 +220,11 @@ export class LineChartRenderer extends LineRadarRenderer {
166
220
  let index = 0;
167
221
  float32arr[index++] = prevXVal;
168
222
  float32arr[index++] = cur[yKey] * phaseY;
223
+ // let the spline start
169
224
  for (let j = firstIndex + 1; j <= lastIndex; j++) {
170
225
  const newEntry = dataSet.getEntryForIndex(j);
171
- if (newEntry[yKey] === undefined || newEntry[yKey] === null) {
226
+ const yVal = newEntry[yKey];
227
+ if (yVal === undefined || yVal === null) {
172
228
  continue;
173
229
  }
174
230
  prev = cur;
@@ -200,15 +256,20 @@ export class LineChartRenderer extends LineRadarRenderer {
200
256
  generateCubicPath(dataSet, outputPath) {
201
257
  if (this.mXBounds.range >= 1) {
202
258
  const pointsPerEntryPair = 6;
203
- const entryCount = dataSet.getEntryCount();
259
+ const entryCount = dataSet.entryCount;
204
260
  if (!this.mLineBuffer || this.mLineBuffer.length < Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2) {
205
261
  this.mLineBuffer = Utils.createArrayBuffer(Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2);
206
262
  }
207
- const phaseY = this.mAnimator.getPhaseY();
263
+ const phaseY = this.animator.phaseY;
208
264
  const xKey = dataSet.xProperty;
209
265
  const yKey = dataSet.yProperty;
210
- const intensity = dataSet.getCubicIntensity();
266
+ const intensity = dataSet.cubicIntensity;
267
+ // Take an extra polet from the left, and an extra from the right.
268
+ // 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.
269
+ // So in the starting `prev` and `cur`, go -2, -1
270
+ // And in the `lastIndex`, add +1
211
271
  const firstIndex = Math.max(0, this.mXBounds.min);
272
+ // let firstIndex = this.mXBounds.min + 1;
212
273
  const lastIndex = this.mXBounds.min + this.mXBounds.range;
213
274
  const float32arr = this.mLineBuffer;
214
275
  let index = 0;
@@ -221,21 +282,21 @@ export class LineChartRenderer extends LineRadarRenderer {
221
282
  for (let j = firstIndex; j <= lastIndex; j++) {
222
283
  point = getXYValue(dataSet, j);
223
284
  if (!point) {
224
- if (j === 0) {
225
- return [];
226
- }
285
+ // if (j === 0) {
286
+ // return [];
287
+ // }
227
288
  continue;
228
289
  }
229
290
  if (!prev) {
230
291
  prev = point;
231
292
  }
232
- nextIndex = j + 1 < dataSet.getEntryCount() ? j + 1 : j;
293
+ nextIndex = j + 1 < dataSet.entryCount ? j + 1 : j;
233
294
  next = getXYValue(dataSet, nextIndex);
234
295
  if (!next) {
235
296
  continue;
236
297
  }
237
298
  controlPoints = splineCurve(prev, point, next, intensity);
238
- if (j === 0) {
299
+ if (j === firstIndex) {
239
300
  float32arr[index++] = point.x;
240
301
  float32arr[index++] = point.y * phaseY;
241
302
  }
@@ -266,26 +327,38 @@ export class LineChartRenderer extends LineRadarRenderer {
266
327
  }
267
328
  generateLinearPath(dataSet, outputPath) {
268
329
  if (this.mXBounds.range >= 1) {
269
- const isDrawSteppedEnabled = dataSet.getMode() === Mode.STEPPED;
270
- const entryCount = dataSet.getEntryCount();
330
+ const isDrawSteppedEnabled = dataSet.mode === Mode.STEPPED;
331
+ const entryCount = dataSet.entryCount;
271
332
  const pointsPerEntryPair = isDrawSteppedEnabled ? 4 : 2;
272
333
  if (!this.mLineBuffer || this.mLineBuffer.length < Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2) {
273
334
  this.mLineBuffer = Utils.createArrayBuffer(Math.max(entryCount * pointsPerEntryPair, pointsPerEntryPair) * 2);
274
335
  }
275
- const phaseY = this.mAnimator.getPhaseY();
336
+ const phaseX = this.animator.phaseX;
337
+ const phaseY = this.animator.phaseY;
276
338
  const yKey = dataSet.yProperty;
277
- const firstIndex = Math.max(0, this.mXBounds.min);
339
+ // const filled = outputPath;
340
+ // outputPath.reset();
341
+ let firstIndex = Math.max(0, this.mXBounds.min);
278
342
  const lastIndex = this.mXBounds.min + this.mXBounds.range;
279
- const entry = dataSet.getEntryForIndex(firstIndex);
280
- const entryXVal = dataSet.getEntryXValue(entry, firstIndex);
343
+ let firstEntry = dataSet.getEntryForIndex(firstIndex);
344
+ let entryXVal = dataSet.getEntryXValue(firstEntry, firstIndex);
345
+ let yVal = firstEntry[yKey];
346
+ while (firstIndex < lastIndex && (yVal === undefined || yVal === null)) {
347
+ firstIndex++;
348
+ firstEntry = dataSet.getEntryForIndex(firstIndex);
349
+ entryXVal = dataSet.getEntryXValue(firstEntry, firstIndex);
350
+ yVal = firstEntry[yKey];
351
+ }
281
352
  const float32arr = this.mLineBuffer;
282
353
  float32arr[0] = entryXVal;
283
- float32arr[1] = entry[yKey] * phaseY;
354
+ float32arr[1] = firstEntry[yKey] * phaseY;
284
355
  let index = 2;
356
+ // create a new path
285
357
  let currentEntry = null;
286
358
  let currentEntryXVal;
287
359
  let currentEntryYVal;
288
360
  let previousEntryYVal;
361
+ // doing the if test outside is much much faster on big data
289
362
  if (isDrawSteppedEnabled) {
290
363
  for (let x = firstIndex + 1; x <= lastIndex; x++) {
291
364
  currentEntry = dataSet.getEntryForIndex(x);
@@ -338,19 +411,20 @@ export class LineChartRenderer extends LineRadarRenderer {
338
411
  const firstIndex = Math.max(0, this.mXBounds.min);
339
412
  const range = this.mXBounds.range;
340
413
  const lastIndex = firstIndex + range;
341
- const width = this.mViewPortHandler.getChartWidth();
342
- const chartRect = this.mViewPortHandler.getChartRect();
414
+ const width = this.mViewPortHandler.chartWidth;
415
+ const chartRect = this.mViewPortHandler.chartRect;
343
416
  let lastColor;
344
417
  const gradientDelta = 0;
345
418
  const posDelta = gradientDelta / width;
346
419
  for (let index = 0; index < nbColors; index++) {
347
420
  const color = colors[index];
348
421
  let colorIndex = color[xKey || 'index'];
422
+ // if filtered we need to get the real index
349
423
  if (dataSet.isFiltered()) {
350
- dataSet.setIgnoreFiltered(true);
424
+ dataSet.ignoreFiltered = true;
351
425
  const entry = dataSet.getEntryForIndex(colorIndex);
352
- dataSet.setIgnoreFiltered(false);
353
- if (entry !== null) {
426
+ dataSet.ignoreFiltered = false;
427
+ if (entry) {
354
428
  colorIndex = dataSet.getEntryIndexForXValue(dataSet.getEntryXValue(entry, colorIndex), NaN, Rounding.CLOSEST);
355
429
  }
356
430
  }
@@ -395,16 +469,16 @@ export class LineChartRenderer extends LineRadarRenderer {
395
469
  }
396
470
  draw(c, dataSet) {
397
471
  const result = false;
398
- const drawFilled = dataSet.isDrawFilledEnabled();
399
- const drawLine = dataSet.getLineWidth() > 0;
472
+ const drawFilled = dataSet.drawFilledEnabled;
473
+ const drawLine = dataSet.lineWidth > 0;
400
474
  if (!drawFilled && !drawLine) {
401
475
  return result;
402
476
  }
403
- const trans = this.mChart.getTransformer(dataSet.getAxisDependency());
477
+ const trans = this.mChart.getTransformer(dataSet.axisDependency);
404
478
  const linePath = Utils.getTempPath();
405
- this.mXBounds.set(this.mChart, dataSet, this.mAnimator);
479
+ this.mXBounds.set(this.mChart, dataSet, this.animator);
406
480
  let points;
407
- switch (dataSet.getMode()) {
481
+ switch (dataSet.mode) {
408
482
  default:
409
483
  case Mode.LINEAR:
410
484
  case Mode.STEPPED:
@@ -420,16 +494,17 @@ export class LineChartRenderer extends LineRadarRenderer {
420
494
  if (!points) {
421
495
  return result;
422
496
  }
423
- const colors = dataSet.getColors();
497
+ const colors = dataSet.colors;
424
498
  const nbColors = colors.length;
425
499
  const renderPaint = this.renderPaint;
426
500
  let paintColorsShader;
427
501
  if (nbColors > 0) {
502
+ // TODO: we transforms points in there. Could be dangerous if used after
428
503
  paintColorsShader = this.getMultiColorsShader(colors, points, trans, dataSet);
429
504
  }
430
505
  let oldShader;
431
506
  if (drawFilled) {
432
- const useColorsForFill = dataSet.getUseColorsForFill();
507
+ const useColorsForFill = dataSet.useColorsForFill;
433
508
  if (paintColorsShader && useColorsForFill) {
434
509
  oldShader = renderPaint.getShader();
435
510
  renderPaint.setShader(paintColorsShader);
@@ -440,12 +515,13 @@ export class LineChartRenderer extends LineRadarRenderer {
440
515
  const minEntryValue = dataSet.getEntryXValue(dataSet.getEntryForIndex(this.mXBounds.min), this.mXBounds.min);
441
516
  const maxEntryValue = dataSet.getEntryXValue(dataSet.getEntryForIndex(this.mXBounds.min + this.mXBounds.range), this.mXBounds.min + this.mXBounds.range);
442
517
  this.drawFill(c, dataSet, fillPath, trans, minEntryValue, maxEntryValue);
518
+ this.lastLinePath = linePath;
443
519
  if (paintColorsShader && useColorsForFill) {
444
520
  renderPaint.setShader(oldShader);
445
521
  oldShader = null;
446
522
  }
447
523
  }
448
- const customRender = this.mChart.getCustomRenderer();
524
+ const customRender = this.mChart.customRenderer;
449
525
  if (drawLine) {
450
526
  const useColorsForLine = dataSet.useColorsForLine;
451
527
  if (paintColorsShader && useColorsForLine) {
@@ -475,38 +551,45 @@ export class LineChartRenderer extends LineRadarRenderer {
475
551
  }
476
552
  }
477
553
  drawFill(c, dataSet, spline, trans, min, max, color, fillMin) {
478
- if (fillMin === undefined) {
479
- fillMin = dataSet.getFillFormatter().getFillLinePosition(dataSet, this.mChart);
554
+ const fillFormatter = dataSet.fillFormatter;
555
+ if (fillFormatter.getFillLinePath) {
556
+ fillFormatter.getFillLinePath(dataSet, this.mChart, spline, this.lastLinePath);
557
+ }
558
+ else if (fillMin === undefined) {
559
+ fillMin = fillFormatter.getFillLinePosition(dataSet, this.mChart);
560
+ spline.lineTo(max, fillMin);
561
+ spline.lineTo(min, fillMin);
562
+ spline.close();
480
563
  }
481
- spline.lineTo(max, fillMin);
482
- spline.lineTo(min, fillMin);
483
- spline.close();
484
564
  trans && trans.pathValueToPixel(spline);
485
- const drawable = dataSet.getFillDrawable();
486
- if (drawable != null) {
487
- this.drawFilledPathBitmap(c, spline, drawable, dataSet.getFillShader());
565
+ const drawable = dataSet.fillDrawable;
566
+ if (drawable) {
567
+ this.drawFilledPathBitmap(c, spline, drawable, dataSet.fillShader);
488
568
  }
489
569
  else {
490
- this.drawFilledPath(c, spline, color || dataSet.getFillColor(), dataSet.getFillAlpha(), dataSet.getFillShader());
570
+ this.drawFilledPath(c, spline, color || dataSet.fillColor, dataSet.fillAlpha, dataSet.fillShader);
491
571
  }
492
572
  }
493
573
  drawValuesForDataset(c, dataSet, dataSetIndex) {
494
574
  const yKey = dataSet.yProperty;
575
+ // apply the text-styling defined by the DataSet
495
576
  this.applyValueTextStyle(dataSet);
496
- const trans = this.mChart.getTransformer(dataSet.getAxisDependency());
497
- let valOffset = dataSet.getCircleRadius() * 1.75;
498
- if (!dataSet.isDrawCirclesEnabled())
577
+ const chart = this.mChart;
578
+ const trans = chart.getTransformer(dataSet.axisDependency);
579
+ // make sure the values do not interfear with the circles
580
+ let valOffset = dataSet.circleRadius * 1.75;
581
+ if (!dataSet.drawCirclesEnabled)
499
582
  valOffset = valOffset / 2;
500
- this.mXBounds.set(this.mChart, dataSet, this.mAnimator);
501
- const { points, count } = trans.generateTransformedValues(dataSet, this.mAnimator.getPhaseX(), this.mAnimator.getPhaseY(), this.mXBounds.min, this.mXBounds.max);
502
- const formatter = dataSet.getValueFormatter();
503
- const iconsOffset = dataSet.getIconsOffset();
504
- const valuesOffset = dataSet.getValuesOffset();
505
- const drawIcons = dataSet.isDrawIconsEnabled();
506
- const drawValues = dataSet.isDrawValuesEnabled();
583
+ this.mXBounds.set(chart, dataSet, this.animator);
584
+ const { points, count } = trans.generateTransformedValues(dataSet, this.animator.phaseX, this.animator.phaseY, this.mXBounds.min, this.mXBounds.max);
585
+ const formatter = dataSet.valueFormatter;
586
+ const iconsOffset = dataSet.iconsOffset;
587
+ const valuesOffset = dataSet.valuesOffset;
588
+ const drawIcons = dataSet.drawIconsEnabled;
589
+ const drawValues = dataSet.drawValuesEnabled;
507
590
  const length = count;
508
591
  const paint = this.valuePaint;
509
- const customRender = this.mChart.getCustomRenderer();
592
+ const customRender = chart.customRenderer;
510
593
  for (let j = 0; j < length; j += 2) {
511
594
  const x = points[j];
512
595
  const y = points[j + 1];
@@ -518,24 +601,27 @@ export class LineChartRenderer extends LineRadarRenderer {
518
601
  const entry = dataSet.getEntryForIndex(index);
519
602
  if (!entry)
520
603
  continue;
604
+ const yVal = entry[yKey];
605
+ if (yVal === undefined || yVal === null) {
606
+ continue;
607
+ }
521
608
  if (drawValues) {
522
- this.drawValue(c, formatter.getFormattedValue(entry[yKey], entry), valuesOffset.x + x, valuesOffset.y + y - valOffset, dataSet.getValueTextColor(j / 2), paint, customRender);
609
+ 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
610
  }
524
- if (drawIcons && entry.icon != null) {
525
- const icon = entry.icon;
526
- Utils.drawIcon(c, this.mChart, icon, x + iconsOffset.x, y + iconsOffset.y);
611
+ if (drawIcons) {
612
+ this.drawIcon(c, chart, dataSet, dataSetIndex, entry, index, dataSet.getEntryIcon(entry), x + iconsOffset.x, y + iconsOffset.y, customRender);
527
613
  }
528
614
  }
529
615
  }
530
616
  drawValues(c) {
531
- const data = this.mChart.getLineData();
532
- const dataSets = data.getDataSets();
533
- if (!this.isDrawingValuesAllowed(this.mChart) || dataSets.some((d) => d.isDrawValuesEnabled() || d.isDrawIconsEnabled()) === false) {
617
+ const data = this.mChart.lineData;
618
+ const dataSets = data.dataSets;
619
+ if (!this.isDrawingValuesAllowed(this.mChart) || dataSets.some((d) => d.drawValuesEnabled || d.drawIconsEnabled) === false) {
534
620
  return;
535
621
  }
536
622
  for (let i = 0; i < dataSets.length; i++) {
537
623
  const dataSet = dataSets[i];
538
- if (!this.shouldDrawValues(dataSet) || dataSet.getEntryCount() < 1)
624
+ if (!this.shouldDrawValues(dataSet) || dataSet.entryCount < 1)
539
625
  continue;
540
626
  this.drawValuesForDataset(c, dataSet, i);
541
627
  }
@@ -545,15 +631,15 @@ export class LineChartRenderer extends LineRadarRenderer {
545
631
  }
546
632
  drawCirclesForDataset(c, dataSet) {
547
633
  const paint = this.circlePaintInner;
548
- paint.setColor(dataSet.getCircleHoleColor());
549
- const phaseY = this.mAnimator.getPhaseY();
634
+ paint.setColor(dataSet.circleHoleColor);
635
+ const phaseY = this.animator.phaseY;
550
636
  const yKey = dataSet.yProperty;
551
- const trans = this.mChart.getTransformer(dataSet.getAxisDependency());
552
- this.mXBounds.set(this.mChart, dataSet, this.mAnimator);
553
- const circleRadius = dataSet.getCircleRadius();
554
- const circleHoleRadius = dataSet.getCircleHoleRadius();
555
- const drawCircleHole = dataSet.isDrawCircleHoleEnabled() && circleHoleRadius < circleRadius && circleHoleRadius > 0;
556
- const drawTransparentCircleHole = drawCircleHole && dataSet.getCircleHoleColor() === ColorTemplate.COLOR_NONE;
637
+ const trans = this.mChart.getTransformer(dataSet.axisDependency);
638
+ this.mXBounds.set(this.mChart, dataSet, this.animator);
639
+ const circleRadius = dataSet.circleRadius;
640
+ const circleHoleRadius = dataSet.circleHoleRadius;
641
+ const drawCircleHole = dataSet.drawCircleHoleEnabled && circleHoleRadius < circleRadius && circleHoleRadius > 0;
642
+ const drawTransparentCircleHole = drawCircleHole && dataSet.circleHoleColor === ColorTemplate.COLOR_NONE;
557
643
  let imageCache;
558
644
  if (this.mImageCaches.get(dataSet)) {
559
645
  imageCache = this.mImageCaches.get(dataSet);
@@ -563,6 +649,7 @@ export class LineChartRenderer extends LineRadarRenderer {
563
649
  this.mImageCaches.set(dataSet, imageCache);
564
650
  }
565
651
  const changeRequired = imageCache.init(dataSet);
652
+ // only fill the cache with new bitmaps if a change is required
566
653
  if (changeRequired) {
567
654
  const renderPaint = this.renderPaint;
568
655
  imageCache.fill(dataSet, renderPaint, paint, drawCircleHole, drawTransparentCircleHole);
@@ -572,14 +659,15 @@ export class LineChartRenderer extends LineRadarRenderer {
572
659
  const destRect = Utils.getTempRectF();
573
660
  for (let j = this.mXBounds.min; j <= boundsRangeCount; j++) {
574
661
  const e = dataSet.getEntryForIndex(j);
575
- if (e == null)
662
+ if (!e)
576
663
  continue;
577
664
  const yVal = e[yKey];
578
- if (yVal == null || yVal === undefined)
665
+ if (yVal === null || yVal === undefined)
579
666
  continue;
580
667
  circleBuffer[0] = dataSet.getEntryXValue(e, j);
581
668
  circleBuffer[1] = yVal * phaseY;
582
669
  trans.pointValuesToPixel(circleBuffer);
670
+ // native buffer access is slow
583
671
  const cx = circleBuffer[0];
584
672
  const cy = circleBuffer[1];
585
673
  if (!this.mViewPortHandler.isInBoundsRight(cx))
@@ -587,15 +675,15 @@ export class LineChartRenderer extends LineRadarRenderer {
587
675
  if (!this.mViewPortHandler.isInBoundsLeft(cx) || !this.mViewPortHandler.isInBoundsY(cy))
588
676
  continue;
589
677
  const circleBitmap = imageCache.getBitmap(j);
590
- if (circleBitmap != null) {
678
+ if (circleBitmap) {
591
679
  destRect.set(cx - circleRadius, cy - circleRadius, cx - circleRadius + 2 * circleRadius, cy - circleRadius + 2 * circleRadius);
592
680
  c.drawBitmap(circleBitmap, null, destRect, null);
593
681
  }
594
682
  }
595
683
  }
596
684
  drawCircles(c) {
597
- const dataSets = this.mChart.getLineData().getVisibleDataSets();
598
- if (dataSets.some((d) => d.isDrawCirclesEnabled()) === false) {
685
+ const dataSets = this.mChart.lineData.visibleDataSets;
686
+ if (dataSets.some((d) => d.drawCirclesEnabled) === false) {
599
687
  return;
600
688
  }
601
689
  const renderPaint = this.renderPaint;
@@ -605,24 +693,25 @@ export class LineChartRenderer extends LineRadarRenderer {
605
693
  circleBuffer[1] = 0;
606
694
  for (let i = 0; i < dataSets.length; i++) {
607
695
  const dataSet = dataSets[i];
608
- if (!dataSet.isDrawCirclesEnabled() || dataSet.getEntryCount() === 0)
696
+ if (!dataSet.drawCirclesEnabled || dataSet.entryCount === 0)
609
697
  continue;
610
698
  this.drawCirclesForDataset(c, dataSet);
611
699
  }
612
700
  }
613
- drawHighlighted(c, indices, actualDraw) {
614
- const lineData = this.mChart.getLineData();
615
- const customRender = this.mChart.getCustomRenderer();
701
+ drawHighlighted(c, indices, actualDraw = true) {
702
+ const lineData = this.mChart.lineData;
703
+ const customRender = this.mChart.customRenderer;
616
704
  const paint = this.highlightPaint;
617
705
  for (const high of indices) {
618
706
  const set = lineData.getDataSetByIndex(high.dataSetIndex);
619
- if (set == null || !set.isHighlightEnabled())
707
+ if (!set || !set.highlightEnabled)
620
708
  continue;
621
709
  const { entry, index } = lineData.getEntryAndIndexForHighlight(high);
710
+ // let e = set.getEntryForXValue(high.x high.y);
622
711
  if (!this.isInBoundsX(entry, set))
623
712
  continue;
624
713
  const yKey = set.yProperty;
625
- const pix = this.mChart.getTransformer(set.getAxisDependency()).getPixelForValues(set.getEntryXValue(entry, index), entry[yKey] * this.mAnimator.getPhaseY());
714
+ const pix = this.mChart.getTransformer(set.axisDependency).getPixelForValues(set.getEntryXValue(entry, index), entry[yKey] * this.animator.phaseY);
626
715
  high.drawX = pix.x;
627
716
  high.drawY = pix.y;
628
717
  if (!actualDraw) {
@@ -632,21 +721,23 @@ export class LineChartRenderer extends LineRadarRenderer {
632
721
  customRender.drawHighlight(c, high, set, paint);
633
722
  }
634
723
  else {
635
- this.drawHighlightLines(c, pix.x, pix.y, set);
724
+ this.drawHighlightLines(c, high.xPx, high.yPx, set);
636
725
  }
637
726
  }
638
727
  }
728
+ /**
729
+ * Releases the drawing bitmap. This should be called when {@link LineChart#onDetachedFromWindow()}.
730
+ */
639
731
  releaseBitmap() {
640
- if (this.mBitmapCanvas != null) {
732
+ if (this.mBitmapCanvas) {
641
733
  this.mBitmapCanvas.setBitmap(null);
642
734
  this.mBitmapCanvas = null;
643
735
  }
644
- if (this.mDrawBitmap != null) {
736
+ if (this.mDrawBitmap) {
645
737
  const drawBitmap = this.mDrawBitmap.get();
646
- if (drawBitmap != null) {
738
+ if (drawBitmap) {
647
739
  releaseImage(drawBitmap);
648
740
  }
649
- this.mDrawBitmap.clear();
650
741
  this.mDrawBitmap = null;
651
742
  }
652
743
  }
@@ -663,12 +754,6 @@ __decorate([
663
754
  __decorate([
664
755
  profile
665
756
  ], LineChartRenderer.prototype, "generateCubicPath", null);
666
- __decorate([
667
- profile
668
- ], LineChartRenderer.prototype, "generateLinearPath", null);
669
- __decorate([
670
- profile
671
- ], LineChartRenderer.prototype, "draw", null);
672
757
  __decorate([
673
758
  profile
674
759
  ], LineChartRenderer.prototype, "drawLines", null);