@nativescript-community/ui-chart 1.2.35 → 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.
Files changed (375) 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 +424 -92
  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 +273 -18
  115. package/data/ChartData.js +398 -93
  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 +80 -49
  128. package/data/LineDataSet.js +90 -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 +126 -23
  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 +83 -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 +81 -1
  243. package/listener/PieRadarChartTouchListener.js +212 -16
  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 +185 -110
  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/animation/ChartAnimator2.d.ts +0 -18
  364. package/animation/ChartAnimator2.js +0 -69
  365. package/animation/ChartAnimator2.js.map +0 -1
  366. package/charts/index.d.ts +0 -11
  367. package/charts/index.js +0 -15
  368. package/charts/index.js.map +0 -1
  369. package/utils/Curve.d.ts +0 -12
  370. package/utils/Curve.js +0 -156
  371. package/utils/Curve.js.map +0 -1
  372. package/utils/MPPointD.js +0 -1
  373. package/utils/MPPointD.js.map +0 -1
  374. package/utils/MPPointF.js +0 -1
  375. package/utils/MPPointF.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,11 +171,11 @@ 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
+ 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.getEntryCount();
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.mAnimator.getPhaseY();
194
+ const phaseY = this.animator.phaseY;
158
195
  const yKey = dataSet.yProperty;
159
- const firstIndex = Math.max(0, this.mXBounds.min);
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
- if (newEntry[yKey] === undefined || newEntry[yKey] === null) {
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.getEntryCount();
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.mAnimator.getPhaseY();
253
+ const phaseY = this.animator.phaseY;
208
254
  const xKey = dataSet.xProperty;
209
255
  const yKey = dataSet.yProperty;
210
- const intensity = dataSet.getCubicIntensity();
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
- return [];
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.getEntryCount() ? j + 1 : j;
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 === 0) {
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.getMode() === Mode.STEPPED;
270
- const entryCount = dataSet.getEntryCount();
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 phaseY = this.mAnimator.getPhaseY();
326
+ const phaseX = this.animator.phaseX;
327
+ const phaseY = this.animator.phaseY;
276
328
  const yKey = dataSet.yProperty;
277
- const firstIndex = Math.max(0, this.mXBounds.min);
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
- const entry = dataSet.getEntryForIndex(firstIndex);
280
- const entryXVal = dataSet.getEntryXValue(entry, firstIndex);
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] = entry[yKey] * phaseY;
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.getChartWidth();
342
- const chartRect = this.mViewPortHandler.getChartRect();
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 !== null) {
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.isDrawFilledEnabled();
399
- const drawLine = dataSet.getLineWidth() > 0;
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.getAxisDependency());
467
+ const trans = this.mChart.getTransformer(dataSet.axisDependency);
404
468
  const linePath = Utils.getTempPath();
405
- this.mXBounds.set(this.mChart, dataSet, this.mAnimator);
469
+ this.mXBounds.set(this.mChart, dataSet, this.animator);
406
470
  let points;
407
- switch (dataSet.getMode()) {
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.getColors();
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.getUseColorsForFill();
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.getCustomRenderer();
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
- if (fillMin === undefined) {
479
- fillMin = dataSet.getFillFormatter().getFillLinePosition(dataSet, this.mChart);
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.getFillDrawable();
486
- if (drawable != null) {
487
- this.drawFilledPathBitmap(c, spline, drawable, dataSet.getFillShader());
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.getFillColor(), dataSet.getFillAlpha(), dataSet.getFillShader());
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 trans = this.mChart.getTransformer(dataSet.getAxisDependency());
497
- let valOffset = dataSet.getCircleRadius() * 1.75;
498
- if (!dataSet.isDrawCirclesEnabled())
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(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();
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 = this.mChart.getCustomRenderer();
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(entry[yKey], entry), valuesOffset.x + x, valuesOffset.y + y - valOffset, dataSet.getValueTextColor(j / 2), paint, customRender);
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 && entry.icon != null) {
525
- const icon = entry.icon;
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.getLineData();
532
- const dataSets = data.getDataSets();
533
- if (!this.isDrawingValuesAllowed(this.mChart) || dataSets.some((d) => d.isDrawValuesEnabled() || d.isDrawIconsEnabled()) === false) {
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.getEntryCount() < 1)
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.getCircleHoleColor());
549
- const phaseY = this.mAnimator.getPhaseY();
624
+ paint.setColor(dataSet.circleHoleColor);
625
+ const phaseY = this.animator.phaseY;
550
626
  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;
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 == null)
652
+ if (!e)
576
653
  continue;
577
654
  const yVal = e[yKey];
578
- if (yVal == null || yVal === undefined)
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 != null) {
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.getLineData().getVisibleDataSets();
598
- if (dataSets.some((d) => d.isDrawCirclesEnabled()) === false) {
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.isDrawCirclesEnabled() || dataSet.getEntryCount() === 0)
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.getLineData();
615
- const customRender = this.mChart.getCustomRenderer();
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 == null || !set.isHighlightEnabled())
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.getAxisDependency()).getPixelForValues(set.getEntryXValue(entry, index), entry[yKey] * this.mAnimator.getPhaseY());
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, pix.x, pix.y, set);
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 != null) {
722
+ if (this.mBitmapCanvas) {
641
723
  this.mBitmapCanvas.setBitmap(null);
642
724
  this.mBitmapCanvas = null;
643
725
  }
644
- if (this.mDrawBitmap != null) {
726
+ if (this.mDrawBitmap) {
645
727
  const drawBitmap = this.mDrawBitmap.get();
646
- if (drawBitmap != null) {
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);