import 'dart:html' as html; import 'dart:math' as math; import 'package:rules_of_living/src/Grid.dart'; class Renderer { bool _dirty = true; bool _renderEdges = true; bool get renderEdges => _renderEdges; void set renderEdges(bool value) { _renderEdges = value; _dirty = true; } void render(html.CanvasElement canvas, Map map) { // only renders if any cells changed between renders if (!_dirty) return; html.CanvasRenderingContext2D ctx = canvas.getContext('2d'); int brickW = (canvas.width ~/ map.width); int brickH = (canvas.height ~/ map.height); ctx.clearRect(0, 0, canvas.width, canvas.height); for (int i = 0; i < map.length; i++) { math.Point p = map.toCoordinates(i); if (_renderEdges) { ctx.setStrokeColorRgb(100, 100, 100); ctx.strokeRect(p.x * brickW, p.y * brickH, brickW, brickH); } if (map[i] == true) ctx.setFillColorRgb(155, 155, 255); else ctx.setFillColorRgb(0, 0, 0); ctx.fillRect(p.x * brickW, p.y * brickH, brickW, brickH); } _dirty = false; } }