[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

simon.fraser at apple.com simon.fraser at apple.com
Thu Apr 8 01:32:05 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit afa28527edbe46fc1a16639c67fd75bbdb15a650
Author: simon.fraser at apple.com <simon.fraser at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Sun Jan 31 03:21:44 2010 +0000

    2010-01-30  Simon Fraser  <simon.fraser at apple.com>
    
            Reviewed by Adele Peterson.
    
            Do color animations on premultiplied colors
            https://bugs.webkit.org/show_bug.cgi?id=34383
    
            Convert colors to premultiplied alpha before interpolating them,
            then convert the result back to non-premultiplied. This gives better
            results when animating from transparent colors.
    
            Test: transitions/color-transition-premultiplied.html
    
            * page/animation/AnimationBase.cpp:
            (WebCore::blendFunc):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54106 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 205583a..14a29c6 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1 +1,13 @@
+2010-01-30  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Adele Peterson.
+
+        Do color animations on premultiplied colors
+        https://bugs.webkit.org/show_bug.cgi?id=34383
+        
+        Testcase for animating from transparent colors.
+
+        * transitions/color-transition-premultiplied-expected.txt: Added.
+        * transitions/color-transition-premultiplied.html: Added.
+
 == Rolled over to ChangeLog-2010-01-29 ==
diff --git a/LayoutTests/transitions/color-transition-premultiplied-expected.txt b/LayoutTests/transitions/color-transition-premultiplied-expected.txt
new file mode 100644
index 0000000..59fca89
--- /dev/null
+++ b/LayoutTests/transitions/color-transition-premultiplied-expected.txt
@@ -0,0 +1,3 @@
+PASS - "background-color" property for "one" element at 0.5s saw something close to: 0,127,0
+PASS - "background-color" property for "two" element at 0.5s saw something close to: 0,0,255
+
diff --git a/LayoutTests/transitions/color-transition-premultiplied.html b/LayoutTests/transitions/color-transition-premultiplied.html
new file mode 100644
index 0000000..d725a16
--- /dev/null
+++ b/LayoutTests/transitions/color-transition-premultiplied.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+  <style type="text/css" media="screen">
+  
+    .box {
+      width: 100px;
+      height: 100px;
+      margin: 10px;
+      border: 1px solid black;
+      -webkit-transition: background-color 1s linear;
+      -moz-transition: background-color 1s linear;
+    }
+    
+    #one {
+      background-color: transparent;
+    }
+    
+    #one.changed {
+      background-color: green;
+    }
+    
+    #two {
+      background-color: rgba(0, 255, 0, 0);
+    }
+
+    #two.changed {
+      background-color: rgba(0, 0, 255, 1);
+    }
+  </style>
+  <script src="transition-test-helpers.js" type="text/javascript" charset="utf-8"></script>
+  <script type="text/javascript" charset="utf-8">
+    const expectedValues = [
+      // [time, element-id, property, expected-value, tolerance]
+      [0.5, 'one', 'background-color', [0, 127, 0], 2],
+      [0.5, 'two', 'background-color', [0, 0, 255], 2]
+    ];
+
+    function setupTest()
+    {
+      document.getElementById('one').className = 'box changed';
+      document.getElementById('two').className = 'box changed';
+    }
+
+    runTransitionTest(expectedValues, setupTest, true);
+  </script>
+</head>
+<body>
+
+  <div class="box" id="one">
+  </div>
+
+  <div class="box" id="two">
+  </div>
+  
+  <div id="result">
+  </div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 825e14e..aef12e8 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,19 @@
+2010-01-30  Simon Fraser  <simon.fraser at apple.com>
+
+        Reviewed by Adele Peterson.
+
+        Do color animations on premultiplied colors
+        https://bugs.webkit.org/show_bug.cgi?id=34383
+        
+        Convert colors to premultiplied alpha before interpolating them,
+        then convert the result back to non-premultiplied. This gives better
+        results when animating from transparent colors.
+
+        Test: transitions/color-transition-premultiplied.html
+
+        * page/animation/AnimationBase.cpp:
+        (WebCore::blendFunc):
+
 2010-01-30  Gustavo Noronha Silva  <gns at gnome.org>
 
         Build fixes needed for make distcheck.
diff --git a/WebCore/page/animation/AnimationBase.cpp b/WebCore/page/animation/AnimationBase.cpp
index 135365c..2a2ab4b 100644
--- a/WebCore/page/animation/AnimationBase.cpp
+++ b/WebCore/page/animation/AnimationBase.cpp
@@ -92,10 +92,17 @@ static inline Color blendFunc(const AnimationBase* anim, const Color& from, cons
     if (progress == 1 && !to.isValid())
         return Color();
 
-    return Color(blendFunc(anim, from.red(), to.red(), progress),
-                 blendFunc(anim, from.green(), to.green(), progress),
-                 blendFunc(anim, from.blue(), to.blue(), progress),
-                 blendFunc(anim, from.alpha(), to.alpha(), progress));
+    // Contrary to the name, RGBA32 actually stores ARGB, so we can initialize Color directly from premultipliedARGBFromColor().
+    // Also, premultipliedARGBFromColor() bails on zero alpha, so special-case that.
+    Color premultFrom = from.alpha() ? premultipliedARGBFromColor(from) : 0;
+    Color premultTo = to.alpha() ? premultipliedARGBFromColor(to) : 0;
+
+    Color premultBlended(blendFunc(anim, premultFrom.red(), premultTo.red(), progress),
+                 blendFunc(anim, premultFrom.green(), premultTo.green(), progress),
+                 blendFunc(anim, premultFrom.blue(), premultTo.blue(), progress),
+                 blendFunc(anim, premultFrom.alpha(), premultTo.alpha(), progress));
+
+    return Color(colorFromPremultipliedARGB(premultBlended.rgb()));
 }
 
 static inline Length blendFunc(const AnimationBase*, const Length& from, const Length& to, double progress)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list