drawAxisLabels method
Implementation
void drawAxisLabels(Canvas canvas, Size size) {
final adaptiveStep = calculateAdaptiveStep(scale);
final textConfiguration = TextStyle(
fontSize: theme.labelFontSize,
color: theme.labelColor,
fontWeight: FontWeight.w500,
);
final activeTextPainter = TextPainter(textDirection: TextDirection.ltr);
final startXBound =
((-origin.dx) / scale / adaptiveStep).floor() * adaptiveStep;
final endXBound =
((size.width - origin.dx) / scale / adaptiveStep).ceil() * adaptiveStep;
final startYBound =
(-(size.height - origin.dy) / scale / adaptiveStep).floor() *
adaptiveStep;
final endYBound = (origin.dy / scale / adaptiveStep).ceil() * adaptiveStep;
for (double xValue = startXBound;
xValue <= endXBound + adaptiveStep;
xValue += adaptiveStep) {
if (xValue.abs() < 1e-9) continue;
final pixelX = origin.dx + xValue * scale;
final labelYPosition = (origin.dy + 8).clamp(8.0, size.height - 20.0);
renderTextSpan(
canvas,
activeTextPainter,
formatNumber(xValue),
Offset(pixelX, labelYPosition),
textConfiguration,
centerAlignment: true,
);
}
for (double yValue = startYBound;
yValue <= endYBound + adaptiveStep;
yValue += adaptiveStep) {
if (yValue.abs() < 1e-9) continue;
final pixelY = origin.dy - yValue * scale;
final labelXPosition = (origin.dx - 8).clamp(8.0, size.width - 8.0);
renderTextSpan(
canvas,
activeTextPainter,
formatNumber(yValue),
Offset(labelXPosition, pixelY),
textConfiguration,
rightAlignment: true,
);
}
final axisLabelStyle = textConfiguration.copyWith(
fontWeight: FontWeight.w700,
color: theme.axisColor,
);
renderTextSpan(
canvas,
activeTextPainter,
'X',
Offset(size.width - 16, (origin.dy - 20).clamp(4.0, size.height - 20.0)),
axisLabelStyle,
);
renderTextSpan(
canvas,
activeTextPainter,
'Y',
Offset((origin.dx + 12).clamp(4.0, size.width - 16.0), 12),
axisLabelStyle,
);
renderTextSpan(
canvas,
activeTextPainter,
'0',
Offset(origin.dx - 8, origin.dy + 8),
textConfiguration,
rightAlignment: true,
);
}