private static ArrayList<TimelineEntry> getSeqTimeline( ElementSequentialTimeContainer seq, double offset, double maxOffset) { ArrayList<TimelineEntry> timeline = new ArrayList<TimelineEntry>(); double orgOffset = offset; // Set my begin at first TimeList myBeginList = seq.getBegin(); /* * Begin list only contain 1 begin time which has been resolved. * @see com.irrenhaus.irresms.dom.smil.ElementSequentialTimeContainerImpl#getBegin() */ Time begin = myBeginList.item(0); double beginOffset = begin.getResolvedOffset() + offset; if (beginOffset > maxOffset) { // This element can't be started. return timeline; } TimelineEntry myBegin = new TimelineEntry(beginOffset, seq, TimelineEntry.ACTION_BEGIN); timeline.add(myBegin); TimeList myEndList = seq.getEnd(); /* * End list only contain 1 end time which has been resolved. * @see com.irrenhaus.irresms.dom.smil.ElementSequentialTimeContainerImpl#getEnd() */ Time end = myEndList.item(0); double endOffset = end.getResolvedOffset() + offset; if (endOffset > maxOffset) { endOffset = maxOffset; } TimelineEntry myEnd = new TimelineEntry(endOffset, seq, TimelineEntry.ACTION_END); maxOffset = endOffset; // Get children's timelines NodeList children = seq.getTimeChildren(); for (int i = 0; i < children.getLength(); ++i) { ElementTime child = (ElementTime) children.item(i); ArrayList<TimelineEntry> childTimeline = getTimeline(child, offset, maxOffset); timeline.addAll(childTimeline); // Since the child timeline has been sorted, the offset of the last one is the biggest. offset = childTimeline.get(childTimeline.size() - 1).getOffsetTime(); } // Add end-event to timeline for all active children NodeList activeChildrenAtEnd = seq.getActiveChildrenAt((float) (endOffset - orgOffset)); for (int i = 0; i < activeChildrenAtEnd.getLength(); ++i) { timeline.add( new TimelineEntry( endOffset, (ElementTime) activeChildrenAtEnd.item(i), TimelineEntry.ACTION_END)); } // Set my end at last timeline.add(myEnd); return timeline; }
public NodeList getActiveChildrenAt(float instant) { return mSeqTimeContainer.getActiveChildrenAt(instant); }