paintGrid method

  1. @override
void paintGrid(
  1. Canvas canvas,
  2. NodeFlowTheme theme,
  3. ({double bottom, double left, double right, double top}) gridArea
)
override

Renders the style-specific grid pattern.

Each grid style implements this method to draw its specific pattern (lines, dots, crosses, etc.) using the pre-calculated gridArea.

Parameters:

  • canvas: The canvas to paint on
  • theme: Theme containing grid configuration
  • gridArea: Pre-calculated grid-aligned area covering the visible region

Implementation

@override
void paintGrid(
  Canvas canvas,
  NodeFlowTheme theme,
  ({double left, double top, double right, double bottom}) gridArea,
) {
  final gridSize = theme.gridSize;
  final majorGridSize = gridSize * majorGridMultiplier;

  // Create paint objects for minor and major grids
  final minorPaint = Paint()
    ..color = theme.gridColor.withValues(alpha: 0.3)
    ..strokeWidth = theme.gridThickness
    ..style = PaintingStyle.stroke;

  final majorPaint = Paint()
    ..color = theme.gridColor
    ..strokeWidth = theme.gridThickness * 2
    ..style = PaintingStyle.stroke;

  // Calculate grid-aligned start positions for minor grid
  final minorStartX = (gridArea.left / gridSize).floor() * gridSize;
  final minorStartY = (gridArea.top / gridSize).floor() * gridSize;

  // Calculate grid-aligned start positions for major grid
  final majorStartX = (gridArea.left / majorGridSize).floor() * majorGridSize;
  final majorStartY = (gridArea.top / majorGridSize).floor() * majorGridSize;

  // Draw minor grid lines
  for (double x = minorStartX; x <= gridArea.right; x += gridSize) {
    canvas.drawLine(
      Offset(x, gridArea.top),
      Offset(x, gridArea.bottom),
      minorPaint,
    );
  }

  for (double y = minorStartY; y <= gridArea.bottom; y += gridSize) {
    canvas.drawLine(
      Offset(gridArea.left, y),
      Offset(gridArea.right, y),
      minorPaint,
    );
  }

  // Draw major grid lines (on top of minor lines)
  for (double x = majorStartX; x <= gridArea.right; x += majorGridSize) {
    canvas.drawLine(
      Offset(x, gridArea.top),
      Offset(x, gridArea.bottom),
      majorPaint,
    );
  }

  for (double y = majorStartY; y <= gridArea.bottom; y += majorGridSize) {
    canvas.drawLine(
      Offset(gridArea.left, y),
      Offset(gridArea.right, y),
      majorPaint,
    );
  }
}