drawAxisLabels method

void drawAxisLabels(
  1. Canvas canvas,
  2. Size size
)

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,
  );
}