Skip to content

Commit 8fb538f

Browse files
committedMar 18, 2021
fix: valuesOffset support for all charts
custom renderer support for drawValue for all charts
1 parent 4e6e46b commit 8fb538f

21 files changed

+98
-88
lines changed
 

‎src/charting/charts/BarChart.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ import { BarChartRenderer } from '../renderer/BarChartRenderer';
1111
import { Canvas, Paint, RectF } from '@nativescript-community/ui-canvas';
1212
import { getEntryXValue } from '../data/BaseEntry';
1313
import { IBarDataSet } from '../interfaces/datasets/IBarDataSet';
14+
import { Color } from '@nativescript/core';
15+
import { BaseCustomRenderer } from '../renderer/DataRenderer';
1416

1517
const LOG_TAG = 'BarChart';
1618

17-
export interface CustomRenderer {
19+
export interface CustomRenderer extends BaseCustomRenderer {
1820
drawBar: (c: Canvas, e: BarEntry, dataSet: IBarDataSet, left: number, top: number, right: number, bottom: number, paint: Paint) => void;
1921
drawHighlight: (c: Canvas, e: Highlight, left: number, top: number, right: number, bottom: number, paint: Paint) => void;
2022
}
@@ -62,7 +64,7 @@ export class BarChart extends BarLineChartBase<Entry, BarDataSet, BarData> imple
6264
if (this.mAxisLeft.isEnabled()) {
6365
this.mAxisLeft.calculate(this.mData.getYMin(AxisDependency.LEFT), this.mData.getYMax(AxisDependency.LEFT));
6466
}
65-
if (this.mAxisRight.isEnabled()) {
67+
if (this.mAxisRight && this.mAxisRight.isEnabled()) {
6668
this.mAxisRight.calculate(this.mData.getYMin(AxisDependency.RIGHT), this.mData.getYMax(AxisDependency.RIGHT));
6769
}
6870
}

‎src/charting/charts/BarLineChartBase.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1609,7 +1609,7 @@ export abstract class BarLineChartBase<U extends Entry, D extends IBarLineScatte
16091609
if (this.mAxisLeft.isEnabled()) {
16101610
max = Math.max(this.mAxisLeft.mAxisMaximum, max);
16111611
}
1612-
if (this.mAxisRight.isEnabled()) {
1612+
if (this.mAxisRight && this.mAxisRight.isEnabled()) {
16131613
max = Math.max(this.mAxisRight.mAxisMaximum, max);
16141614
}
16151615
return max;
@@ -1620,7 +1620,7 @@ export abstract class BarLineChartBase<U extends Entry, D extends IBarLineScatte
16201620
if (this.mAxisLeft.isEnabled()) {
16211621
min = Math.min(this.mAxisLeft.mAxisMinimum, min);
16221622
}
1623-
if (this.mAxisRight.isEnabled()) {
1623+
if (this.mAxisRight && this.mAxisRight.isEnabled()) {
16241624
min = Math.min(this.mAxisRight.mAxisMinimum, min);
16251625
}
16261626
return min;
@@ -1633,7 +1633,7 @@ export abstract class BarLineChartBase<U extends Entry, D extends IBarLineScatte
16331633
*/
16341634
public isAnyAxisInverted() {
16351635
if (this.mAxisLeft.isEnabled() && this.mAxisLeft.isInverted()) return true;
1636-
if (this.mAxisRight.isEnabled() && this.mAxisRight.isInverted()) return true;
1636+
if (this.mAxisRight && this.mAxisRight.isEnabled() && this.mAxisRight.isInverted()) return true;
16371637
return false;
16381638
}
16391639

‎src/charting/charts/BubbleChart.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import { Highlight } from '../highlight/Highlight';
55
import { BubbleDataProvider } from '../interfaces/dataprovider/BubbleDataProvider';
66
import { IBubbleDataSet } from '../interfaces/datasets/IBubbleDataSet';
77
import { BubbleChartRenderer } from '../renderer/BubbleChartRenderer';
8+
import { BaseCustomRenderer } from '../renderer/DataRenderer';
89
import { BarLineChartBase } from './BarLineChartBase';
910

10-
export interface CustomRenderer {
11+
export interface CustomRenderer extends BaseCustomRenderer {
1112
drawBubble: (c: Canvas, e: BubbleEntry, cx: number, cy: number, radius: number, paint: Paint) => void;
1213
drawHighlight: (c: Canvas, e: Highlight, cx: number, cy: number, radius: number, paint: Paint) => void;
1314
}

‎src/charting/charts/CandleStickChart.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@ import { Highlight } from '../highlight/Highlight';
55
import { CandleDataProvider } from '../interfaces/dataprovider/CandleDataProvider';
66
import { ICandleDataSet } from '../interfaces/datasets/ICandleDataSet';
77
import { CandleStickChartRenderer } from '../renderer/CandleStickChartRenderer';
8+
import { BaseCustomRenderer } from '../renderer/DataRenderer';
89
import { BarLineChartBase } from './BarLineChartBase';
910

10-
export interface CustomRenderer {
11+
export interface CustomRenderer extends BaseCustomRenderer {
1112
drawShadows: (c: Canvas, e: CandleEntry, lines: number[], paint: Paint) => void;
1213
drawOpened: (c: Canvas, e: CandleEntry, left: number, top: number, right: number, bottom: number, paint: Paint) => void;
1314
drawClosed: (c: Canvas, e: CandleEntry, left: number, top: number, right: number, bottom: number, paint: Paint) => void;

‎src/charting/charts/HorizontalBarChart.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ export class HorizontalBarChart extends BarChart {
101101
}
102102

103103
protected prepareValuePxMatrix() {
104-
if (this.mAxisRight.isEnabled()) {
104+
if (this.mAxisRight && this.mAxisRight.isEnabled()) {
105105
this.mRightAxisTransformer.prepareMatrixValuePx(this.mAxisRight.mAxisMinimum, this.mAxisRight.mAxisRange, this.mXAxis.mAxisRange, this.mXAxis.mAxisMinimum);
106106
}
107107
if (this.mAxisLeft.isEnabled()) {

‎src/charting/charts/LineChart.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import { LineDataSet } from '../data/LineDataSet';
66
import { LineChartRenderer } from '../renderer/LineChartRenderer';
77
import { Highlight } from '../highlight/Highlight';
88
import { Canvas, Paint, Path } from '@nativescript-community/ui-canvas';
9+
import { Color } from '@nativescript/core';
10+
import { BaseCustomRenderer } from '../renderer/DataRenderer';
911

10-
export interface CustomRenderer {
12+
export interface CustomRenderer extends BaseCustomRenderer {
1113
drawLine?: (c: Canvas, line: Path, paint: Paint) => void;
1214
drawHighlight?: (c: Canvas, e: Highlight, set: LineDataSet, paint: Paint) => void;
1315
}

‎src/charting/charts/PieChart.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import { CLog, CLogTypes, Utils } from '../utils/Utils';
1111
import { Font } from '@nativescript/core/ui/styling/font';
1212
import { Canvas, Paint, Path, RectF } from '@nativescript-community/ui-canvas';
1313
import { Trace } from '@nativescript/core';
14+
import { BaseCustomRenderer } from '../renderer/DataRenderer';
1415

1516
const LOG_TAG = 'PieChart';
1617

17-
export interface CustomRenderer {
18+
export interface CustomRenderer extends BaseCustomRenderer {
1819
drawSlice: (c: Canvas, e: Entry, slice: Path, paint: Paint) => void;
1920
drawHighlight: (c: Canvas, e: Highlight, slice: Path, paint: Paint) => void;
2021
}

‎src/charting/charts/RadarChart.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ import { XAxisRendererRadarChart } from '../renderer/XAxisRendererRadarChart';
1111
import { YAxisRendererRadarChart } from '../renderer/YAxisRendererRadarChart';
1212
import { CLog, CLogTypes, Utils } from '../utils/Utils';
1313
import { Highlight } from '../highlight/Highlight';
14+
import { BaseCustomRenderer } from '../renderer/DataRenderer';
1415

1516
const LOG_TAG = 'RadarChart';
16-
export interface CustomRenderer {
17+
export interface CustomRenderer extends BaseCustomRenderer {
1718
drawRadar: (c: Canvas, e: Entry, left: number, top: number, right: number, bottom: number, paint: Paint) => void;
1819
drawHighlight: (c: Canvas, e: Highlight, left: number, top: number, right: number, bottom: number, paint: Paint) => void;
1920
}

‎src/charting/charts/ScatterChart.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import { ScatterChartRenderer } from '../renderer/ScatterChartRenderer';
88
import { Canvas, Paint } from '@nativescript-community/ui-canvas';
99
import { Highlight } from '../highlight/Highlight';
1010
import { ViewPortHandler } from '../utils/ViewPortHandler';
11+
import { BaseCustomRenderer } from '../renderer/DataRenderer';
1112

12-
export interface CustomRenderer {
13+
export interface CustomRenderer extends BaseCustomRenderer {
1314
drawShape: (c: Canvas, e: Entry, dataSet: IScatterDataSet, viewPortHandler: ViewPortHandler, x: number, y: number, paint: Paint) => void;
1415
drawHighlight: (c: Canvas, e: Highlight, set: IScatterDataSet, paint: Paint) => void;
1516
}
@@ -21,7 +22,7 @@ export enum ScatterShape {
2122
CROSS = 'CROSS',
2223
X = 'X',
2324
CHEVRON_UP = 'CHEVRON_UP',
24-
CHEVRON_DOWN = 'CHEVRON_DOWN',
25+
CHEVRON_DOWN = 'CHEVRON_DOWN'
2526
}
2627
/**
2728
* The ScatterChart. Draws dots, triangles, squares and custom shapes into the

‎src/charting/renderer/AxisRenderer.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import { Align, Canvas, Paint, Path, RectF, Style } from '@nativescript-communit
44
import { ViewPortHandler } from '../utils/ViewPortHandler';
55
import { Transformer } from '../utils/Transformer';
66
import { Utils } from '../utils/Utils';
7+
import { BaseCustomRenderer } from './DataRenderer';
78

89
export type CustomRendererGridLineFunction = (c: Canvas, renderer: AxisRenderer, rect: RectF, x, y, axisValue, paint: Paint) => void;
9-
export interface CustomRenderer {
10+
export interface CustomRenderer extends BaseCustomRenderer {
1011
drawGridLine?: CustomRendererGridLineFunction;
1112
}
1213

‎src/charting/renderer/BarChartRenderer.ts

+9-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { BarLineScatterCandleBubbleRenderer } from './BarLineScatterCandleBubbleRenderer';
22
import { ChartAnimator } from '../animation/ChartAnimator';
33
import { BarBuffer } from '../buffer/BarBuffer';
4-
import { BarChart } from '../charts/BarChart';
4+
import { BarChart, CustomRenderer } from '../charts/BarChart';
55
import { Highlight } from '../highlight/Highlight';
66
import { IBarDataSet } from '../interfaces/datasets/IBarDataSet';
77
import { Transformer } from '../utils/Transformer';
@@ -220,6 +220,7 @@ export class BarChartRenderer extends BarLineScatterCandleBubbleRenderer {
220220
let negOffset = 0;
221221
const drawValueAboveBar = this.mChart.isDrawValueAboveBarEnabled();
222222
const paint = this.valuePaint;
223+
const customRender = this.mChart.getCustomRenderer();
223224
for (let i = 0; i < this.mChart.getBarData().getDataSetCount(); i++) {
224225
const dataSet = dataSets[i];
225226
if (!this.shouldDrawValues(dataSet)) {
@@ -238,7 +239,7 @@ export class BarChartRenderer extends BarLineScatterCandleBubbleRenderer {
238239
const valueTextHeight = Utils.calcTextHeight(paint, '8');
239240
const valuesOffset = dataSet.getValuesOffset();
240241
posOffset = drawValueAboveBar ? -(valueOffsetPlus + valuesOffset.y) : valueTextHeight + (valueOffsetPlus + valuesOffset.y);
241-
negOffset = drawValueAboveBar ? valueTextHeight + valueOffsetPlus : -valueOffsetPlus;
242+
negOffset = drawValueAboveBar ? valueTextHeight + (valueOffsetPlus + valuesOffset.y) : -(valueOffsetPlus + valuesOffset.y);
242243

243244
if (isInverted) {
244245
posOffset = -posOffset - valueTextHeight;
@@ -276,10 +277,11 @@ export class BarChartRenderer extends BarLineScatterCandleBubbleRenderer {
276277
this.drawValue(
277278
c,
278279
formatter.getBarLabel(val, entry),
279-
x,
280+
x + valuesOffset.x,
280281
val >= 0 ? buffer.buffer[j + 1] + posOffset : buffer.buffer[j + 3] + negOffset,
281282
dataSet.getValueTextColor(j / 4),
282-
paint
283+
paint,
284+
customRender
283285
);
284286
}
285287

@@ -329,7 +331,8 @@ export class BarChartRenderer extends BarLineScatterCandleBubbleRenderer {
329331
x,
330332
entry[yKey] >= 0 ? buffer.buffer[bufferIndex + 1] + posOffset : buffer.buffer[bufferIndex + 3] + negOffset,
331333
color,
332-
paint
334+
paint,
335+
customRender
333336
);
334337
}
335338

@@ -385,7 +388,7 @@ export class BarChartRenderer extends BarLineScatterCandleBubbleRenderer {
385388
}
386389

387390
if (dataSet.isDrawValuesEnabled()) {
388-
this.drawValue(c, formatter.getBarStackedLabel(val, entry), x, y, color, paint);
391+
this.drawValue(c, formatter.getBarStackedLabel(val, entry), x, y, color, paint, customRender);
389392
}
390393

391394
if (entry.icon != null && dataSet.isDrawIconsEnabled()) {
@@ -402,13 +405,6 @@ export class BarChartRenderer extends BarLineScatterCandleBubbleRenderer {
402405
}
403406
}
404407

405-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
406-
if (valueText) {
407-
paint.setColor(color);
408-
c.drawText(valueText, x, y, paint);
409-
}
410-
}
411-
412408
public drawHighlighted(c: Canvas, indices: Highlight[]) {
413409
const barData = this.mChart.getBarData();
414410
let entry: Entry, index: number;

‎src/charting/renderer/BarLineScatterCandleBubbleRenderer.ts

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import { ViewPortHandler } from '../utils/ViewPortHandler';
77
import { IDataSet } from '../interfaces/datasets/IDataSet';
88
import { Entry } from '../data/Entry';
99
import { BarLineScatterCandleBubbleDataSet } from '../data/BarLineScatterCandleBubbleDataSet';
10+
import { Canvas, Paint } from '@nativescript-community/ui-canvas';
11+
import { Color } from '@nativescript/core';
1012

1113
/**
1214
* Class representing the bounds of the current viewport in terms of indices in the values array of a DataSet.

‎src/charting/renderer/BubbleChartRenderer.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ export class BubbleChartRenderer extends BarLineScatterCandleBubbleRenderer {
118118
const paint = this.valuePaint;
119119
const lineHeight = Utils.calcTextHeight(paint, '1');
120120

121+
const customRender = this.mChart.getCustomRenderer();
121122
for (let i = 0; i < dataSets.length; i++) {
122123
const dataSet = dataSets[i];
123124
if (!this.shouldDrawValues(dataSet) || dataSet.getEntryCount() < 1) continue;
@@ -137,6 +138,7 @@ export class BubbleChartRenderer extends BarLineScatterCandleBubbleRenderer {
137138
const formatter = dataSet.getValueFormatter();
138139

139140
const iconsOffset = dataSet.getIconsOffset();
141+
const valuesOffset = dataSet.getValuesOffset();
140142
const isDrawValuesEnabled = dataSet.isDrawValuesEnabled();
141143
const isDrawIconsEnabled = dataSet.isDrawIconsEnabled();
142144
for (let j = 0; j < count; j += 2) {
@@ -158,7 +160,7 @@ export class BubbleChartRenderer extends BarLineScatterCandleBubbleRenderer {
158160
const entry = dataSet.getEntryForIndex(j / 2 + this.mXBounds.min);
159161

160162
if (isDrawValuesEnabled) {
161-
this.drawValue(c, formatter.getBubbleLabel(entry[dataSet.sizeProperty], entry), x, y + 0.5 * lineHeight, valueTextColor, paint);
163+
this.drawValue(c, formatter.getBubbleLabel(entry[dataSet.sizeProperty], entry), x + valuesOffset.x, y + valuesOffset.y + 0.5 * lineHeight, valueTextColor, paint, customRender);
162164
}
163165

164166
if (entry.icon && isDrawIconsEnabled) {
@@ -168,11 +170,6 @@ export class BubbleChartRenderer extends BarLineScatterCandleBubbleRenderer {
168170
}
169171
}
170172

171-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
172-
paint.setColor(color);
173-
c.drawText(valueText, x, y, paint);
174-
}
175-
176173
public drawExtras(c: Canvas) {}
177174

178175
public drawHighlighted(c: Canvas, indices: Highlight[]) {

‎src/charting/renderer/CandleStickChartRenderer.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ export class CandleStickChartRenderer extends LineScatterCandleRadarRenderer {
218218
}
219219
// if values are drawn
220220

221+
const customRender = this.mChart.getCustomRenderer();
221222
for (let i = 0; i < dataSets.length; i++) {
222223
const dataSet = dataSets[i];
223224

@@ -237,6 +238,7 @@ export class CandleStickChartRenderer extends LineScatterCandleRadarRenderer {
237238
const formatter = dataSet.getValueFormatter();
238239

239240
const iconsOffset = dataSet.getIconsOffset();
241+
const valuesOffset = dataSet.getValuesOffset();
240242

241243
const paint = this.valuePaint;
242244
for (let j = 0; j < count; j += 2) {
@@ -250,7 +252,7 @@ export class CandleStickChartRenderer extends LineScatterCandleRadarRenderer {
250252
const entry = dataSet.getEntryForIndex(j / 2 + this.mXBounds.min);
251253

252254
if (dataSet.isDrawValuesEnabled()) {
253-
this.drawValue(c, formatter.getCandleLabel(entry.high, entry), x, y - yOffset, dataSet.getValueTextColor(j / 2), paint);
255+
this.drawValue(c, formatter.getCandleLabel(entry.high, entry), x + valuesOffset.x, y - yOffset + valuesOffset.y, dataSet.getValueTextColor(j / 2), paint, customRender);
254256
}
255257

256258
if (entry.icon && dataSet.isDrawIconsEnabled()) {
@@ -260,11 +262,6 @@ export class CandleStickChartRenderer extends LineScatterCandleRadarRenderer {
260262
}
261263
}
262264

263-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
264-
paint.setColor(color);
265-
c.drawText(valueText, x, y, paint);
266-
}
267-
268265
public drawExtras(c: Canvas) {}
269266

270267
public drawHighlighted(c: Canvas, indices: Highlight[]) {

‎src/charting/renderer/CombinedChartRenderer.ts

-4
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,6 @@ export class CombinedChartRenderer extends DataRenderer {
7171
for (const renderer of this.mRenderers) renderer.drawData(c);
7272
}
7373

74-
public drawValue(c: Canvas, valueText, x, y, color) {
75-
console.error('MPAndroidChart', 'Erroneous call to drawValue() in CombinedChartRenderer!');
76-
}
77-
7874
public drawValues(c: Canvas) {
7975
for (const renderer of this.mRenderers) renderer.drawValues(c);
8076
}

‎src/charting/renderer/DataRenderer.ts

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import { Align, Canvas, Paint, Style } from '@nativescript-community/ui-canvas';
2+
import { Color } from '@nativescript/core';
23
import { ChartAnimator } from '../animation/ChartAnimator';
34
import { Highlight } from '../highlight/Highlight';
45
import { ChartInterface } from '../interfaces/dataprovider/ChartInterface';
56
import { IDataSet } from '../interfaces/datasets/IDataSet';
67
import { ViewPortHandler } from '../utils/ViewPortHandler';
78
import { Renderer } from './Renderer';
89

10+
export interface BaseCustomRenderer {
11+
drawValue: (c: Canvas, valueText: string, x: number, y: number, color: Color, paint: Paint) => void;
12+
}
13+
914
/**
1015
* Superclass of all render classes for the different data types (line, bar, ...).
1116
*
@@ -117,7 +122,16 @@ export abstract class DataRenderer extends Renderer {
117122
* @param color
118123
* @param paint
119124
*/
120-
public abstract drawValue(c: Canvas, valueText, x, y, color, paint: Paint);
125+
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint, customRender?: BaseCustomRenderer) {
126+
if (valueText) {
127+
if (customRender && customRender.drawValue) {
128+
customRender.drawValue(c, valueText, x, y, color, paint);
129+
} else {
130+
paint.setColor(color);
131+
c.drawText(valueText, x, y, paint);
132+
}
133+
}
134+
}
121135

122136
/**
123137
* Draws any kind of additional information (e.g. line-circles).

‎src/charting/renderer/HorizontalBarChartRenderer.ts

+19-15
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ export class HorizontalBarChartRenderer extends BarChartRenderer {
148148
const drawValueAboveBar = this.mChart.isDrawValueAboveBarEnabled();
149149

150150
const paint = this.valuePaint;
151+
const customRender = this.mChart.getCustomRenderer();
151152
for (let i = 0; i < this.mChart.getBarData().getDataSetCount(); i++) {
152153
const dataSet = dataSets[i];
153154
if (!this.shouldDrawValues(dataSet)) {
@@ -169,6 +170,7 @@ export class HorizontalBarChartRenderer extends BarChartRenderer {
169170
const phaseY = this.mAnimator.getPhaseY();
170171

171172
const iconsOffset = dataSet.getIconsOffset();
173+
const valuesOffset = dataSet.getValuesOffset();
172174

173175
const isDrawValuesEnabled = dataSet.isDrawValuesEnabled();
174176
const isDrawIconsEnabled = dataSet.isDrawIconsEnabled();
@@ -196,16 +198,24 @@ export class HorizontalBarChartRenderer extends BarChartRenderer {
196198

197199
// calculate the correct offset depending on the draw position of the value
198200
const valueTextWidth = Utils.calcTextWidth(paint, formattedValue);
199-
posOffset = drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus);
200-
negOffset = drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus;
201+
posOffset = drawValueAboveBar ? valueOffsetPlus + valuesOffset.x : -(valueTextWidth + valueOffsetPlus + valuesOffset.x);
202+
negOffset = drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus + valuesOffset.x) : valueOffsetPlus + valuesOffset.x;
201203

202204
if (isInverted) {
203205
posOffset = -posOffset - valueTextWidth;
204206
negOffset = -negOffset - valueTextWidth;
205207
}
206208

207209
if (isDrawValuesEnabled) {
208-
this.drawValue(c, formattedValue, val >= 0 ? buffer.buffer[j + 2] + posOffset : buffer.buffer[j + 0] + negOffset, y + halfTextHeight, dataSet.getValueTextColor(j / 2), paint);
210+
this.drawValue(
211+
c,
212+
formattedValue,
213+
val >= 0 ? buffer.buffer[j + 2] + posOffset : buffer.buffer[j + 0] + negOffset,
214+
y + valuesOffset.y + halfTextHeight,
215+
dataSet.getValueTextColor(j / 2),
216+
paint,
217+
customRender
218+
);
209219
}
210220

211221
if (entry.icon != null && dataSet.isDrawIconsEnabled()) {
@@ -266,9 +276,10 @@ export class HorizontalBarChartRenderer extends BarChartRenderer {
266276
c,
267277
formattedValue,
268278
entry[yKey] >= 0 ? buffer.buffer[bufferIndex + 2] + posOffset : buffer.buffer[bufferIndex + 0] + negOffset,
269-
buffer.buffer[bufferIndex + 1] + halfTextHeight,
279+
buffer.buffer[bufferIndex + 1] + halfTextHeight + valuesOffset.y,
270280
color,
271-
paint
281+
paint,
282+
customRender
272283
);
273284
}
274285

@@ -316,8 +327,8 @@ export class HorizontalBarChartRenderer extends BarChartRenderer {
316327

317328
// calculate the correct offset depending on the draw position of the value
318329
const valueTextWidth = Utils.calcTextWidth(paint, formattedValue);
319-
posOffset = drawValueAboveBar ? valueOffsetPlus : -(valueTextWidth + valueOffsetPlus);
320-
negOffset = drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus) : valueOffsetPlus;
330+
posOffset = drawValueAboveBar ? valueOffsetPlus + valuesOffset.x : -(valueTextWidth + valueOffsetPlus + valuesOffset.x);
331+
negOffset = drawValueAboveBar ? -(valueTextWidth + valueOffsetPlus + valuesOffset.x) : valueOffsetPlus + valuesOffset.x;
321332

322333
if (isInverted) {
323334
posOffset = -posOffset - valueTextWidth;
@@ -341,7 +352,7 @@ export class HorizontalBarChartRenderer extends BarChartRenderer {
341352
}
342353

343354
if (isDrawValuesEnabled) {
344-
this.drawValue(c, formattedValue, x, y + halfTextHeight, color, paint);
355+
this.drawValue(c, formattedValue, x, y + halfTextHeight + valuesOffset.y, color, paint, customRender);
345356
}
346357

347358
if (isDrawIconsEnabled && entry.icon != null) {
@@ -358,13 +369,6 @@ export class HorizontalBarChartRenderer extends BarChartRenderer {
358369
}
359370
}
360371

361-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
362-
if (valueText) {
363-
paint.setColor(color);
364-
c.drawText(valueText, x, y, paint);
365-
}
366-
}
367-
368372
protected prepareBarHighlight(x: number, y1: number, y2: number, barWidthHalf: number, trans: Transformer) {
369373
const top = x - barWidthHalf;
370374
const bottom = x + barWidthHalf;

‎src/charting/renderer/LineChartRenderer.ts

+3-8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Canvas, Direction, FillType, Matrix, Paint, Path, Style, createImage, r
22
import { Color, ImageSource, profile } from '@nativescript/core';
33
import { ChartAnimator } from '../animation/ChartAnimator';
44
import { LineChart } from '../charts';
5+
import { CustomRenderer } from '../charts/LineChart';
56
import { getEntryXValue } from '../data/BaseEntry';
67
import { Rounding } from '../data/DataSet';
78
import { LineDataSet, Mode } from '../data/LineDataSet';
@@ -673,6 +674,7 @@ export class LineChartRenderer extends LineRadarRenderer {
673674
const drawValues = dataSet.isDrawValuesEnabled();
674675
const length = count;
675676
const paint = this.valuePaint;
677+
const customRender = this.mChart.getCustomRenderer();
676678
for (let j = 0; j < length; j += 2) {
677679
const x = points[j];
678680
const y = points[j + 1];
@@ -686,7 +688,7 @@ export class LineChartRenderer extends LineRadarRenderer {
686688
if (!entry) continue;
687689

688690
if (drawValues) {
689-
this.drawValue(c, formatter.getFormattedValue(entry[yKey], entry), valuesOffset.x + x, valuesOffset.y + y - valOffset, dataSet.getValueTextColor(j / 2), paint);
691+
this.drawValue(c, formatter.getFormattedValue(entry[yKey], entry), valuesOffset.x + x, valuesOffset.y + y - valOffset, dataSet.getValueTextColor(j / 2), paint, customRender);
690692
}
691693

692694
if (drawIcons && entry.icon != null) {
@@ -711,13 +713,6 @@ export class LineChartRenderer extends LineRadarRenderer {
711713
}
712714
}
713715

714-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
715-
if (valueText) {
716-
paint.setColor(color);
717-
c.drawText(valueText, x, y, paint);
718-
}
719-
}
720-
721716
public drawExtras(c: Canvas) {
722717
this.drawCircles(c);
723718
}

‎src/charting/renderer/PieChartRenderer.ts

+6-9
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ export class PieChartRenderer extends DataRenderer {
428428

429429
const paint = this.valuePaint;
430430
const entryLabelsPaint: Paint = drawEntryLabels ? this.entryLabelsPaint : undefined;
431+
const customRender = this.mChart.getCustomRenderer();
431432
for (let i = 0; i < dataSets.length; i++) {
432433
const dataSet = dataSets[i];
433434
const drawValues = dataSet.isDrawValuesEnabled();
@@ -455,6 +456,7 @@ export class PieChartRenderer extends DataRenderer {
455456
const sliceSpace = this.getSliceSpace(dataSet);
456457

457458
const iconsOffset = dataSet.getIconsOffset();
459+
const valuesOffset = dataSet.getValuesOffset();
458460

459461
const isDrawIconsEnabled = dataSet.isDrawIconsEnabled();
460462
for (let j = 0; j < entryCount; j++) {
@@ -548,7 +550,7 @@ export class PieChartRenderer extends DataRenderer {
548550

549551
// draw everything, depending on settings
550552
if (drawXOutside && drawYOutside) {
551-
this.drawValue(c, formattedValue, labelPtx, labelPty, dataSet.getValueTextColor(j), paint);
553+
this.drawValue(c, formattedValue, labelPtx + valuesOffset.x, labelPty + valuesOffset.y, dataSet.getValueTextColor(j), paint, customRender);
552554

553555
if (j < data.getEntryCount() && entryLabel != null) {
554556
this.drawEntryLabel(c, entryLabel, labelPtx, labelPty + lineHeight, entryLabelsPaint);
@@ -558,7 +560,7 @@ export class PieChartRenderer extends DataRenderer {
558560
this.drawEntryLabel(c, entryLabel, labelPtx, labelPty + lineHeight / 2, entryLabelsPaint);
559561
}
560562
} else if (drawYOutside) {
561-
this.drawValue(c, formattedValue, labelPtx, labelPty + lineHeight / 2, dataSet.getValueTextColor(j), paint);
563+
this.drawValue(c, formattedValue, labelPtx + valuesOffset.x, labelPty + valuesOffset.y + lineHeight / 2, dataSet.getValueTextColor(j), paint, customRender);
562564
}
563565
}
564566

@@ -571,7 +573,7 @@ export class PieChartRenderer extends DataRenderer {
571573

572574
// draw everything, depending on settings
573575
if (drawXInside && drawYInside) {
574-
this.drawValue(c, formattedValue, x, y, dataSet.getValueTextColor(j), paint);
576+
this.drawValue(c, formattedValue, x + valuesOffset.x, y + valuesOffset.y, dataSet.getValueTextColor(j), paint, customRender);
575577

576578
if (j < data.getEntryCount() && entryLabel != null) {
577579
this.drawEntryLabel(c, entryLabel, x, y + lineHeight, entryLabelsPaint);
@@ -581,7 +583,7 @@ export class PieChartRenderer extends DataRenderer {
581583
this.drawEntryLabel(c, entryLabel, x, y + lineHeight / 2, entryLabelsPaint);
582584
}
583585
} else if (drawYInside) {
584-
this.drawValue(c, formattedValue, x, y + lineHeight / 2, dataSet.getValueTextColor(j), paint);
586+
this.drawValue(c, formattedValue, x + valuesOffset.x, y + valuesOffset.y + lineHeight / 2, dataSet.getValueTextColor(j), paint, customRender);
585587
}
586588
}
587589

@@ -601,11 +603,6 @@ export class PieChartRenderer extends DataRenderer {
601603
c.restore();
602604
}
603605

604-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
605-
paint.setColor(color);
606-
c.drawText(valueText, x, y, paint);
607-
}
608-
609606
/**
610607
* Draws an entry label at the specified position.
611608
*

‎src/charting/renderer/RadarChartRenderer.ts

+3-6
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ export class RadarChartRenderer extends LineRadarRenderer {
180180
const pIcon: MPPointF = { x: 0, y: 0 };
181181

182182
const yoffset = 5;
183+
const customRender = this.mChart.getCustomRenderer();
183184
for (let i = 0; i < data.getDataSetCount(); i++) {
184185
const dataSet = data.getDataSetByIndex(i);
185186
if (!this.shouldDrawValues(dataSet) || dataSet.getEntryCount() < 1) continue;
@@ -199,14 +200,15 @@ export class RadarChartRenderer extends LineRadarRenderer {
199200
const formatter = dataSet.getValueFormatter();
200201

201202
const iconsOffset = dataSet.getIconsOffset();
203+
const valuesOffset = dataSet.getValuesOffset();
202204
const paint = this.valuePaint;
203205
for (let j = 0; j < dataSet.getEntryCount(); j++) {
204206
const entry = dataSet.getEntryForIndex(j);
205207

206208
Utils.getPosition(center, (entry[yProperty] - this.mChart.getYChartMin()) * factor * phaseY, sliceangle * j * phaseX + this.mChart.getRotationAngle(), pOut);
207209

208210
if (drawValues) {
209-
this.drawValue(c, formatter.getRadarLabel(entry[yProperty], entry), pOut.x, pOut.y - yoffset, dataSet.getValueTextColor(j), paint);
211+
this.drawValue(c, formatter.getRadarLabel(entry[yProperty], entry), pOut.x + valuesOffset.x, pOut.y + valuesOffset.y - yoffset, dataSet.getValueTextColor(j), paint, customRender);
210212
}
211213

212214
if (drawIcons && entry.icon != null) {
@@ -229,11 +231,6 @@ export class RadarChartRenderer extends LineRadarRenderer {
229231
// MPPointF.recycleInstance(pIcon);
230232
}
231233

232-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
233-
paint.setColor(color);
234-
c.drawText(valueText, x, y, paint);
235-
}
236-
237234
public drawExtras(c: Canvas) {
238235
this.drawWeb(c);
239236
}

‎src/charting/renderer/ScatterChartRenderer.ts

+11-6
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ export class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
9090
}
9191
// if values are drawn
9292

93+
const customRender = this.mChart.getCustomRenderer();
9394
for (let i = 0; i < this.mChart.getScatterData().getDataSetCount(); i++) {
9495
const dataSet = dataSets[i];
9596
const yKey = dataSet.yProperty;
@@ -110,6 +111,7 @@ export class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
110111
const formatter = dataSet.getValueFormatter();
111112

112113
const iconsOffset = dataSet.getIconsOffset();
114+
const valuesOffset = dataSet.getValuesOffset();
113115
const drawValues = dataSet.isDrawValuesEnabled();
114116
const drawIcons = dataSet.isDrawIconsEnabled();
115117
const paint = this.valuePaint;
@@ -122,7 +124,15 @@ export class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
122124
const entry = dataSet.getEntryForIndex(j / 2 + this.mXBounds.min);
123125

124126
if (drawValues) {
125-
this.drawValue(c, formatter.getPointLabel(entry[yKey], entry), points[j], points[j + 1] - shapeSize, dataSet.getValueTextColor(j / 2 + this.mXBounds.min), paint);
127+
this.drawValue(
128+
c,
129+
formatter.getPointLabel(entry[yKey], entry),
130+
points[j] + valuesOffset.x,
131+
points[j + 1] + valuesOffset.y - shapeSize,
132+
dataSet.getValueTextColor(j / 2 + this.mXBounds.min),
133+
paint,
134+
customRender
135+
);
126136
}
127137

128138
if (drawIcons && entry.icon) {
@@ -132,11 +142,6 @@ export class ScatterChartRenderer extends LineScatterCandleRadarRenderer {
132142
}
133143
}
134144

135-
public drawValue(c: Canvas, valueText, x, y, color, paint: Paint) {
136-
paint.setColor(color);
137-
c.drawText(valueText, x, y, paint);
138-
}
139-
140145
public drawExtras(c: Canvas) {}
141146

142147
public drawHighlighted(c: Canvas, indices: Highlight[]) {

0 commit comments

Comments
 (0)
Please sign in to comment.