Skip to content

Commit 7c1fbac

Browse files
committed
fix: more flexible drawValues and value formatter
1 parent 423b79a commit 7c1fbac

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

src/charting/formatter/IValueFormatter.ts

+4
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ export interface IValueFormatter {
1414
*
1515
* @param value the value to be formatted
1616
* @param entry the entry the value belongs to - in e.g. BarChart, this is of class BarEntry
17+
* @param index index of the drawn value
18+
* @param count total number of values drawn (useful to draw first or last)
1719
* @param dataSetIndex the index of the DataSet the entry in focus belongs to
1820
* @param viewPortHandler provides information about the current chart state (scale, translation, ...)
1921
* @return the formatted label ready for being drawn
@@ -23,6 +25,8 @@ export interface IValueFormatter {
2325
getFormattedValue(
2426
value: number,
2527
entry: Entry,
28+
index,
29+
count,
2630
dataSetIndex,
2731
viewPortHandler
2832
): string;

src/charting/renderer/LineChartRenderer.ts

+17-7
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ export class LineChartRenderer extends LineRadarRenderer {
510510
private mLineBuffer: number[];
511511

512512
@profile
513-
public drawValuesForDataset(c: Canvas, dataSet: LineDataSet) {
513+
public drawValuesForDataset(c: Canvas, dataSet: LineDataSet, dataSetIndex: number) {
514514
const yKey = dataSet.yProperty;
515515
// apply the text-styling defined by the DataSet
516516
this.applyValueTextStyle(dataSet);
@@ -524,26 +524,36 @@ export class LineChartRenderer extends LineRadarRenderer {
524524

525525
this.mXBounds.set(this.mChart, dataSet, this.mAnimator);
526526

527-
const positions = trans.generateTransformedValues(dataSet, this.mAnimator.getPhaseX(), this.mAnimator.getPhaseY(), this.mXBounds.min, this.mXBounds.max);
527+
const { points, count } = trans.generateTransformedValues(dataSet, this.mAnimator.getPhaseX(), this.mAnimator.getPhaseY(), this.mXBounds.min, this.mXBounds.max);
528528
const formatter = dataSet.getValueFormatter();
529529

530530
const iconsOffset = dataSet.getIconsOffset();
531531
const valuesOffset = dataSet.getValuesOffset();
532532
const drawIcons = dataSet.isDrawIconsEnabled();
533533
const drawValues = dataSet.isDrawValuesEnabled();
534-
for (let j = 0; j < positions.length; j += 2) {
535-
let x = positions[j];
536-
let y = positions[j + 1];
534+
const length = count;
535+
const dataSetCount = dataSet.getEntryCount();
536+
for (let j = 0; j < length; j += 2) {
537+
let x = points[j];
538+
let y = points[j + 1];
537539

538540
if (!this.mViewPortHandler.isInBoundsRight(x)) break;
539541

540542
if (!this.mViewPortHandler.isInBoundsLeft(x) || !this.mViewPortHandler.isInBoundsY(y)) continue;
541543

542-
let entry = dataSet.getEntryForIndex(j / 2 + this.mXBounds.min);
544+
const index = j / 2 + this.mXBounds.min;
545+
let entry = dataSet.getEntryForIndex(index);
543546
if (!entry) continue;
544547

545548
if (drawValues) {
546-
this.drawValue(c, formatter.getFormattedValue(entry[yKey]), valuesOffset.x + x, valuesOffset.y + y - valOffset, dataSet.getValueTextColor(j / 2));
549+
// console.log('drawValue', entry[yKey], entry, index, dataSetCount);
550+
this.drawValue(
551+
c,
552+
formatter.getFormattedValue(entry[yKey], entry, index, dataSetCount, dataSetIndex, this.mViewPortHandler),
553+
valuesOffset.x + x,
554+
valuesOffset.y + y - valOffset,
555+
dataSet.getValueTextColor(j / 2)
556+
);
547557
}
548558

549559
if (drawIcons && entry.icon != null) {

src/charting/utils/Transformer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export class Transformer {
121121
// let count = (to - from + 1) * 2; // Math.ceil((to - from) * phaseX) * 2;
122122

123123
if (!this.valuePointsForGenerateTransformedValues || this.valuePointsForGenerateTransformedValues.length < count) {
124-
this.valuePointsForGenerateTransformedValues = Utils.createArrayBuffer(count);;
124+
this.valuePointsForGenerateTransformedValues = Utils.createArrayBuffer(count);
125125
}
126126
// let valuePoints = this.valuePointsForGenerateTransformedValues;
127127
const valuePoints = this.valuePointsForGenerateTransformedValues;
@@ -143,7 +143,7 @@ export class Transformer {
143143

144144
this.getValueToPixelMatrix().mapPoints(points);
145145

146-
return points;
146+
return {points, count};
147147
}
148148

149149
// protected valuePointsForGenerateTransformedValuesLine = [];

0 commit comments

Comments
 (0)