Title: [111935] releases/WebKitGTK/webkit-1.8

Diff

Modified: releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog (111934 => 111935)


--- releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog	2012-03-24 00:22:42 UTC (rev 111934)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/ChangeLog	2012-03-24 00:23:05 UTC (rev 111935)
@@ -1,3 +1,13 @@
+2012-03-23  Nikolas Zimmermann  <[email protected]>
+
+        REGRESSION: unbalanced transparency layers for clipPath
+        https://bugs.webkit.org/show_bug.cgi?id=78074
+
+        Reviewed by Zoltan Herczeg.
+
+        * svg/clip-path/opacity-assertion-expected.svg: Added.
+        * svg/clip-path/opacity-assertion.svg: Added.
+
 2012-03-23  Ryosuke Niwa  <[email protected]>
 
         Assertion failure in TextIterator::handleTextBox

Added: releases/WebKitGTK/webkit-1.8/LayoutTests/svg/clip-path/opacity-assertion-expected.svg (0 => 111935)


--- releases/WebKitGTK/webkit-1.8/LayoutTests/svg/clip-path/opacity-assertion-expected.svg	                        (rev 0)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/svg/clip-path/opacity-assertion-expected.svg	2012-03-24 00:23:05 UTC (rev 111935)
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<rect width="100" height="100" fill="green"/>
+</svg>

Added: releases/WebKitGTK/webkit-1.8/LayoutTests/svg/clip-path/opacity-assertion.svg (0 => 111935)


--- releases/WebKitGTK/webkit-1.8/LayoutTests/svg/clip-path/opacity-assertion.svg	                        (rev 0)
+++ releases/WebKitGTK/webkit-1.8/LayoutTests/svg/clip-path/opacity-assertion.svg	2012-03-24 00:23:05 UTC (rev 111935)
@@ -0,0 +1,13 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+<defs>
+    <clipPath id="clip">
+        <rect width="100" height="100" opacity=".4"/>
+        <rect/> <!-- trigger render-to-image-buffer mode -->
+    </clipPath>
+</defs>
+
+<!-- Should result in a 100x100 green square -->
+<rect width="200" height="200" fill="red" clip-path="url(#clip)"/>
+<rect width="100" height="100" fill="green"/>
+
+</svg>

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog (111934 => 111935)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog	2012-03-24 00:22:42 UTC (rev 111934)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/ChangeLog	2012-03-24 00:23:05 UTC (rev 111935)
@@ -1,3 +1,24 @@
+2012-03-23  Nikolas Zimmermann  <[email protected]>
+
+        REGRESSION: unbalanced transparency layers for clipPath
+        https://bugs.webkit.org/show_bug.cgi?id=78074
+
+        Reviewed by Zoltan Herczeg.
+
+        If we're rendering to a mask image buffer, all children are rendered with opacity=1, regardless what their RenderStyles specify.
+        SVGRenderSupport::finishRenderSVGContent() did not take this into account and always called endTransparencyLayer(). Fix that
+        by checking if we're rendering to a mask image buffer, if so don't call endTransparencyLayer().
+
+        Add new reftest covering both the visual & logical correctness (no assertion).
+
+        Tests: svg/clip-path/opacity-assertion-expected.svg
+               svg/clip-path/opacity-assertion.svg
+
+        * rendering/svg/SVGRenderSupport.cpp:
+        (WebCore::isRenderingMaskImage): Extraced as sharable helper function.
+        (WebCore::SVGRenderSupport::prepareToRenderSVGContent): Factor out isRenderingMaskImage() function.
+        (WebCore::SVGRenderSupport::finishRenderSVGContent): Only call endTransparencyLayer(), if we actually called beginTL() first. 
+
 2012-03-23  Ryosuke Niwa  <[email protected]>
 
         Assertion failure in TextIterator::handleTextBox

Modified: releases/WebKitGTK/webkit-1.8/Source/WebCore/rendering/svg/SVGRenderSupport.cpp (111934 => 111935)


--- releases/WebKitGTK/webkit-1.8/Source/WebCore/rendering/svg/SVGRenderSupport.cpp	2012-03-24 00:22:42 UTC (rev 111934)
+++ releases/WebKitGTK/webkit-1.8/Source/WebCore/rendering/svg/SVGRenderSupport.cpp	2012-03-24 00:23:05 UTC (rev 111935)
@@ -79,6 +79,13 @@
     object->parent()->mapLocalToContainer(repaintContainer, false, true, transformState, wasFixed);
 }
 
+static inline bool isRenderingMaskImage(RenderObject* object)
+{
+    if (object->frame() && object->frame()->view())
+        return object->frame()->view()->paintBehavior() & PaintBehaviorRenderingSVGMask;
+    return false;
+}
+
 bool SVGRenderSupport::prepareToRenderSVGContent(RenderObject* object, PaintInfo& paintInfo)
 {
     ASSERT(object);
@@ -89,11 +96,8 @@
     const SVGRenderStyle* svgStyle = style->svgStyle();
     ASSERT(svgStyle);
 
-    bool isRenderingMask = false;
-    if (object->frame() && object->frame()->view())
-        isRenderingMask = object->frame()->view()->paintBehavior() & PaintBehaviorRenderingSVGMask;
-
     // Setup transparency layers before setting up SVG resources!
+    bool isRenderingMask = isRenderingMaskImage(object);
     float opacity = isRenderingMask ? 1 : style->opacity();
     const ShadowData* shadow = svgStyle->shadow();
     if (opacity < 1 || shadow) {
@@ -168,7 +172,7 @@
     }
 #endif
 
-    if (style->opacity() < 1)
+    if (style->opacity() < 1 && !isRenderingMaskImage(object))
         paintInfo.context->endTransparencyLayer();
 
     if (svgStyle->shadow())
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to