Fix: Don't use clip/unclipArea when clip: false (#9286)

This commit is contained in:
Jukka Kurkela 2021-06-18 21:11:33 +03:00 committed by GitHub
parent 8d3b64bb3c
commit 4002694e26
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 14 deletions

View File

@ -1,6 +1,6 @@
import DatasetController from '../core/core.datasetController';
import {
clipArea, unclipArea, _arrayUnique, isArray, isNullOrUndef,
_arrayUnique, isArray, isNullOrUndef,
valueOrDefault, resolveObjectKey, sign, defined
} from '../helpers';
@ -224,6 +224,14 @@ export default class BarController extends DatasetController {
}
}
/**
* @return {number|boolean}
* @protected
*/
getMaxOverflow() {
return 0;
}
/**
* @protected
*/
@ -514,22 +522,17 @@ export default class BarController extends DatasetController {
draw() {
const me = this;
const chart = me.chart;
const meta = me._cachedMeta;
const vScale = meta.vScale;
const rects = meta.data;
const ilen = rects.length;
let i = 0;
clipArea(chart.ctx, chart.chartArea);
for (; i < ilen; ++i) {
if (me.getParsed(i)[vScale.axis] !== null) {
rects[i].draw(me._ctx);
}
}
unclipArea(chart.ctx);
}
}

View File

@ -706,6 +706,7 @@ class Chart {
const me = this;
const ctx = me.ctx;
const clip = meta._clip;
const useClip = !clip.disabled;
const area = me.chartArea;
const args = {
meta,
@ -717,16 +718,20 @@ class Chart {
return;
}
clipArea(ctx, {
left: clip.left === false ? 0 : area.left - clip.left,
right: clip.right === false ? me.width : area.right + clip.right,
top: clip.top === false ? 0 : area.top - clip.top,
bottom: clip.bottom === false ? me.height : area.bottom + clip.bottom
});
if (useClip) {
clipArea(ctx, {
left: clip.left === false ? 0 : area.left - clip.left,
right: clip.right === false ? me.width : area.right + clip.right,
top: clip.top === false ? 0 : area.top - clip.top,
bottom: clip.bottom === false ? me.height : area.bottom + clip.bottom
});
}
meta.controller.draw();
unclipArea(ctx);
if (useClip) {
unclipArea(ctx);
}
args.cancelable = false;
me.notifyPlugins('afterDatasetDraw', args);

View File

@ -51,7 +51,8 @@ function toClip(value) {
top: t,
right: r,
bottom: b,
left: l
left: l,
disabled: value === false
};
}

View File

@ -1628,4 +1628,31 @@ describe('Chart.controllers.bar', function() {
expect(chart.scales.y.getMinMax()).toEqual({min: -10, max: 10});
});
});
describe('clip', function() {
it('Should not use ctx.clip when clip=false', function() {
var ctx = window.createMockContext();
ctx.resetTransform = function() {};
var chart = window.acquireChart({
type: 'bar',
data: {
labels: ['a', 'b', 'c'],
datasets: [{
data: [1, 2, 3],
clip: false
}]
}
});
var orig = chart.ctx;
// Draw on mock context
chart.ctx = ctx;
chart.draw();
chart.ctx = orig;
expect(ctx.getCalls().filter(x => x.name === 'clip').length).toEqual(0);
});
});
});