layersInPanelOrder function
layers in the panel's order (spec 12b D10): layer 0 first, then the
others by name under toLowerCase(), ties by handle. Independent of
creation order, so stable across undo, save and load.
Implementation
List<LayerRecord> layersInPanelOrder(Iterable<LayerRecord> layers) {
final out = layers.toList();
int rank(LayerRecord r) => r.handle == ReservedHandles.layerZero ? 0 : 1;
out.sort((a, b) {
final byZero = rank(a).compareTo(rank(b));
if (byZero != 0) return byZero;
final byName = a.name.toLowerCase().compareTo(b.name.toLowerCase());
if (byName != 0) return byName;
return a.handle.value.compareTo(b.handle.value);
});
return out;
}