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 22:27:10 UTC

svn commit: r785377 - in /incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk: ./ effects/ skin/terra/

Author: gbrown
Date: Tue Jun 16 20:27:10 2009
New Revision: 785377

URL: http://svn.apache.org/viewvc?rev=785377&view=rev
Log:
Move reposition logic from Dialog to TerraDialogSkin; move reposition logic from Sheet to TerraSheetSkin; eliminate SlideTransition and rewrite sheet open/close transition logic; rename some TerraRollupSkin members for naming consistency.

Removed:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/SlideTransition.java
Modified:
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/Transition.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/FadeWindowTransition.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraRollupSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java
    incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/prompt_skin.wtkx

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Dialog.java Tue Jun 16 20:27:10 2009
@@ -51,26 +51,6 @@
         }
     }
 
-    private class RepositionCallback implements Runnable {
-        private static final float GOLDEN_SECTION = 0.382f;
-
-        public void run() {
-            Component owner = getOwner();
-
-            if (owner == null) {
-                owner = getDisplay();
-            }
-
-            int deltaWidth = owner.getWidth() - getWidth();
-            int deltaHeight = owner.getHeight() - getHeight();
-
-            int x = Math.max(0, Math.round(owner.getX() + 0.5f * deltaWidth));
-            int y = Math.max(0, Math.round(owner.getY() + GOLDEN_SECTION * deltaHeight));
-
-            setLocation(x, y);
-        }
-    }
-
     private boolean modal = false;
     private DialogCloseListener dialogCloseListener = null;
     private Window disabledOwner = null;
@@ -116,8 +96,6 @@
         if (isOpen()) {
             this.dialogCloseListener = dialogCloseListener;
             this.modal = false;
-
-            ApplicationContext.queueCallback(new RepositionCallback());
         }
     }
 

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/Sheet.java Tue Jun 16 20:27:10 2009
@@ -54,16 +54,6 @@
     private boolean result = false;
     private SheetCloseListener sheetCloseListener = null;
 
-    private ComponentListener ownerListener = new ComponentListener.Adapter() {
-        public void sizeChanged(Component component, int previousWidth, int previousHeight) {
-            alignToOwnerContent();
-        }
-
-        public void locationChanged(Component component, int previousX, int previousY) {
-            alignToOwnerContent();
-        }
-    };
-
     private SheetStateListenerList sheetStateListeners = new SheetStateListenerList();
 
     /**
@@ -86,13 +76,6 @@
     }
 
     @Override
-    public void setSize(int width, int height) {
-        super.setSize(width, height);
-
-        alignToOwnerContent();
-    }
-
-    @Override
     public final void setOwner(Window owner) {
         if (owner == null) {
             throw new UnsupportedOperationException("A sheet must have an owner.");
@@ -111,7 +94,6 @@
 
         if (isOpen()) {
             Window owner = getOwner();
-            owner.getComponentListeners().add(ownerListener);
 
             Component content = owner.getContent();
             if (content.isBlocked()) {
@@ -119,13 +101,6 @@
             }
 
             content.setEnabled(false);
-
-            // Defer alignment until the display has laid this window out
-            ApplicationContext.queueCallback(new Runnable() {
-                public void run() {
-                    alignToOwnerContent();
-                }
-            });
         }
     }
 
@@ -157,8 +132,6 @@
                     this.result = result;
 
                     Window owner = getOwner();
-                    owner.getComponentListeners().remove(ownerListener);
-
                     Component content = owner.getContent();
                     content.setEnabled(true);
 
@@ -187,14 +160,6 @@
         return result;
     }
 
-    private void alignToOwnerContent() {
-        Window owner = getOwner();
-        Component content = owner.getContent();
-        Point contentLocation = content.mapPointToAncestor(owner.getDisplay(), 0, 0);
-        setLocation(contentLocation.x + (content.getWidth() - getWidth()) / 2,
-            contentLocation.y);
-    }
-
     public ListenerList<SheetStateListener> getSheetStateListeners() {
         return sheetStateListeners;
     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/effects/DropShadowDecorator.java Tue Jun 16 20:27:10 2009
@@ -41,10 +41,12 @@
     private int yOffset;
 
     private Color shadowColor = Color.BLACK;
-    private float shadowOpacity = 0.25f;
+    private float shadowOpacity = DEFAULT_SHADOW_OPACITY;
 
     private BufferedImage shadowImage = null;
 
+    public static final float DEFAULT_SHADOW_OPACITY = 0.25f;
+
     public DropShadowDecorator() {
         this(5, 5, 5);
     }

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=785377&r1=785376&r2=785377&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 20:27:10 2009
@@ -38,9 +38,6 @@
     private long currentTime = 0;
     private ApplicationContext.ScheduledCallback transitionCallback = null;
 
-    public static final int DEFAULT_DURATION = 0;
-    public static final int DEFAULT_RATE = 15;
-
     private final Runnable updateCallback = new Runnable() {
         public void run() {
             currentTime = System.currentTimeMillis();
@@ -64,11 +61,16 @@
     };
 
     /**
-     * Creates a new, non-repeating transition with the default duration
-     * and rate.
+     * Creates a new non-repeating transition with the given duration, rate.
+     *
+     * @param duration
+     * Transition duration, in milliseconds.
+     *
+     * @param rate
+     * Transition rate, in frames per second.
      */
