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/07/13 18:33:01 UTC
svn commit: r793618 - in
/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra:
TerraExpanderSkin.java TerraRollupSkin.java TerraSheetSkin.java
Author: gbrown
Date: Mon Jul 13 16:33:01 2009
New Revision: 793618
URL: http://svn.apache.org/viewvc?rev=793618&view=rev
Log:
Resolve issue PIVOT-124 by updating TerraRollupSkin to call setExpanded() when the transition is complete; take advantage of Transition reversal in TerraExpanderSkin; minor updates to TerraSheetSkin.
Modified:
incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.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
Modified: incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java
URL: http://svn.apache.org/viewvc/incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java?rev=793618&r1=793617&r2=793618&view=diff
==============================================================================
--- incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java (original)
+++ incubator/pivot/trunk/wtk/src/org/apache/pivot/wtk/skin/terra/TerraExpanderSkin.java Mon Jul 13 16:33:01 2009
@@ -50,21 +50,23 @@
import org.apache.pivot.wtk.media.Image;
import org.apache.pivot.wtk.skin.ContainerSkin;
-
/**
- * Expander skin.
+ * Terra expander skin.
*
* @author gbrown
*/
public class TerraExpanderSkin extends ContainerSkin
implements ButtonPressListener, ExpanderListener {
+ /**
+ * Expand/collapse transition.
+ *
+ * @author gbrown
+ */
public class ExpandTransition extends Transition {
- private boolean expand;
private Easing easing = new Quadratic();
- public ExpandTransition(boolean expand, int duration, int rate) {
- super(duration, rate, false);
- this.expand = expand;
+ public ExpandTransition(boolean reversed) {
+ super(EXPAND_DURATION, EXPAND_RATE, false, reversed);
}
public float getScale() {
@@ -72,10 +74,10 @@
int duration = getDuration();
float scale;
- if (expand) {
- scale = easing.easeOut(elapsedTime, 0, 1, duration);
+ if (isReversed()) {
+ scale = easing.easeIn(elapsedTime, 0, 1, duration);
} else {
- scale = easing.easeIn(elapsedTime, 1, -1, duration);
+ scale = easing.easeOut(elapsedTime, 0, 1, duration);
}
return scale;
@@ -167,29 +169,6 @@
}
}
- private class TitleBarMouseHandler
- implements ComponentMouseButtonListener {
- public boolean mouseDown(Component component, Mouse.Button button, int x, int y) {
- return false;
- }
-
- public boolean mouseUp(Component component, Mouse.Button button, int x, int y) {
- return false;
- }
-
- public boolean mouseClick(Component component, Mouse.Button button, int x, int y, int count) {
- boolean consumed = false;
-
- if (count == 2) {
- Expander expander = (Expander)getComponent();
- expander.setExpanded(!expander.isExpanded());
- consumed = true;
- }
-
- return consumed;
- }
- }
-
private Image collapseImage = new CollapseImage();
private Image expandImage = new ExpandImage();
@@ -200,8 +179,6 @@
private Label titleLabel = new Label();
private ShadeButton shadeButton = null;
- private TitleBarMouseHandler titleBarMouseHandler = new TitleBarMouseHandler();
-
private Color titleBarBackgroundColor;
private Color titleBarBorderColor;
private Color shadeButtonColor;
@@ -209,11 +186,24 @@
private Color borderColor;
private Insets padding;
- // Derived colors
private Color titleBarBevelColor;
private ExpandTransition expandTransition = null;
+ private ComponentMouseButtonListener titleBarMouseListener = new ComponentMouseButtonListener.Adapter() {
+ public boolean mouseClick(Component component, Mouse.Button button, int x, int y, int count) {
+ boolean consumed = false;
+
+ if (count == 2) {
+ Expander expander = (Expander)getComponent();
+ expander.setExpanded(!expander.isExpanded());
+ consumed = true;
+ }
+
+ return consumed;
+ }
+ };
+
private static final int EXPAND_DURATION = 250;
private static final int EXPAND_RATE = 30;
@@ -232,7 +222,7 @@
titleBarBevelColor = TerraTheme.brighten(titleBarBackgroundColor);
titleBarBoxPane = new BoxPane(Orientation.HORIZONTAL);
- titleBarBoxPane.getComponentMouseButtonListeners().add(titleBarMouseHandler);
+ titleBarBoxPane.getComponentMouseButtonListeners().add(titleBarMouseListener);
titleBarBoxPane.getStyles().put("horizontalAlignment", HorizontalAlignment.JUSTIFY);
titleBarBoxPane.getStyles().put("verticalAlignment", VerticalAlignment.CENTER);
@@ -321,7 +311,7 @@
if (content != null
&& (expander.isExpanded()
|| (expandTransition != null
- && expandTransition.expand))) {
+ && !expandTransition.isReversed()))) {
// Title bar border is only drawn when content is non-null and
// expander is expanded or expanding
preferredHeight += 1;
@@ -363,7 +353,7 @@
if (expander.isExpanded()
|| (expandTransition != null
- && expandTransition.expand)) {
+ && !expandTransition.isReversed())) {
// Title bar border is only drawn when expander is expanded
// or expanding
preferredHeight += 1;
@@ -397,7 +387,7 @@
if ((expander.isExpanded()
|| (expandTransition != null
- && expandTransition.expand))
+ && !expandTransition.isReversed()))
&& content != null) {
int contentWidth = Math.max(width - (2 + padding.left + padding.right), 0);
int contentHeight = Math.max(height - (3 + padding.top + padding.bottom + titleBarHeight), 0);
@@ -419,7 +409,7 @@
Expander expander = (Expander)getComponent();
if (expander.isExpanded()
|| (expandTransition != null
- && expandTransition.expand)) {
+ && !expandTransition.isReversed())) {
int titleBarHeight = titleBarBoxPane.getPreferredHeight(-1);
graphics.setPaint(titleBarBorderColor);
GraphicsUtilities.drawLine(graphics, 0, 1 + titleBarHeight, width, Orientation.HORIZONTAL);
@@ -611,13 +601,13 @@
if (expander.isShowing()
&& expandTransition == null
&& expander.getContent() != null) {
- final boolean expand = !expander.isExpanded();
- shadeButton.setButtonData(expand ? collapseImage : expandImage);
- expandTransition = new ExpandTransition(expand, EXPAND_DURATION, EXPAND_RATE);
+ final boolean expanded = expander.isExpanded();
+ shadeButton.setButtonData(expanded ? collapseImage : expandImage);
+ expandTransition = new ExpandTransition(expanded);
expandTransition.start(new TransitionListener() {
public void transitionCompleted(Transition transition) {
- expander.setExpanded(expand);
+ expander.setExpanded(!expanded);
expandTransition = null;
}
});
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=793618&r1=793617&r2=793618&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 Mon Jul 13 16:33:01 2009
@@ -23,7 +23,6 @@
import java.awt.geom.RoundRectangle2D;
import org.apache.pivot.util.Vote;
-import org.apache.pivot.wtk.ApplicationContext;
import org.apache.pivot.wtk.Component;
import org.apache.pivot.wtk.ComponentMouseButtonListener;
import org.apache.pivot.wtk.Cursor;
@@ -39,74 +38,54 @@
import org.apache.pivot.wtk.skin.ComponentSkin;
import org.apache.pivot.wtk.skin.RollupSkin;
-
/**
- * Terra theme's rollup skin.
+ * Terra rollup skin.
*
* @author tvolkert
+ * @author gbrown
*/
public class TerraRollupSkin extends RollupSkin {
/**
- * Provides expand/collapse animation.
+ * Expand/collapse transition.
*
- * @author tvolkert
+ * @author gbrown
*/
public class ExpandTransition extends Transition {
- private int height1;
- private int height2;
- private boolean collapse;
-
- private int originalPreferredHeight;
- private int height;
-
private Easing easing = new Quadratic();
- public ExpandTransition(int height1, int height2, boolean collapse, int duration, int rate) {
- super(duration, rate, false);
-
- this.height1 = height1;
- this.height2 = height2;
- this.collapse = collapse;
+ public ExpandTransition(boolean reversed) {
+ super(EXPAND_DURATION, EXPAND_RATE, false, reversed);
}
- public int getHeight() {
- return height;
+ public float getScale() {
+ int elapsedTime = getElapsedTime();
+ int duration = getDuration();
+
+ float scale;
+ if (isReversed()) {
+ scale = easing.easeIn(elapsedTime, 0, 1, duration);
+ } else {
+ scale = easing.easeOut(elapsedTime, 0, 1, duration);
+ }
+
+ return scale;
}
@Override
public void start(TransitionListener transitionListener) {
- Rollup rollup = (Rollup)getComponent();
- originalPreferredHeight = rollup.isPreferredHeightSet() ?
- rollup.getPreferredHeight() : -1;
-
+ getComponent().setEnabled(false);
super.start(transitionListener);
}
@Override
public void stop() {
- Rollup rollup = (Rollup)getComponent();
- rollup.setPreferredHeight(originalPreferredHeight);
-
+ getComponent().setEnabled(true);
super.stop();
}
@Override
protected void update() {
- float percentComplete = getPercentComplete();
-
- if (percentComplete < 1f) {
- int elapsedTime = getElapsedTime();
- int duration = getDuration();
-
- height = (int)(height1 + (height2 - height1) * percentComplete);
- if (collapse) {
- height = (int)easing.easeIn(elapsedTime, height1, height2 - height1, duration);
- } else {
- height = (int)easing.easeOut(elapsedTime, height1, height2 - height1, duration);
- }
-
- getComponent().setPreferredHeight(height);
- }
+ invalidateComponent();
}
}
@@ -184,22 +163,19 @@
}
}
- /**
- * Responsible for expanding and collapsing the rollup when the user clicks
- * on the heading component. This only applies if <tt>headingToggles</tt>
- * is <tt>true</tt>.
- *
- * @author tvolkert
- */
- private class HeadingMouseButtonHandler implements ComponentMouseButtonListener {
- public boolean mouseDown(Component component, Mouse.Button button, int x, int y) {
- return false;
- }
+ private RollupButton rollupButton = null;
- public boolean mouseUp(Component component, Mouse.Button button, int x, int y) {
- return false;
- }
+ // Styles
+ private Color buttonColor;
+ private int spacing;
+ private int buffer;
+ private boolean justify;
+ private boolean headingToggles;
+ private boolean useBullet;
+ private ExpandTransition expandTransition = null;
+
+ private ComponentMouseButtonListener headingMouseButtonListener = new ComponentMouseButtonListener.Adapter() {
public boolean mouseClick(Component component, Mouse.Button button, int x, int y, int count) {
boolean consumed = false;
@@ -211,25 +187,7 @@
return consumed;
}
- }
-
- // Skin components
- private RollupButton rollupButton = null;
-
- // Internal handlers
- private HeadingMouseButtonHandler headingMouseButtonHandler = new HeadingMouseButtonHandler();
-
- // Animation support
- private ExpandTransition expandTransition = null;
- private ExpandTransition collapseTransition = null;
-
- // Styles
- private Color buttonColor;
- private int spacing;
- private int buffer;
- private boolean justify;
- private boolean headingToggles;
- private boolean useBullet;
+ };
private static final int EXPAND_DURATION = 250;
private static final int EXPAND_RATE = 30;
@@ -267,7 +225,7 @@
// Uninitialize state
Component heading = rollup.getHeading();
if (heading != null) {
- heading.getComponentMouseButtonListeners().remove(headingMouseButtonHandler);
+ heading.getComponentMouseButtonListeners().remove(headingMouseButtonListener);
}
// Remove the rollup button
@@ -290,7 +248,10 @@
preferredWidth = heading.getPreferredWidth(-1);
}
- if (rollup.isExpanded() && content != null) {
+ if (content != null
+ && (rollup.isExpanded()
+ || (expandTransition != null
+ && !expandTransition.isReversed()))) {
preferredWidth = Math.max(preferredWidth, content.getPreferredWidth(-1));
}
@@ -302,23 +263,6 @@
@Override
public int getPreferredHeight(int width) {
Rollup rollup = (Rollup)getComponent();
- return getPreferredHeight(width, rollup.isExpanded());
- }
-
- /**
- * Gets the preferred height of the rollup assuming the specified expansion
- * state. We use this to transition from one expansion state to another
- * because it allows us to have foreknowledge of the height value to which
- * we are transitioning.
- *
- * @param width
- * The width constraint.
- *
- * @param expanded
- * The supposed expansion state.
- */
- private int getPreferredHeight(int width, boolean expanded) {
- Rollup rollup = (Rollup)getComponent();
Component heading = rollup.getHeading();
Component content = rollup.getContent();
@@ -336,8 +280,15 @@
preferredHeight += heading.getPreferredHeight(width);
}
- if (expanded && content != null) {
- preferredHeight += spacing + content.getPreferredHeight(width);
+ if (content != null) {
+ if (expandTransition == null) {
+ if (rollup.isExpanded()) {
+ preferredHeight += spacing + content.getPreferredHeight(width);
+ }
+ } else {
+ float scale = expandTransition.getScale();
+ preferredHeight += (int)(scale * (spacing + content.getPreferredHeight(width)));
+ }
}
preferredHeight = Math.max(preferredHeight, rollupButton.getPreferredHeight(-1));
@@ -377,7 +328,9 @@
}
if (content != null) {
- if (rollup.isExpanded()) {
+ if (rollup.isExpanded()
+ || (expandTransition != null
+ && !expandTransition.isReversed())) {
int contentWidth, contentHeight;
if (justify) {
contentWidth = justifiedWidth;
@@ -397,6 +350,7 @@
}
y = (heading == null ? 0 : (heading.getHeight() - rollupButtonSize.height) / 2 + 1);
+
rollupButton.setLocation(0, y);
}
@@ -478,13 +432,13 @@
@Override
public void headingChanged(Rollup rollup, Component previousHeading) {
if (previousHeading != null) {
- previousHeading.getComponentMouseButtonListeners().remove(headingMouseButtonHandler);
+ previousHeading.getComponentMouseButtonListeners().remove(headingMouseButtonListener);
}
Component heading = rollup.getHeading();
if (heading != null) {
- heading.getComponentMouseButtonListeners().add(headingMouseButtonHandler);
+ heading.getComponentMouseButtonListeners().add(headingMouseButtonListener);
}
invalidateComponent();
@@ -505,49 +459,30 @@
}
}
- // RollupStateListener methods
-
+ // Rollup state events
@Override
public Vote previewExpandedChange(final Rollup rollup) {
- Vote vote = Vote.APPROVE;
+ Vote vote;
- if (rollup.getDisplay() != null) {
- if (rollup.isExpanded()) {
- // Start a collapse transition, return false, and set the
- // expanded state when the transition is complete
- if (collapseTransition == null) {
- int duration = EXPAND_DURATION;
- int height1 = getHeight();
-
- if (expandTransition != null) {
- // Stop the expand transition
- expandTransition.stop();
-
- // Record its progress so we can reverse it at the right point
- duration = expandTransition.getElapsedTime();
- height1 = expandTransition.getHeight();
-
- expandTransition = null;
- }
-
- if (duration > 0) {
- int height2 = getPreferredHeight(-1, false);
-
- collapseTransition = new ExpandTransition(height1, height2,
- true, duration, EXPAND_RATE);
- collapseTransition.start(new TransitionListener() {
- public void transitionCompleted(Transition transition) {
- rollup.setExpanded(false);
- collapseTransition = null;
- }
- });
-
- vote = Vote.DEFER;
- }
- } else {
- vote = collapseTransition.isRunning() ? Vote.DEFER : Vote.APPROVE;
+ if (rollup.isShowing()
+ && expandTransition == null
+ && rollup.getContent() != null) {
+ final boolean expanded = rollup.isExpanded();
+ expandTransition = new ExpandTransition(expanded);
+
+ expandTransition.start(new TransitionListener() {
+ public void transitionCompleted(Transition transition) {
+ rollup.setExpanded(!expanded);
+ expandTransition = null;
}
- }
+ });
+ }
+
+ if (expandTransition == null
+ || !expandTransition.isRunning()) {
+ vote = Vote.APPROVE;
+ } else {
+ vote = Vote.DEFER;
}
return vote;
@@ -556,36 +491,19 @@
@Override
public void expandedChangeVetoed(Rollup rollup, Vote reason) {
if (reason == Vote.DENY
- && collapseTransition != null) {
- collapseTransition.stop();
- collapseTransition = null;
+ && expandTransition != null) {
+ // NOTE We stop, rather than end, the transition so the completion
+ // event isn't fired; if the event fires, the listener will set
+ // the expanded state
+ expandTransition.stop();
+ expandTransition = null;
+
+ invalidateComponent();
}
}
@Override
public void expandedChanged(final Rollup rollup) {
invalidateComponent();
-
- if (rollup.getDisplay() != null) {
- if (rollup.isExpanded()) {
- // Start an expansion transition
- int height1 = getHeight();
- int height2 = getPreferredHeight(-1, true);
-
- expandTransition = new ExpandTransition(height1, height2,
- false, EXPAND_DURATION, EXPAND_RATE);
- expandTransition.start(new TransitionListener() {
- public void transitionCompleted(Transition transition) {
- ApplicationContext.queueCallback(new Runnable() {
- public void run() {
- rollup.scrollAreaToVisible(0, 0, rollup.getWidth(), rollup.getHeight());
- }
- });
-
- expandTransition = null;
- }
- });
- }
- }
}
}
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=793618&r1=793617&r2=793618&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 Mon Jul 13 16:33:01 2009
@@ -49,24 +49,15 @@
* @author tvolkert
*/
public class TerraSheetSkin extends WindowSkin implements SheetStateListener {
- public class WindowStateTransition extends Transition {
- private boolean close;
-
- public WindowStateTransition(boolean close) {
- super(TRANSITION_DURATION, TRANSITION_RATE, false, close);
- this.close = close;
+ public class OpenTransition extends Transition {
+ public OpenTransition(boolean reversed) {
+ super(TRANSITION_DURATION, TRANSITION_RATE, false, reversed);
}
@Override
public void update() {
invalidateComponent();
}
-
- @Override
- public void reverse() {
- super.reverse();
- close = !close;
- }
}
private Color borderColor;
@@ -76,7 +67,7 @@
// Derived colors
private Color bevelColor;
- private WindowStateTransition windowStateTransition = null;
+ private OpenTransition openTransition = null;
private Quadratic easing = new Quadratic();
private ComponentListener ownerComponentListener = new ComponentListener.Adapter() {
@@ -204,15 +195,15 @@
}
public int getEasedPreferredHeight(int preferredHeight) {
- if (windowStateTransition != null
- && windowStateTransition.isRunning()) {
+ if (openTransition != null
+ && openTransition.isRunning()) {
float scale;
- if (windowStateTransition.close) {
- scale = easing.easeIn(windowStateTransition.getElapsedTime(), 0, 1,
- windowStateTransition.getDuration());
+ if (openTransition.isReversed()) {
+ scale = easing.easeIn(openTransition.getElapsedTime(), 0, 1,
+ openTransition.getDuration());
} else {
- scale = easing.easeOut(windowStateTransition.getElapsedTime(), 0, 1,
- windowStateTransition.getDuration());
+ scale = easing.easeOut(openTransition.getElapsedTime(), 0, 1,
+ openTransition.getDuration());
}
preferredHeight = (int)(scale * preferredHeight);
@@ -365,10 +356,10 @@
Component ownerContent = owner.getContent();
ownerContent.getComponentListeners().add(ownerContentComponentListener);
- windowStateTransition = new WindowStateTransition(false);
- windowStateTransition.start(new TransitionListener() {
+ openTransition = new OpenTransition(false);
+ openTransition.start(new TransitionListener() {
public void transitionCompleted(Transition transition) {
- windowStateTransition = null;
+ openTransition = null;
}
});
}
@@ -385,24 +376,24 @@
TransitionListener transitionListener = new TransitionListener() {
public void transitionCompleted(Transition transition) {
sheet.close(result);
- windowStateTransition = null;
+ openTransition = null;
}
};
- if (windowStateTransition == null) {
+ if (openTransition == null) {
// Start the close transition
- windowStateTransition = new WindowStateTransition(true);
- windowStateTransition.start(transitionListener);
+ openTransition = new OpenTransition(true);
+ openTransition.start(transitionListener);
} else {
// Reverse the open transition
- if (!windowStateTransition.close
- && windowStateTransition.isRunning()) {
- windowStateTransition.reverse(transitionListener);
+ if (!openTransition.isReversed()
+ && openTransition.isRunning()) {
+ openTransition.reverse(transitionListener);
}
}
- vote = (windowStateTransition != null
- && windowStateTransition.isRunning()) ? Vote.DEFER : Vote.APPROVE;
+ vote = (openTransition != null
+ && openTransition.isRunning()) ? Vote.DEFER : Vote.APPROVE;
}
return vote;
@@ -410,9 +401,9 @@
public void sheetCloseVetoed(Sheet sheet, Vote reason) {
if (reason == Vote.DENY
- && windowStateTransition != null) {
- windowStateTransition.stop();
- windowStateTransition = null;
+ && openTransition != null) {
+ openTransition.stop();
+ openTransition = null;
}
}