You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pivot.apache.org by gb...@apache.org on 2009/06/16 19:35:15 UTC
svn commit: r785311 - in /incubator/pivot/trunk:
tutorials/src/org/apache/pivot/tutorials/transition/CollapseTransition.java
tutorials/src/org/apache/pivot/tutorials/transition/Transitions.java
wtk/src/org/apache/pivot/wtk/effects/Transition.java
Author: gbrown
Date: Tue Jun 16 17:35:14 2009
New Revision: 785311
URL: http://svn.apache.org/viewvc?rev=785311&view=rev
Log:
Make transitions reversible.
Modified:
incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/CollapseTransition.java
incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/Transitions.java
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/Transition.java
Modified: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/CollapseTransition.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/CollapseTransition.java?rev=785311&r1=785310&r2=785311&view=diff
==============================================================================
--- incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/CollapseTransition.java (original)
+++ incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/CollapseTransition.java Tue Jun 16 17:35:14 2009
@@ -36,6 +36,10 @@
initialWidth = component.getWidth();
}
+ public Component getComponent() {
+ return component;
+ }
+
@Override
public void start(TransitionListener transitionListener) {
component.getDecorators().add(fadeDecorator);
@@ -57,14 +61,13 @@
if (percentComplete < 1.0f) {
int duration = getDuration();
int width = (int)(initialWidth * (1.0f - percentComplete));
+
width = (int)easing.easeInOut(getElapsedTime(), initialWidth, width - initialWidth, duration);
component.setPreferredWidth(width);
fadeDecorator.setOpacity(1.0f - percentComplete);
component.repaint();
- } else {
- component.getParent().remove(component);
}
}
}
Modified: incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/Transitions.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/Transitions.java?rev=785311&r1=785310&r2=785311&view=diff
==============================================================================
--- incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/Transitions.java (original)
+++ incubator/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/transition/Transitions.java Tue Jun 16 17:35:14 2009
@@ -20,9 +20,12 @@
import org.apache.pivot.wtk.Application;
import org.apache.pivot.wtk.Button;
import org.apache.pivot.wtk.ButtonPressListener;
+import org.apache.pivot.wtk.Component;
import org.apache.pivot.wtk.DesktopApplicationContext;
import org.apache.pivot.wtk.Display;
import org.apache.pivot.wtk.Window;
+import org.apache.pivot.wtk.effects.Transition;
+import org.apache.pivot.wtk.effects.TransitionListener;
import org.apache.pivot.wtkx.WTKX;
import org.apache.pivot.wtkx.WTKXSerializer;
@@ -34,25 +37,50 @@
@WTKX private Button button3;
@WTKX private Button button4;
+ private CollapseTransition collapseTransition = null;
+
+ public static int TRANSITION_DURATION = 2000;
+ public static int TRANSITION_RATE = 30;
+
public void startup(Display display, Map<String, String> properties)
throws Exception {
WTKXSerializer wtkxSerializer = new WTKXSerializer();
window = (Window)wtkxSerializer.readObject(this, "transitions.wtkx");
wtkxSerializer.bind(this, Transitions.class);
- ButtonPressListener trigger = new ButtonPressListener() {
- public void buttonPressed(Button button) {
- button.setEnabled(false);
-
- CollapseTransition transition = new CollapseTransition(button, 300, 30);
- transition.start();
+ ButtonPressListener buttonPressListener = new ButtonPressListener() {
+ public void buttonPressed(final Button button) {
+ if (collapseTransition == null) {
+ collapseTransition = new CollapseTransition(button, TRANSITION_DURATION, TRANSITION_RATE);
+
+ TransitionListener transitionListener = new TransitionListener() {
+ public void transitionCompleted(Transition transition) {
+ CollapseTransition collapseTransition = (CollapseTransition)transition;
+
+ if (!transition.isReversed()) {
+ Component component = collapseTransition.getComponent();
+ component.getParent().remove(component);
+ }
+
+ Transitions.this.collapseTransition = null;
+ }
+ };
+
+ collapseTransition.start(transitionListener);
+ } else {
+ collapseTransition.reverse();
+
+ if (collapseTransition.getComponent() != button) {
+ collapseTransition.end();
+ }
+ }
}
};
- button1.getButtonPressListeners().add(trigger);
- button2.getButtonPressListeners().add(trigger);
- button3.getButtonPressListeners().add(trigger);
- button4.getButtonPressListeners().add(trigger);
+ button1.getButtonPressListeners().add(buttonPressListener);
+ button2.getButtonPressListeners().add(buttonPressListener);
+ button3.getButtonPressListeners().add(buttonPressListener);
+ button4.getButtonPressListeners().add(buttonPressListener);
window.open(display);
}
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/Transition.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/Transition.java?rev=785311&r1=785310&r2=785311&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/Transition.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/Transition.java Tue Jun 16 17:35:14 2009
@@ -30,6 +30,8 @@
private int rate;
private boolean repeat;
+ private boolean reversed = false;
+
private TransitionListener transitionListener;
private long startTime = 0;
@@ -186,10 +188,20 @@
*
* @return
* Returns the amount of time that has passed since the transition
- * was started.
+ * was started. If the transition is reversed, this value reflects the
+ * amount of time remaining.
*/
public int getElapsedTime() {
- return (int)(currentTime - startTime);
+ long endTime = startTime + duration;
+
+ int elapsedTime;
+ if (reversed) {
+ elapsedTime = (int)(endTime - currentTime);
+ } else {
+ elapsedTime = (int)(currentTime - startTime);
+ }
+
+ return elapsedTime;
}
/**
@@ -197,10 +209,17 @@
*
* @return
* A value between 0 and 1, inclusive, representing the transition's
- * percent complete.
+ * percent complete. If the transition is reversed, this value reflects
+ * the percent remaining.
*/
public float getPercentComplete() {
- return (float)(currentTime - startTime) / (float)(duration);
+ float percentComplete = (float)(currentTime - startTime) / (float)(duration);
+
+ if (reversed) {
+ percentComplete = 1.0f - percentComplete;
+ }
+
+ return percentComplete;
}
/**
@@ -280,4 +299,34 @@
* transition's state.
*/
protected abstract void update();
+
+ /**
+ * Reverses a currently running transition. Updates the start time so the
+ * reverse duration is the same as the current elapsed time.
+ */
+ public void reverse() {
+ if (transitionListener == null) {
+ throw new IllegalStateException("Transition is not currently running.");
+ }
+
+ if (repeat) {
+ throw new IllegalStateException("Transition is repeating.");
+ }
+
+ long repeatDuration = currentTime - startTime;
+ long endTime = currentTime + repeatDuration;
+ startTime = endTime - duration;
+
+ reversed = !reversed;
+ }
+
+ /**
+ * Tests whether the transition is reversed.
+ *
+ * @return
+ * <tt>true</tt> if the transition is reversed; <tt>false</tt>, otherwise.
+ */
+ public boolean isReversed() {
+ return reversed;
+ }
}