cyberGridSamples function

List<int> cyberGridSamples(
  1. List<int> colors
)

The 36 opaque colours a key edge, focus ring, toolbar icon or display backdrop can sit over in a cyber grid with colors ([body, haze, grid, trace, scan]), in the renderer's paint order (⊕ = compositeOver): for each stop s in {body, haze, their encoded-sRGB half mix}, the bare stop, a grid line g⊕s and a major grid line g⊕g⊕s (every fourth line is drawn twice), each with and without a trace over it, and the scanline ink over each of those six.

Implementation

List<int> cyberGridSamples(List<int> colors) {
  final c0 = colors[0] | 0xFF000000;
  final c1 = colors[1] | 0xFF000000;
  final g = colors[2];
  final t = colors[3];
  final k = colors[4];
  final out = <int>[];
  for (final s in [c0, c1, _mix(c0, c1)]) {
    final gs = compositeOver(g, s);
    final ggs = compositeOver(g, gs);
    for (final base in [s, gs, ggs]) {
      final ts = compositeOver(t, base);
      out.addAll([base, ts, compositeOver(k, base), compositeOver(k, ts)]);
    }
  }
  return out;
}