-    public Transition() {
-        this(DEFAULT_DURATION, DEFAULT_RATE, false);
+    public Transition(int duration, int rate) {
+        this(duration, rate, false);
     }
 
     /**
@@ -79,6 +81,9 @@
      *
      * @param rate
      * Transition rate, in frames per second.
+     *
+     * @param repeat
+     * <tt>true</tt> if the transition should repeat; <tt>false</tt>, otherwise.
      */
     public Transition(int duration, int rate, boolean repeat) {
         if (duration <= 0) {

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/FadeWindowTransition.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/FadeWindowTransition.java?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/FadeWindowTransition.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/FadeWindowTransition.java Tue Jun 16 20:27:10 2009
@@ -28,18 +28,20 @@
  */
 public class FadeWindowTransition extends FadeTransition {
     private DropShadowDecorator dropShadowDecorator;
+    private float initialShadowOpacity;
 
     public FadeWindowTransition(Component component, int duration, int rate,
         DropShadowDecorator dropShadowDecorator) {
         super(component, duration, rate);
 
         this.dropShadowDecorator = dropShadowDecorator;
+        initialShadowOpacity = dropShadowDecorator.getShadowOpacity();
     }
 
     @Override
     protected void update() {
         super.update();
-        dropShadowDecorator.setShadowOpacity(1.0f - getPercentComplete());
+        dropShadowDecorator.setShadowOpacity(initialShadowOpacity * (1.0f - getPercentComplete()));
 
         Component component = getComponent();
         Container parent = component.getParent();

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraDialogSkin.java Tue Jun 16 20:27:10 2009
@@ -17,10 +17,12 @@
 package org.apache.pivot.wtk.skin.terra;
 
 import org.apache.pivot.util.Vote;
+import org.apache.pivot.wtk.ApplicationContext;
 import org.apache.pivot.wtk.Component;
 import org.apache.pivot.wtk.Dialog;
 import org.apache.pivot.wtk.DialogStateListener;
 import org.apache.pivot.wtk.Keyboard;
+import org.apache.pivot.wtk.Window;
 
 
 /**
@@ -29,6 +31,27 @@
  * @author gbrown
  */
 public class TerraDialogSkin extends TerraFrameSkin implements DialogStateListener {
+    private class RepositionCallback implements Runnable {
+        private static final float GOLDEN_SECTION = 0.382f;
+
+        public void run() {
+            Dialog dialog = (Dialog)getComponent();
+            Component owner = dialog.getOwner();
+
+            if (owner == null) {
+                owner = dialog.getDisplay();
+            }
+
+            int deltaWidth = owner.getWidth() - getWidth();
+            int deltaHeight = owner.getHeight() - getHeight();
+
+            int x = Math.max(0, Math.round(owner.getX() + 0.5f * deltaWidth));
+            int y = Math.max(0, Math.round(owner.getY() + GOLDEN_SECTION * deltaHeight));
+
+            dialog.setLocation(x, y);
+        }
+    }
+
     @Override
     public void install(Component component) {
         super.install(component);
@@ -67,6 +90,13 @@
         return consumed;
     }
 
+    @Override
+    public void windowOpened(Window window) {
+        super.windowOpened(window);
+
+        ApplicationContext.queueCallback(new RepositionCallback());
+    }
+
     public Vote previewDialogClose(Dialog dialog, boolean result) {
         return Vote.APPROVE;
     }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraRollupSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraRollupSkin.java?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraRollupSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraRollupSkin.java Tue Jun 16 20:27:10 2009
@@ -51,22 +51,22 @@
      *
      * @author tvolkert
      */
-    private class ExpansionTransition extends Transition {
+    public class ExpandTransition extends Transition {
         private int height1;
         private int height2;
-        private boolean reverse;
+        private boolean collapse;
 
         private int originalPreferredHeight;
         private int height;
 
         private Easing easing = new Quadratic();
 
-        public ExpansionTransition(int height1, int height2, boolean reverse, int duration, int rate) {
+        public ExpandTransition(int height1, int height2, boolean collapse, int duration, int rate) {
             super(duration, rate, false);
 
             this.height1 = height1;
             this.height2 = height2;
-            this.reverse = reverse;
+            this.collapse = collapse;
         }
 
         public int getHeight() {
@@ -99,7 +99,7 @@
                 int duration = getDuration();
 
                 height = (int)(height1 + (height2 - height1) * percentComplete);
-                if (reverse) {
+                if (collapse) {
                     height = (int)easing.easeIn(elapsedTime, height1, height2 - height1, duration);
                 } else {
                     height = (int)easing.easeOut(elapsedTime, height1, height2 - height1, duration);
@@ -220,8 +220,8 @@
     private HeadingMouseButtonHandler headingMouseButtonHandler = new HeadingMouseButtonHandler();
 
     // Animation support
-    private ExpansionTransition expandTransition = null;
-    private ExpansionTransition collapseTransition = null;
+    private ExpandTransition expandTransition = null;
+    private ExpandTransition collapseTransition = null;
 
     // Styles
     private Color buttonColor;
@@ -231,8 +231,8 @@
     private boolean headingToggles;
     private boolean useBullet;
 
-    private static final int EXPANSION_DURATION = 250;
-    private static final int EXPANSION_RATE = 30;
+    private static final int EXPAND_DURATION = 250;
+    private static final int EXPAND_RATE = 30;
 
     public TerraRollupSkin() {
         TerraTheme theme = (TerraTheme)Theme.getTheme();
@@ -516,7 +516,7 @@
                 // Start a collapse transition, return false, and set the
                 // expanded state when the transition is complete
                 if (collapseTransition == null) {
-                    int duration = EXPANSION_DURATION;
+                    int duration = EXPAND_DURATION;
                     int height1 = getHeight();
 
                     if (expandTransition != null) {
@@ -533,8 +533,8 @@
                     if (duration > 0) {
                         int height2 = getPreferredHeight(-1, false);
 
-                        collapseTransition = new ExpansionTransition(height1, height2,
-                            true, duration, EXPANSION_RATE);
+                        collapseTransition = new ExpandTransition(height1, height2,
+                            true, duration, EXPAND_RATE);
                         collapseTransition.start(new TransitionListener() {
                             public void transitionCompleted(Transition transition) {
                                 rollup.setExpanded(false);
@@ -572,8 +572,8 @@
                 int height1 = getHeight();
                 int height2 = getPreferredHeight(-1, true);
 
-                expandTransition = new ExpansionTransition(height1, height2,
-                    false, EXPANSION_DURATION, EXPANSION_RATE);
+                expandTransition = new ExpandTransition(height1, height2,
+                    false, EXPAND_DURATION, EXPAND_RATE);
                 expandTransition.start(new TransitionListener() {
                     public void transitionCompleted(Transition transition) {
                         ApplicationContext.queueCallback(new Runnable() {

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraSheetSkin.java Tue Jun 16 20:27:10 2009
@@ -23,6 +23,7 @@
 import org.apache.pivot.util.Vote;
 import org.apache.pivot.wtk.ApplicationContext;
 import org.apache.pivot.wtk.Component;
+import org.apache.pivot.wtk.ComponentListener;
 import org.apache.pivot.wtk.ComponentMouseButtonListener;
 import org.apache.pivot.wtk.Dimensions;
 import org.apache.pivot.wtk.GraphicsUtilities;
@@ -30,14 +31,15 @@
 import org.apache.pivot.wtk.Keyboard;
 import org.apache.pivot.wtk.Mouse;
 import org.apache.pivot.wtk.Orientation;
+import org.apache.pivot.wtk.Point;
 import org.apache.pivot.wtk.Sheet;
 import org.apache.pivot.wtk.SheetStateListener;
 import org.apache.pivot.wtk.Theme;
 import org.apache.pivot.wtk.Window;
 import org.apache.pivot.wtk.effects.DropShadowDecorator;
-import org.apache.pivot.wtk.effects.SlideTransition;
 import org.apache.pivot.wtk.effects.Transition;
 import org.apache.pivot.wtk.effects.TransitionListener;
+import org.apache.pivot.wtk.effects.easing.Quadratic;
 import org.apache.pivot.wtk.skin.WindowSkin;
 
 
@@ -50,6 +52,20 @@
  * @author tvolkert
  */
 public class TerraSheetSkin extends WindowSkin implements SheetStateListener {
+    public class WindowStateTransition extends Transition {
+        private final boolean close;
+
+        public WindowStateTransition(boolean close) {
+            super(TRANSITION_DURATION, TRANSITION_RATE);
+            this.close = close;
+        }
+
+        @Override
+        public void update() {
+            invalidateComponent();
+        }
+    }
+
     private Color borderColor;
     private Insets padding;
     private boolean resizable;
@@ -57,8 +73,18 @@
     // Derived colors
     private Color bevelColor;
 
-    private SlideTransition openTransition = null;
-    private SlideTransition closeTransition = null;
+    private WindowStateTransition windowStateTransition = null;
+    private Quadratic easing = new Quadratic();
+
+    private ComponentListener ownerComponentListener = new ComponentListener.Adapter() {
+        public void sizeChanged(Component component, int previousWidth, int previousHeight) {
+            alignToOwnerContent();
+        }
+
+        public void locationChanged(Component component, int previousX, int previousY) {
+            alignToOwnerContent();
+        }
+    };
 
     private ComponentMouseButtonListener ownerMouseButtonListener =
         new ComponentMouseButtonListener.Adapter() {
@@ -78,8 +104,8 @@
 
     private DropShadowDecorator dropShadowDecorator = null;
 
-    private static final int SLIDE_DURATION = 250;
-    private static final int SLIDE_RATE = 30;
+    private static final int TRANSITION_DURATION = 250;
+    private static final int TRANSITION_RATE = 30;
 
     public TerraSheetSkin() {
         TerraTheme theme = (TerraTheme)Theme.getTheme();
@@ -159,6 +185,7 @@
         }
 
         preferredHeight += (padding.top + padding.bottom + 2);
+        preferredHeight = getEasedPreferredHeight(preferredHeight);
 
         return preferredHeight;
     }
@@ -180,12 +207,30 @@
 
         preferredWidth += (padding.left + padding.right + 2);
         preferredHeight += (padding.top + padding.bottom + 2);
+        preferredHeight = getEasedPreferredHeight(preferredHeight);
 
         Dimensions preferredSize = new Dimensions(preferredWidth, preferredHeight);
 
         return preferredSize;
     }
 
+    private int getEasedPreferredHeight(int preferredHeight) {
+        if (windowStateTransition != null
+            && windowStateTransition.isRunning()) {
+            if (windowStateTransition.close) {
+                float scale = easing.easeIn(windowStateTransition.getElapsedTime(), 0, 1,
+                    windowStateTransition.getDuration());
+                preferredHeight = (int)((1.0f - scale) * preferredHeight);
+            } else {
+                float scale = easing.easeOut(windowStateTransition.getElapsedTime(), 0, 1,
+                    windowStateTransition.getDuration());
+                preferredHeight = (int)(scale * preferredHeight);
+            }
+        }
+
+        return preferredHeight;
+    }
+
     public void layout() {
         int width = getWidth();
         int height = getHeight();
@@ -224,6 +269,13 @@
     }
 
     @Override
+    public void sizeChanged(Component component, int previousWidth, int previousHeight) {
+        super.sizeChanged(component, previousWidth, previousHeight);
+
+        alignToOwnerContent();
+    }
+
+    @Override
     public boolean keyPressed(Component component, int keyCode, Keyboard.KeyLocation keyLocation) {
         boolean consumed = false;
 
@@ -315,16 +367,18 @@
     public void windowOpened(final Window window) {
         super.windowOpened(window);
 
+        dropShadowDecorator.setShadowOpacity(DropShadowDecorator.DEFAULT_SHADOW_OPACITY);
+
         Window owner = window.getOwner();
+        owner.getComponentListeners().add(ownerComponentListener);
         owner.getComponentMouseButtonListeners().add(ownerMouseButtonListener);
 
         ApplicationContext.queueCallback(new Runnable() {
             public void run() {
-                openTransition = new SlideTransition(window, 0, 0,
-                    -window.getHeight(), 0, false, SLIDE_DURATION, SLIDE_RATE);
-                openTransition.start(new TransitionListener() {
+                windowStateTransition = new WindowStateTransition(false);
+                windowStateTransition.start(new TransitionListener() {
                     public void transitionCompleted(Transition transition) {
-                        openTransition = null;
+                        windowStateTransition = null;
                     }
                 });
             }
@@ -336,40 +390,23 @@
         // when the transition is complete
         Vote vote = Vote.APPROVE;
 
+        // Don't start the transition if the sheet is being closed as a result
+        // of the owner closing
         Window owner = sheet.getOwner();
         if (!owner.isClosing()
-            && closeTransition == null) {
-            int duration = SLIDE_DURATION;
-            int beginX = 0;
-            int beginY = 0;
-
-            if (openTransition != null) {
-                // Stop the open transition
-                openTransition.stop();
-
-                // Record its progress so we can reverse it at the right point
-                duration = openTransition.getElapsedTime();
-                beginX = openTransition.getX();
-                beginY = openTransition.getY();
+            && windowStateTransition == null) {
+            windowStateTransition = new WindowStateTransition(true);
+            windowStateTransition.start(new TransitionListener() {
+                public void transitionCompleted(Transition transition) {
+                    sheet.close(result);
+                    windowStateTransition = null;
+                }
+            });
 
-                openTransition = null;
-            }
-
-            if (duration > 0) {
-                closeTransition = new SlideTransition(sheet, beginX, 0,
-                    beginY, -sheet.getHeight(), true, duration, SLIDE_RATE);
-                closeTransition.start(new TransitionListener() {
-                    public void transitionCompleted(Transition transition) {
-                        sheet.close(result);
-                        closeTransition = null;
-                    }
-                });
-
-                vote = Vote.DEFER;
-            }
+            vote = Vote.DEFER;
         } else {
-            vote = (closeTransition != null
-                && closeTransition.isRunning()) ? Vote.DEFER : Vote.APPROVE;
+            vote = (windowStateTransition != null
+                && windowStateTransition.isRunning()) ? Vote.DEFER : Vote.APPROVE;
         }
 
         return vote;
@@ -377,14 +414,25 @@
 
     public void sheetCloseVetoed(Sheet sheet, Vote reason) {
         if (reason == Vote.DENY
-            && closeTransition != null) {
-            closeTransition.stop();
-            closeTransition = null;
+            && windowStateTransition != null) {
+            windowStateTransition.stop();
+            windowStateTransition = null;
         }
     }
 
     public void sheetClosed(Sheet sheet) {
         Window owner = sheet.getOwner();
+        owner.getComponentListeners().remove(ownerComponentListener);
         owner.getComponentMouseButtonListeners().remove(ownerMouseButtonListener);
     }
+
+    public void alignToOwnerContent() {
+        Sheet sheet = (Sheet)getComponent();
+
+        Window owner = sheet.getOwner();
+        Component content = owner.getContent();
+        Point contentLocation = content.mapPointToAncestor(owner.getDisplay(), 0, 0);
+        sheet.setLocation(contentLocation.x + (content.getWidth() - getWidth()) / 2,
+            contentLocation.y);
+    }
 }

Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/prompt_skin.wtkx
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/prompt_skin.wtkx?rev=785377&r1=785376&r2=785377&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/prompt_skin.wtkx (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/prompt_skin.wtkx Tue Jun 16 20:27:10 2009
@@ -16,7 +16,8 @@
 limitations under the License.
 -->
 
-<FlowPane orientation="vertical" styles="{spacing:8, horizontalAlignment:'justify'}"
+<FlowPane orientation="vertical" styles="{spacing:8, horizontalAlignment:'justify',
+    verticalAlignment:'bottom'}"
     preferredWidth="300"
     xmlns:wtkx="http://pivot.apache.org/wtkx"
     xmlns:collections="org.apache.pivot.collections"