computeDrawOrder method
void
computeDrawOrder()
Implementation
void computeDrawOrder() {
_drawables.clear();
_rules.clear();
buildDrawOrder(_drawables, null, _rules);
// Build rule dependencies. In practice this'll need to happen anytime a
// target drawable is changed or rule is added/removed.
var root = DrawTarget();
// Make sure all dependents are empty.
for (final nodeRules in _rules) {
for (final target in nodeRules.targets) {
target.dependents.clear();
}
}
// Now build up the dependencies.
for (final nodeRules in _rules) {
for (final target in nodeRules.targets) {
root.dependents.add(target);
var dependentRules = target.drawable?.flattenedDrawRules;
if (dependentRules != null) {
for (final dependentRule in dependentRules.targets) {
dependentRule.dependents.add(target);
}
}
}
}
var sorter = DependencyGraphNodeSorter<Component>();
_sortedDrawRules = sorter.sort(root).cast<DrawTarget>().skip(1).toList();
sortDrawOrder();
}