private static final int mouseMoveThreshold = 7;\r
private static final int Z_INDEX_BASE = 20000;\r
public static final String STYLE_SYSTEM = "system";\r
+ private static final int FADE_ANIMATION_INTERVAL = 50; // == 20 fps\r
\r
private int startOpacity = 90;\r
private int fadeMsec = 400;\r
\r
private String temporaryStyle;\r
\r
- private ArrayList listeners;\r
+ private ArrayList<EventListener> listeners;\r
\r
public INotification() {\r
setStylePrimaryName(STYLENAME);\r
public void fade() {\r
DOM.removeEventPreview(this);\r
cancelDelay();\r
- final int msec = fadeMsec / (startOpacity / 5);\r
fader = new Timer() {\r
- long timestamp = 0;\r
- int opacity = startOpacity;\r
+ private final long start = new Date().getTime();\r
\r
@Override\r
public void run() {\r
- double adjust = (timestamp == 0 ? 1\r
- : (new Date().getTime() - timestamp) / msec);\r
- opacity -= adjust * 5d;\r
- setOpacity(getElement(), opacity);\r
+ /*\r
+ * To make animation smooth, don't count that event happens on\r
+ * time. Reduce opacity according to the actual time spent\r
+ * instead of fixed decrement.\r
+ */\r
+ long now = new Date().getTime();\r
+ long timeEplaced = now - start;\r
+ float remainingFraction = 1 - timeEplaced / (float) fadeMsec;\r
+ int opacity = (int) (startOpacity * remainingFraction);\r
if (opacity <= 0) {\r
cancel();\r
hide();\r
DOM.setStyleAttribute(getElement(), "width", "");\r
DOM.setStyleAttribute(getElement(), "height", "");\r
}\r
-\r
+ } else {\r
+ setOpacity(getElement(), opacity);\r
}\r
- timestamp = new Date().getTime();\r
}\r
};\r
- fader.scheduleRepeating(msec);\r
+ fader.scheduleRepeating(FADE_ANIMATION_INTERVAL);\r
}\r
\r
public void setPosition(int position) {\r
\r
private void setOpacity(Element el, int opacity) {\r
DOM.setStyleAttribute(el, "opacity", "" + (opacity / 100.0));\r
- DOM.setStyleAttribute(el, "filter", "Alpha(opacity=" + opacity + ")");\r
-\r
+ if (BrowserInfo.get().isIE()) {\r
+ DOM.setStyleAttribute(el, "filter", "Alpha(opacity=" + opacity\r
+ + ")");\r
+ }\r
}\r
\r
@Override\r
\r
public void addEventListener(EventListener listener) {\r
if (listeners == null) {\r
- listeners = new ArrayList();\r
+ listeners = new ArrayList<EventListener>();\r
}\r
listeners.add(listener);\r
}\r
\r
private void fireEvent(HideEvent event) {\r
if (listeners != null) {\r
- for (Iterator it = listeners.iterator(); it.hasNext();) {\r
- EventListener l = (EventListener) it.next();\r
+ for (Iterator<EventListener> it = listeners.iterator(); it\r
+ .hasNext();) {\r
+ EventListener l = it.next();\r
l.notificationHidden(event);\r
}\r
}\r
}\r
\r
public class HideEvent extends EventObject {\r
+ private static final long serialVersionUID = 4428671753988459560L;\r
+\r
public HideEvent(Object source) {\r
super(source);\r
}\r