Source code: com/arranger/jarl/stroke/BaseSegmentStroke.java
1 package com.arranger.jarl.stroke;
2
3 import com.arranger.jarl.util.IWidgetConfigSegmentFactory;
4 import com.arranger.jarl.util.WidgetUtil;
5 import com.arranger.jarl.util.WidgetConfigSegment;
6 import com.arranger.jarl.util.InterpolateUtil;
7 import com.arranger.jarl.base.IContext;
8 import com.arranger.jarl.base.Time;
9 import com.arranger.jarl.widget.IWidget;
10
11 import java.util.Collection;
12
13 /**
14 * BaseSegmentStroke created on Feb 26, 2003
15 */
16 public abstract class BaseSegmentStroke extends BaseStroke implements IWidgetConfigSegmentFactory {
17
18 protected java.util.List m_configSegments;
19
20 /**
21 * @return a collection of {@link WidgetConfigSegment}
22 */
23 public Collection getConfigSegments() {
24 return m_configSegments;
25 }
26
27 /**
28 * Always remember some attrs might not be there
29 * @param context
30 */
31 protected void initAttributes(IContext context) {
32 super.initAttributes(context);
33
34 //look for segments
35 java.util.List seg = WidgetUtil.initWidgetConfigSegments(m_configElement, this);
36 if (seg != null) {
37 m_configSegments = seg;
38 }
39 }
40
41 /**
42 * Get the 'active' widget config segment
43 * @param widget
44 * @param context
45 * @return the 'active' widget config segment
46 */
47 protected WidgetConfigSegment getCurrentSegment(IWidget widget, IContext context) {
48 //get how far along we are into this widget
49 double currentTimePct = InterpolateUtil.interpolate(widget, context.getTime());
50
51 //get the current motion segment
52 return WidgetUtil.getWidgetConfigSegment(m_configSegments, currentTimePct);
53 }
54
55 /**
56 * Get the pct of time relative to this segment
57 * @param widget
58 * @param widgetConfigSegment
59 * @return relative time into this segment
60 *
61 * @see #getCurrentSegment
62 */
63 protected double getCurrentSegmentTimePct(IWidget widget, IContext context, WidgetConfigSegment widgetConfigSegment) {
64
65 //get relative time
66 Time relTime = WidgetUtil.getRelativeTime(widget, context.getTime());
67
68 //get current time pct relative to this segment
69 //relTime - segStart
70 //-------------------
71 // segLength
72 double segStart = widgetConfigSegment.getStartTimePct() * widget.getTotalTime().getFrame();
73 double segEnd = widgetConfigSegment.getEndTimePct() * widget.getTotalTime().getFrame();
74 double segLength = segEnd - segStart;
75
76 return (relTime.getFrame() - segStart) / segLength;
77 }
78 }