Skip to content

Commit 58ff562

Browse files
committed
feat: fill shader support
1 parent 34aed4b commit 58ff562

File tree

4 files changed

+48
-20
lines changed

4 files changed

+48
-20
lines changed

src/charting/data/LineRadarDataSet.ts

+17
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ export abstract class LineRadarDataSet<T extends Entry> extends LineScatterCandl
2020
*/
2121
protected mFillDrawable;
2222

23+
/**
24+
* the shader to be used for filling the line surface
25+
*/
26+
protected mFillShader;
27+
2328
/**
2429
* transparency used for filling line surface
2530
*/
@@ -49,6 +54,18 @@ export abstract class LineRadarDataSet<T extends Entry> extends LineScatterCandl
4954
this.mFillColor = color;
5055
this.mFillDrawable = null;
5156
}
57+
/**
58+
* Sets the shader that is used for filling the area below the line
59+
*
60+
* @param shader
61+
*/
62+
public setFillShader(shader) {
63+
this.mFillShader = shader;
64+
}
65+
public getFillShader() {
66+
return this.mFillShader;
67+
}
68+
5269

5370
public getFillDrawable() {
5471
return this.mFillDrawable;

src/charting/interfaces/datasets/ILineRadarDataSet.ts

+6
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ export interface ILineRadarDataSet<T extends Entry> extends ILineScatterCandleRa
1818
* @return
1919
*/
2020
getFillDrawable();
21+
/**
22+
* Returns the shader used for filling the area below the line.
23+
*
24+
* @return
25+
*/
26+
getFillShader();
2127

2228
/**
2329
* Returns the alpha value that is used for filling the line surface,

src/charting/renderer/LineChartRenderer.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -478,9 +478,9 @@ export class LineChartRenderer extends LineRadarRenderer {
478478

479479
const drawable = dataSet.getFillDrawable();
480480
if (drawable != null) {
481-
this.drawFilledPathBitmap(c, spline, drawable);
481+
this.drawFilledPathBitmap(c, spline, drawable, dataSet.getFillShader());
482482
} else {
483-
this.drawFilledPath(c, spline, dataSet.getFillColor(), dataSet.getFillAlpha());
483+
this.drawFilledPath(c, spline, dataSet.getFillColor(), dataSet.getFillAlpha(), dataSet.getFillShader());
484484
}
485485
}
486486

src/charting/renderer/LineRadarRenderer.ts

+23-18
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export abstract class LineRadarRenderer extends LineScatterCandleRadarRenderer {
2424
* @param drawable
2525
*/
2626
@profile
27-
protected drawFilledPathBitmap(c: Canvas, filledPath: Path, drawable) {
27+
protected drawFilledPathBitmap(c: Canvas, filledPath: Path, drawable, shader) {
2828
if (this.clipPathSupported()) {
2929
let save = c.save();
3030
// c.scale(1, 1/SCALE_FACTOR, 0, this.mViewPortHandler.contentBottom())
@@ -57,35 +57,40 @@ export abstract class LineRadarRenderer extends LineScatterCandleRadarRenderer {
5757
* @param fillAlpha
5858
*/
5959
@profile
60-
protected drawFilledPath(c: Canvas, filledPath: Path, fillColor: Color | string, fillAlpha: number = 1) {
60+
protected drawFilledPath(c: Canvas, filledPath: Path, fillColor: Color | string, fillAlpha: number = 255, shader?) {
6161
let color = fillColor;
6262
if (fillAlpha < 255) {
63-
fillColor = fillColor instanceof Color ? fillColor : new Color(fillColor);
63+
fillColor = fillColor instanceof Color ? fillColor : new Color(fillColor);
6464
color = new Color(fillAlpha, fillColor.r, fillColor.g, fillColor.b);
6565
}
6666

67+
// save
68+
const previous = this.mRenderPaint.getStyle();
69+
let previousColor = this.mRenderPaint.getColor();
70+
let previousShader = this.mRenderPaint.getShader();
71+
72+
this.mRenderPaint.setStyle(Style.FILL);
73+
74+
if (shader) {
75+
this.mRenderPaint.setColor('black');
76+
this.mRenderPaint.setShader(shader);
77+
} else {
78+
this.mRenderPaint.setColor(color);
79+
80+
}
81+
6782
if (this.clipPathSupported()) {
6883
let save = c.save();
69-
// c.scale(1, 1/SCALE_FACTOR, 0, this.mViewPortHandler.contentBottom())
7084
c.clipPath(filledPath);
71-
72-
c.drawColor(color);
85+
c.drawPaint(this.mRenderPaint);
7386
c.restoreToCount(save);
7487
} else {
75-
// save
76-
const previous = this.mRenderPaint.getStyle();
77-
let previousColor = this.mRenderPaint.getColor();
78-
79-
// set
80-
this.mRenderPaint.setStyle(Style.FILL);
81-
this.mRenderPaint.setColor(color);
8288
this.drawPath(c, filledPath, this.mRenderPaint);
83-
// c.drawPath(filledPath, this.mRenderPaint);
84-
85-
// restore
86-
this.mRenderPaint.setColor(previousColor);
87-
this.mRenderPaint.setStyle(previous);
8889
}
90+
// restore
91+
this.mRenderPaint.setColor(previousColor);
92+
this.mRenderPaint.setShader(previousShader);
93+
this.mRenderPaint.setStyle(previous);
8994
}
9095

9196
/**

0 commit comments

Comments
 (0)