setTimelineData method
Implementation
TrackEntry setTimelineData(
TrackEntry? to, List<TrackEntry> mixingToArray, Set<int> propertyIDs) {
if (to != null) mixingToArray.add(to);
final TrackEntry lastEntry = mixingFrom != null
? mixingFrom!.setTimelineData(this, mixingToArray, propertyIDs)
: this;
if (to != null) mixingToArray.removeLast();
final List<TrackEntry> mixingTo = mixingToArray;
final int mixingToLast = mixingToArray.length - 1;
final List<Timeline> timelines = animation!.timelines;
final int timelinesCount = animation!.timelines.length;
final Int32List timelineData = Int32List.fromList(
ArrayUtils.copyWithNewArraySize(this.timelineData, timelinesCount, -1));
this.timelineDipMix.length = 0;
final List<TrackEntry?> timelineDipMix = ArrayUtils.copyWithNewArraySize(
this.timelineDipMix, timelinesCount, null);
outer:
for (int i = 0; i < timelinesCount; i++) {
final int id = timelines[i].getPropertyId();
if (!propertyIDs.add(id)) {
timelineData[i] = AnimationState.subsequent;
} else if (to == null || !to.hasTimeline(id)) {
timelineData[i] = AnimationState.first;
} else {
for (int ii = mixingToLast; ii >= 0; ii--) {
final TrackEntry entry = mixingTo[ii];
if (!entry.hasTimeline(id)) {
if (entry.mixDuration > 0) {
timelineData[i] = AnimationState.dipMix;
timelineDipMix[i] = entry;
continue outer;
}
}
}
timelineData[i] = AnimationState.dip;
}
}
return lastEntry;
}