1
28 package demo.view.anim;
29
30 import demo.view.DemoDefaults;
31 import y.anim.AnimationFactory;
32 import y.anim.AnimationObject;
33 import y.anim.AnimationPlayer;
34 import y.anim.CompositeAnimationObject;
35 import y.util.DefaultMutableValue2D;
36 import y.util.Value2D;
37 import y.view.Graph2D;
38 import y.view.Graph2DView;
39 import y.view.Graph2DViewRepaintManager;
40 import y.view.NodeRealizer;
41 import y.view.ViewAnimationFactory;
42 import javax.swing.JFrame;
43 import javax.swing.JPanel;
44 import javax.swing.JRootPane;
45 import javax.swing.Timer;
46 import java.awt.BorderLayout;
47 import java.awt.EventQueue;
48 import java.awt.event.ActionEvent;
49 import java.awt.event.ActionListener;
50
51
57 public class EaseInEaseOutDemo {
58 private static final int PREFERRED_DURATION = 2000;
59
60 private final Graph2DView view;
61 private Value2D[][] positions;
62 private Timer timer;
63
64 AnimationPlayer player;
65 ViewAnimationFactory factory;
66
67
71 public EaseInEaseOutDemo() {
72 this.view = new Graph2DView();
73 DemoDefaults.configureDefaultRealizers(view);
74 init();
75 }
76
77
81 private void init() {
82 positions = new Value2D[4][2];
83 for (int i = 0, n = positions.length; i < n; ++i) {
84 positions[i][0] = DefaultMutableValue2D.create(70, 110 + i * 60);
85 positions[i][1] = DefaultMutableValue2D.create(410, 110 + i * 60);
86 }
87
88 final String[] labels = {
89 "Normal", "Ease In", "Ease In, Ease Out", "Ease Out"
90 };
91
92 final Graph2D graph = view.getGraph2D();
93
94 for (int i = 0, n = positions.length; i < n; ++i) {
95 final Value2D pos = positions[i][0];
96 final NodeRealizer nr = graph.getRealizer(
97 graph.createNode(pos.getX(), pos.getY()));
98 nr.setSize(120, 30);
99 nr.setLabelText(labels[i]);
100 }
101
102
103 timer = new Timer(PREFERRED_DURATION + 500,
104 new ActionListener() {
105 private boolean invert;
106
107 public void actionPerformed(final ActionEvent e) {
108 play(invert);
109 invert = !invert;
110 }
111 });
112 timer.setInitialDelay(1000);
113 timer.start();
114 }
115
116
129 private void play(final boolean invert) {
130 final Graph2D graph = view.getGraph2D();
131
132 if (factory == null) {
133 factory = new ViewAnimationFactory(new Graph2DViewRepaintManager(view));
134 }
135
136 final CompositeAnimationObject moves = AnimationFactory.createConcurrency();
138
139 for (int i = 0, n = positions.length; i < n; ++i) {
140 final Value2D dest = positions[i][invert ? 0 : 1];
141 final NodeRealizer nr = graph.getRealizer(graph.getNodeArray()[i]);
142
143 AnimationObject move =
146 factory.move(nr, dest, ViewAnimationFactory.APPLY_EFFECT,
147 PREFERRED_DURATION);
148
149 switch (i) {
150 case 1:
151 move = AnimationFactory.createEasedAnimation(move, 1, 1);
153 break;
154 case 2:
155 move = AnimationFactory.createEasedAnimation(move);
157 break;
158 case 3:
159 move = AnimationFactory.createEasedAnimation(move, 0, 0);
161 break;
162 }
163
164 moves.addAnimation(move);
166 }
167
168 if (player == null) {
169 player = factory.createConfiguredPlayer();
170 }
171 player.animate(moves);
173 }
174
175
176
181 private void start(final String title) {
182 final JFrame frame = new JFrame(title);
183
184 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
185 addContentTo(frame.getRootPane());
186 frame.pack();
187 frame.setLocationRelativeTo(null);
188 frame.setVisible(true);
189 }
190
191 public final void addContentTo(final JRootPane rootPane) {
192 final JPanel contentPane = new JPanel(new BorderLayout());
193 contentPane.add(view, BorderLayout.CENTER);
194
195 rootPane.setContentPane(contentPane);
196 }
197
198 public void dispose() {
199 if (timer != null) {
200 if (timer.isRunning()) {
201 timer.stop();
202 }
203 timer = null;
204 }
205 }
206
207 public static void main(String[] args) {
208 EventQueue.invokeLater(new Runnable() {
209 public void run() {
210 DemoDefaults.initLnF();
211 (new EaseInEaseOutDemo()).start("Ease Demo");
212 }
213 });
214 }
215 }
216