draw method
Calls painter once per enabled paint, in ascending priority order, with
canvas translated to that entry's offset and back again.
Pass a function that already exists rather than a literal, so a node drawing every frame allocates nothing:
void painter(Canvas canvas, Paint paint) { ... }
draw((canvas) {
palette.draw(canvas, painter);
});
Implementation
void draw(Canvas canvas, Painter painter) {
for (final entry in _paints) {
if (!entry.enabled) continue;
final offset = entry.offset;
// TODO: Profile the different ways to do this.
final hasOffset = !offset.isZero;
if (hasOffset) canvas.translate(offset.x, offset.y);
painter(canvas, entry.paint);
if (hasOffset) canvas.translate(-offset.x, -offset.y);
}
}