]> source.dussan.org Git - vaadin-framework.git/commitdiff
refactored notification fading, avoids regression when updating to GWT 1.6. Also...
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 28 Apr 2009 18:14:06 +0000 (18:14 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Tue, 28 Apr 2009 18:14:06 +0000 (18:14 +0000)
svn changeset:7554/svn branch:6.0

src/com/itmill/toolkit/terminal/gwt/client/ui/INotification.java

index 1186f99ad50927949790a908e44c317839856702..2064fac82409cb57ecbac3ec951e77bc89544b3d 100644 (file)
@@ -34,6 +34,7 @@ public class INotification extends IToolkitOverlay {
     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
@@ -47,7 +48,7 @@ public class INotification extends IToolkitOverlay {
 \r
     private String temporaryStyle;\r
 \r
-    private ArrayList listeners;\r
+    private ArrayList<EventListener> listeners;\r
 \r
     public INotification() {\r
         setStylePrimaryName(STYLENAME);\r
@@ -130,17 +131,20 @@ public class INotification extends IToolkitOverlay {
     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
@@ -150,12 +154,12 @@ public class INotification extends IToolkitOverlay {
                         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
@@ -219,8 +223,10 @@ public class INotification extends IToolkitOverlay {
 \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
@@ -279,7 +285,7 @@ public class INotification extends IToolkitOverlay {
 \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
@@ -293,14 +299,17 @@ public class INotification extends IToolkitOverlay {
 \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