paintGrid method
void
paintGrid(
- Canvas canvas,
- NodeFlowTheme theme,
- ({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 ontheme: Theme containing grid configurationgridArea: 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,
);
}
}