]> source.dussan.org Git - vaadin-framework.git/commitdiff
Avoid flickering of fading animation. null check to avoid multiple animations.
authorMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 14 May 2009 12:37:00 +0000 (12:37 +0000)
committerMatti Tahvonen <matti.tahvonen@itmill.com>
Thu, 14 May 2009 12:37:00 +0000 (12:37 +0000)
svn changeset:7808/svn branch:6.0

src/com/vaadin/terminal/gwt/client/ui/VNotification.java

index 5567e2d53461b1437ec505b3449f7a381a5b5653..23e48437a35a22ec550a19bed0acae5bbdd0f1f0 100644 (file)
@@ -133,35 +133,39 @@ public class VNotification extends VToolkitOverlay {
     public void fade() {\r
         DOM.removeEventPreview(this);\r
         cancelDelay();\r
-        fader = new Timer() {\r
-            private final long start = new Date().getTime();\r
-\r
-            @Override\r
-            public void run() {\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
-                    if (BrowserInfo.get().isOpera()) {\r
-                        // tray notification on opera needs to explicitly define\r
-                        // size, reset it\r
-                        DOM.setStyleAttribute(getElement(), "width", "");\r
-                        DOM.setStyleAttribute(getElement(), "height", "");\r
+        if (fader == null) {\r
+            fader = new Timer() {\r
+                private final long start = new Date().getTime();\r
+\r
+                @Override\r
+                public void run() {\r
+                    /*\r
+                     * To make animation smooth, don't count that event happens\r
+                     * on time. Reduce opacity according to the actual time\r
+                     * spent instead of fixed decrement.\r
+                     */\r
+                    long now = new Date().getTime();\r
+                    long timeEplaced = now - start;\r
+                    float remainingFraction = 1 - timeEplaced\r
+                            / (float) fadeMsec;\r
+                    int opacity = (int) (startOpacity * remainingFraction);\r
+                    if (opacity <= 0) {\r
+                        cancel();\r
+                        hide();\r
+                        if (BrowserInfo.get().isOpera()) {\r
+                            // tray notification on opera needs to explicitly\r
+                            // define\r
+                            // size, reset it\r
+                            DOM.setStyleAttribute(getElement(), "width", "");\r
+                            DOM.setStyleAttribute(getElement(), "height", "");\r
+                        }\r
+                    } else {\r
+                        setOpacity(getElement(), opacity);\r
                     }\r
-                } else {\r
-                    setOpacity(getElement(), opacity);\r
                 }\r
-            }\r
-        };\r
-        fader.scheduleRepeating(FADE_ANIMATION_INTERVAL);\r
+            };\r
+            fader.scheduleRepeating(FADE_ANIMATION_INTERVAL);\r
+        }\r
     }\r
 \r
     public void setPosition(int position) {\r