summaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/terminal
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2009-04-28 18:14:06 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2009-04-28 18:14:06 +0000
commit4968f78a891c236744a8fcd0ed622d615d413cda (patch)
tree527635cf86ffcb888b3b4e6020577a54ad34f8cf /src/com/itmill/toolkit/terminal
parent7dac3bdccea22bd357062d5726b1383647628a6b (diff)
downloadvaadin-framework-4968f78a891c236744a8fcd0ed622d615d413cda.tar.gz
vaadin-framework-4968f78a891c236744a8fcd0ed622d615d413cda.zip
refactored notification fading, avoids regression when updating to GWT 1.6. Also added generics for notificatio event listener list.
svn changeset:7554/svn branch:6.0
Diffstat (limited to 'src/com/itmill/toolkit/terminal')
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/INotification.java41
1 files changed, 25 insertions, 16 deletions
diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/INotification.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/INotification.java
index 1186f99ad5..2064fac824 100644
--- a/src/com/itmill/toolkit/terminal/gwt/client/ui/INotification.java
+++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/INotification.java
@@ -34,6 +34,7 @@ public class INotification extends IToolkitOverlay {
private static final int mouseMoveThreshold = 7;
private static final int Z_INDEX_BASE = 20000;
public static final String STYLE_SYSTEM = "system";
+ private static final int FADE_ANIMATION_INTERVAL = 50; // == 20 fps
private int startOpacity = 90;
private int fadeMsec = 400;
@@ -47,7 +48,7 @@ public class INotification extends IToolkitOverlay {
private String temporaryStyle;
- private ArrayList listeners;
+ private ArrayList<EventListener> listeners;
public INotification() {
setStylePrimaryName(STYLENAME);
@@ -130,17 +131,20 @@ public class INotification extends IToolkitOverlay {
public void fade() {
DOM.removeEventPreview(this);
cancelDelay();
- final int msec = fadeMsec / (startOpacity / 5);
fader = new Timer() {
- long timestamp = 0;
- int opacity = startOpacity;
+ private final long start = new Date().getTime();
@Override
public void run() {
- double adjust = (timestamp == 0 ? 1
- : (new Date().getTime() - timestamp) / msec);
- opacity -= adjust * 5d;
- setOpacity(getElement(), opacity);
+ /*
+ * To make animation smooth, don't count that event happens on
+ * time. Reduce opacity according to the actual time spent
+ * instead of fixed decrement.
+ */
+ long now = new Date().getTime();
+ long timeEplaced = now - start;
+ float remainingFraction = 1 - timeEplaced / (float) fadeMsec;
+ int opacity = (int) (startOpacity * remainingFraction);
if (opacity <= 0) {
cancel();
hide();
@@ -150,12 +154,12 @@ public class INotification extends IToolkitOverlay {
DOM.setStyleAttribute(getElement(), "width", "");
DOM.setStyleAttribute(getElement(), "height", "");
}
-
+ } else {
+ setOpacity(getElement(), opacity);
}
- timestamp = new Date().getTime();
}
};
- fader.scheduleRepeating(msec);
+ fader.scheduleRepeating(FADE_ANIMATION_INTERVAL);
}
public void setPosition(int position) {
@@ -219,8 +223,10 @@ public class INotification extends IToolkitOverlay {
private void setOpacity(Element el, int opacity) {
DOM.setStyleAttribute(el, "opacity", "" + (opacity / 100.0));
- DOM.setStyleAttribute(el, "filter", "Alpha(opacity=" + opacity + ")");
-
+ if (BrowserInfo.get().isIE()) {
+ DOM.setStyleAttribute(el, "filter", "Alpha(opacity=" + opacity
+ + ")");
+ }
}
@Override
@@ -279,7 +285,7 @@ public class INotification extends IToolkitOverlay {
public void addEventListener(EventListener listener) {
if (listeners == null) {
- listeners = new ArrayList();
+ listeners = new ArrayList<EventListener>();
}
listeners.add(listener);
}
@@ -293,14 +299,17 @@ public class INotification extends IToolkitOverlay {
private void fireEvent(HideEvent event) {
if (listeners != null) {
- for (Iterator it = listeners.iterator(); it.hasNext();) {
- EventListener l = (EventListener) it.next();
+ for (Iterator<EventListener> it = listeners.iterator(); it
+ .hasNext();) {
+ EventListener l = it.next();
l.notificationHidden(event);
}
}
}
public class HideEvent extends EventObject {
+ private static final long serialVersionUID = 4428671753988459560L;
+
public HideEvent(Object source) {
super(source);
}