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;
+    }
 }