drawDataPoints method
void
drawDataPoints(
)
override
Implementation
@override
void drawDataPoints() {
var minY = getLabelMinY();
var maxY = getLabelMaxY();
var totalBarWidth = getBarWidth();
var barMinPxX = gridMinPxX;
var barMaxPxX = gridMaxPxX;
if (maxLabelWidthX > getBarWidth()) {
barMinPxX = gridMinPxX + max(0, (maxLabelWidthX - getBarWidth())/2);
barMaxPxX = gridMaxPxX - max(0, (maxLabelWidthX - getBarWidth())/2);
}
var barSetIndex = 0;
var spaceX = (barMaxPxX - totalBarWidth - barMinPxX) / (_dataPoints.length - 1);
var alignmentOffsetX = 0.0;
if (_dataPoints.length == 1) { // Start to draw from the center
alignmentOffsetX = (barMaxPxX - barMinPxX - totalBarWidth)/2 - barMinPxX - totalBarWidth/2;
spaceX = 0;
}
_hoverPaths.clear();
for (var x in keys) {
var mapPoints = _dataPoints[x];
var barIndex = 0;
for (var graphName in _graphKeys) {
var y = mapPoints![graphName];
if (y == null) {
barIndex++;
continue;
}
var offset = barIndex * singleBarWidth + barIndex * barMargin + spaceX * barSetIndex + alignmentOffsetX;
// Clamp the value so it does not get drawn outside the graph.
var clampedQ3Y = min(y.q3, maxY);
var clampedQ1Y = max(y.q1, minY);
var centerBarPxYStart = lerp(clampedQ3Y, minY, maxY, gridMaxPxY, gridMinPxY);
var centerBarPxYEnd = lerp(clampedQ1Y, minY, maxY, gridMaxPxY, gridMinPxY);
ctx.fillStyle = (barFillStyle[graphName] ?? barFillStyle[keyAllGraph])!.toJS;
ctx.fillRect(barMinPxX + offset, centerBarPxYStart, singleBarWidth, max(centerBarPxYEnd - centerBarPxYStart, 1));
var minLinePxY = centerBarPxYStart;
var maxLinePxY = centerBarPxYEnd;
// Draw the max point line
if (y.max <= maxY) {
ctx.strokeStyle = (barFillStyle[graphName] ?? barFillStyle[keyAllGraph])!.toJS;
ctx.beginPath();
maxLinePxY = lerp(y.max, minY, maxY, gridMaxPxY, gridMinPxY);
ctx.moveTo(barMinPxX + offset, maxLinePxY);
ctx.lineTo(barMinPxX + offset + singleBarWidth, maxLinePxY);
ctx.stroke();
}
// Draw the min point line
if (y.min >= minY) {
ctx.strokeStyle = (barFillStyle[graphName] ?? barFillStyle[keyAllGraph])!.toJS;
ctx.beginPath();
minLinePxY = lerp(y.min, minY, maxY, gridMaxPxY, gridMinPxY);
ctx.moveTo(barMinPxX + offset, minLinePxY);
ctx.lineTo(barMinPxX + offset + singleBarWidth, minLinePxY);
ctx.stroke();
}
// Draw the center line
ctx.beginPath();
ctx.moveTo(barMinPxX + offset + singleBarWidth/2, minLinePxY);
ctx.lineTo(barMinPxX + offset + singleBarWidth/2, maxLinePxY);
ctx.stroke();
var hoverBar = Path2D();
hoverBar.rect(barMinPxX + offset, maxLinePxY, singleBarWidth, max(minLinePxY - maxLinePxY, 1));
var hoverPath = _BarHoverPath(hoverBar, barMinPxX + offset, maxLinePxY, max(minLinePxY - maxLinePxY, 1));
if (_hoverPaths[x] == null) {
_hoverPaths[x] = {graphName: hoverPath};
} else {
_hoverPaths[x]![graphName] = hoverPath;
}
barIndex++;
}
barSetIndex++;
}
}