← Back to team overview

openlp-core team mailing list archive

[Merge] lp:~oliwee/openlp/bug-1223841 into lp:openlp/2.0

 

Oliver Wieland has proposed merging lp:~oliwee/openlp/bug-1223841 into lp:openlp/2.0.

Requested reviews:
  OpenLP Core (openlp-core)
Related bugs:
  Bug #1223841 in OpenLP: "Transition does not work if texts are the same"
  https://bugs.launchpad.net/openlp/+bug/1223841

For more details, see:
https://code.launchpad.net/~oliwee/openlp/bug-1223841/+merge/185338
-- 
https://code.launchpad.net/~oliwee/openlp/bug-1223841/+merge/185338
Your team OpenLP Core is requested to review the proposed merge of lp:~oliwee/openlp/bug-1223841 into lp:openlp/2.0.
=== modified file 'openlp/core/lib/htmlbuilder.py'
--- openlp/core/lib/htmlbuilder.py	2012-12-30 19:41:24 +0000
+++ openlp/core/lib/htmlbuilder.py	2013-09-12 18:43:28 +0000
@@ -129,9 +129,8 @@
     }
 
     function show_text(newtext){
+        var fade_direction = 0;
         var match = /-webkit-text-fill-color:[^;\"]+/gi;
-        if(timer != null)
-            clearTimeout(timer);
         /*
         QtWebkit bug with outlines and justify causing outline alignment
         problems. (Bug 859950) Surround each word with a <span> to workaround,
@@ -150,39 +149,45 @@
                 newtext = '<span>' + newtext + '</span>';
             }
         }
+        
         text_fade('lyricsmain', newtext);
         text_fade('lyricsoutline', newtext);
         text_fade('lyricsshadow', newtext.replace(match, ''));
         if(text_opacity() == 1) return;
-        timer = setTimeout(function(){
-            show_text(newtext);
+        timer = setInterval(function(){
+            text_fade('lyricsmain', newtext);
+            text_fade('lyricsoutline', newtext);
+            text_fade('lyricsshadow', newtext.replace(match, ''));
+            if(text_opacity() == 1) clearInterval(timer);
         }, 100);
-    }
 
-    function text_fade(id, newtext){
-        /*
-        Using -webkit-transition: opacity 1s linear; would have been preferred
-        but it isn't currently quick enough when animating multiple layers of
-        large areas of large text. Therefore do it manually as best we can.
-        Hopefully in the future we can revisit and do more interesting
-        transitions using -webkit-transition and -webkit-transform.
-        However we need to ensure interrupted transitions (quickly change 2
-        slides) still looks pretty and is zippy.
-        */
-        var text = document.getElementById(id);
-        if(text == null) return;
-        if(!transition){
-            text.innerHTML = newtext;
-            return;
-        }
-        if(newtext == text.innerHTML){
-            text.style.opacity = parseFloat(text.style.opacity) + 0.3;
-            if(text.style.opacity > 0.7)
-                text.style.opacity = 1;
-        } else {
-            text.style.opacity = parseFloat(text.style.opacity) - 0.3;
-            if(text.style.opacity <= 0.1){
+        function text_fade(id, newtext){
+            /*
+            Using -webkit-transition: opacity 1s linear; would have been preferred
+            but it isn't currently quick enough when animating multiple layers of
+            large areas of large text. Therefore do it manually as best we can.
+            Hopefully in the future we can revisit and do more interesting
+            transitions using -webkit-transition and -webkit-transform.
+            However we need to ensure interrupted transitions (quickly change 2
+            slides) still looks pretty and is zippy.
+            */
+            var text = document.getElementById(id);
+            if(text == null) return;
+            if(!transition){
                 text.innerHTML = newtext;
+                return;
+            }
+            if(fade_direction != 1){
+                text.style.opacity = parseFloat(text.style.opacity) - 0.3;
+                if(text.style.opacity <= 0.1){
+                    text.innerHTML = newtext;
+                    fade_direction = 1;
+                }
+            }else{
+                text.style.opacity = parseFloat(text.style.opacity) + 0.3;
+                if(text.style.opacity > 0.7){
+                    text.style.opacity = 1;
+                }
             }
         }
     }


Follow ups