Title: [168674] trunk
Revision
168674
Author
[email protected]
Date
2014-05-12 23:04:58 -0700 (Mon, 12 May 2014)

Log Message

SVG root element accepts background color but fails to repaint it
https://bugs.webkit.org/show_bug.cgi?id=63153

Reviewed by Dean Jackson.

Source/WebCore:
This is back ported from Blink. Don't know the exact commit though.
The patch checks if the SVGSVGElement is an outermost root element.
If it is, mark the whole element for repaint.

Test: svg/custom/svg-root-background.html

* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::calculateHasBoxDecorations):
(WebCore::RenderBoxModelObject::updateFromStyle):
* rendering/RenderBoxModelObject.h:
* rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::RenderSVGRoot):
(WebCore::RenderSVGRoot::layout):
(WebCore::RenderSVGRoot::paintReplaced):
(WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
    This is a simple optimization by taking the necessary parts
    from RenderReplaced and SVGRenderSupport.
* rendering/svg/RenderSVGRoot.h:

LayoutTests:
Check that background color updates if the size of an outermost
root SVG element changes.

* svg/custom/svg-root-background-expected.png: Added.
* svg/custom/svg-root-background-expected.txt: Added.
* svg/custom/svg-root-background.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (168673 => 168674)


--- trunk/LayoutTests/ChangeLog	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/ChangeLog	2014-05-13 06:04:58 UTC (rev 168674)
@@ -1,3 +1,17 @@
+2014-05-12  Dirk Schulze  <[email protected]>
+
+        SVG root element accepts background color but fails to repaint it
+        https://bugs.webkit.org/show_bug.cgi?id=63153
+
+        Reviewed by Dean Jackson.
+
+        Check that background color updates if the size of an outermost
+        root SVG element changes.
+
+        * svg/custom/svg-root-background-expected.png: Added.
+        * svg/custom/svg-root-background-expected.txt: Added.
+        * svg/custom/svg-root-background.html: Added.
+
 2014-05-12  Jeffrey Pfau  <[email protected]>
 
         Unreviewed, fix mismatched test expectation.

Modified: trunk/LayoutTests/platform/mac/http/tests/misc/slow-loading-image-in-pattern-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/http/tests/misc/slow-loading-image-in-pattern-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/http/tests/misc/slow-loading-image-in-pattern-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -14,5 +14,5 @@
   RenderSVGRoot {svg} at (10,50) size 406x306
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGResourcePattern {pattern} [id="pattern"] [patternUnits=userSpaceOnUse] [patternContentUnits=userSpaceOnUse]
-        RenderSVGImage {image} at (13,53) size 403x303
-    RenderSVGRect {rect} at (13,53) size 400x300 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=0.00] [width=400.00] [height=300.00]
+        RenderSVGImage {image} at (10,50) size 406x306
+    RenderSVGRect {rect} at (10,50) size 406x306 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=0.00] [width=400.00] [height=300.00]

Added: trunk/LayoutTests/platform/mac/svg/animations/animate-viewport-overflow-2-expected.png


(Binary files differ)
Property changes on: trunk/LayoutTests/platform/mac/svg/animations/animate-viewport-overflow-2-expected.png ___________________________________________________________________

Added: svn:mime-type

Added: trunk/LayoutTests/platform/mac/svg/animations/animate-viewport-overflow-expected.png


(Binary files differ)
Property changes on: trunk/LayoutTests/platform/mac/svg/animations/animate-viewport-overflow-expected.png ___________________________________________________________________

Added: svn:mime-type

Modified: trunk/LayoutTests/platform/mac/svg/custom/circle-move-invalidation-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/custom/circle-move-invalidation-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/custom/circle-move-invalidation-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -4,8 +4,8 @@
   RenderBlock {html} at (0,0) size 800x356
     RenderBody {body} at (8,8) size 784x340
       RenderBlock (anonymous) at (0,0) size 784x306
-        RenderSVGRoot {svg} at (195,195) size 78x78
-          RenderSVGEllipse {circle} at (196,196) size 76x76 [fill={[type=SOLID] [color=#FF0000]}] [cx=300.00] [cy=300.00] [r=50.00]
+        RenderSVGRoot {svg} at (8,8) size 302x306
+          RenderSVGEllipse {circle} at (8,8) size 302x306 [fill={[type=SOLID] [color=#FF0000]}] [cx=300.00] [cy=300.00] [r=50.00]
         RenderText {#text} at (302,288) size 4x18
           text run at (302,288) width 4: " "
         RenderBR {br} at (306,288) size 0x18

Modified: trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-container-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-container-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-container-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -3,9 +3,9 @@
 layer at (0,0) size 800x410
   RenderBlock {html} at (0,0) size 800x410
     RenderBody {body} at (0,0) size 800x410
-      RenderSVGRoot {svg} at (45,33) size 361x373
-        RenderSVGContainer {g} at (303,303) size 100x100
-          RenderSVGEllipse {circle} at (303,303) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=350.00] [cy=350.00] [r=50.00]
+      RenderSVGRoot {svg} at (0,0) size 406x410
+        RenderSVGContainer {g} at (0,0) size 406x410
+          RenderSVGEllipse {circle} at (0,0) size 406x410 [fill={[type=SOLID] [color=#008000]}] [cx=350.00] [cy=350.00] [r=50.00]
         RenderSVGText {text} at (48,36) size 304x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,0) size 303x18
             chunk 1 (middle anchor) text run 1 at (48.50,50.00) startOffset 0 endOffset 49 width 303.00: "The circle should stay in the bottom-right corner"

Modified: trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-container-standalone-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-container-standalone-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-container-standalone-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -1,9 +1,9 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 406x406
-  RenderSVGRoot {svg} at (45,33) size 361x373
-    RenderSVGContainer {g} at (303,303) size 100x100
-      RenderSVGEllipse {circle} at (303,303) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=350.00] [cy=350.00] [r=50.00]
+  RenderSVGRoot {svg} at (0,0) size 406x406
+    RenderSVGContainer {g} at (0,0) size 406x406
+      RenderSVGEllipse {circle} at (0,0) size 406x406 [fill={[type=SOLID] [color=#008000]}] [cx=350.00] [cy=350.00] [r=50.00]
     RenderSVGText {text} at (48,36) size 304x18 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,0) size 303x18
         chunk 1 (middle anchor) text run 1 at (48.50,50.00) startOffset 0 endOffset 49 width 303.00: "The circle should stay in the bottom-right corner"

Modified: trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-root-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-root-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-root-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -3,8 +3,8 @@
 layer at (0,0) size 800x410
   RenderBlock {html} at (0,0) size 800x410
     RenderBody {body} at (0,0) size 800x410
-      RenderSVGRoot {svg} at (90,33) size 226x223
-        RenderSVGEllipse {circle} at (150,150) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=197.00] [cy=197.00] [r=50.00]
+      RenderSVGRoot {svg} at (0,0) size 406x410
+        RenderSVGEllipse {circle} at (0,0) size 406x410 [fill={[type=SOLID] [color=#008000]}] [cx=197.00] [cy=197.00] [r=50.00]
         RenderSVGText {text} at (93,36) size 214x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,0) size 214x18
             chunk 1 (middle anchor) text run 1 at (93.00,50.00) startOffset 0 endOffset 34 width 214.00: "The circle should be in the middle"

Modified: trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-root-standalone-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-root-standalone-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/custom/mouse-move-on-svg-root-standalone-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -1,8 +1,8 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 406x406
-  RenderSVGRoot {svg} at (90,33) size 226x223
-    RenderSVGEllipse {circle} at (150,150) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=197.00] [cy=197.00] [r=50.00]
+  RenderSVGRoot {svg} at (0,0) size 406x406
+    RenderSVGEllipse {circle} at (0,0) size 406x406 [fill={[type=SOLID] [color=#008000]}] [cx=197.00] [cy=197.00] [r=50.00]
     RenderSVGText {text} at (93,36) size 214x18 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,0) size 214x18
         chunk 1 (middle anchor) text run 1 at (93.00,50.00) startOffset 0 endOffset 34 width 214.00: "The circle should be in the middle"

Modified: trunk/LayoutTests/platform/mac/svg/custom/pattern-userSpaceOnUse-userToBaseTransform-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/custom/pattern-userSpaceOnUse-userToBaseTransform-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/custom/pattern-userSpaceOnUse-userToBaseTransform-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -7,36 +7,36 @@
         text run at (0,0) width 762: "There should be no red displayed on the screen, and the patterns should not change when the browser window is resized."
       RenderBR {br} at (762,0) size 0x18
       RenderBR {br} at (0,18) size 0x18
-      RenderSVGRoot {svg} at (8,44) size 202x203
-        RenderSVGContainer {g} at (9,45) size 200x200
-          RenderSVGRect {rect} at (9,145) size 100x50 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=100.00] [width=100.00] [height=50.00]
-          RenderSVGRect {rect} at (109,45) size 100x50 [fill={[type=SOLID] [color=#FF0000]}] [x=100.00] [y=0.00] [width=100.00] [height=50.00]
-          RenderSVGRect {rect} at (9,145) size 100x100 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=100.00] [width=100.00] [height=100.00]
-          RenderSVGRect {rect} at (109,45) size 100x100 [fill={[type=PATTERN] [id="pattern"]}] [x=100.00] [y=0.00] [width=100.00] [height=100.00]
+      RenderSVGRoot {svg} at (8,44) size 202x306
+        RenderSVGContainer {g} at (8,44) size 202x306
+          RenderSVGRect {rect} at (8,44) size 202x306 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=100.00] [width=100.00] [height=50.00]
+          RenderSVGRect {rect} at (8,44) size 202x306 [fill={[type=SOLID] [color=#FF0000]}] [x=100.00] [y=0.00] [width=100.00] [height=50.00]
+          RenderSVGRect {rect} at (8,44) size 202x306 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=100.00] [width=100.00] [height=100.00]
+          RenderSVGRect {rect} at (8,44) size 202x306 [fill={[type=PATTERN] [id="pattern"]}] [x=100.00] [y=0.00] [width=100.00] [height=100.00]
       RenderText {#text} at (202,324) size 4x18
         text run at (202,324) width 4: " "
-      RenderSVGRoot {svg} at (214,44) size 202x287
+      RenderSVGRoot {svg} at (214,44) size 202x306
         RenderSVGText {text} at (5,266) size 81x18 contains 1 chunk(s)
           RenderSVGInlineText {#text} at (0,0) size 81x18
             chunk 1 text run 1 at (5.00,280.00) startOffset 0 endOffset 11 width 81.00: "+Transforms"
-        RenderSVGContainer {g} at (215,145) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
-          RenderSVGRect {rect} at (215,145) size 100x50 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=50.00]
-          RenderSVGRect {rect} at (215,145) size 100x100 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
-        RenderSVGContainer {g} at (315,45) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
-          RenderSVGRect {rect} at (315,45) size 100x50 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=50.00]
-          RenderSVGRect {rect} at (315,45) size 100x100 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+        RenderSVGContainer {g} at (214,44) size 202x306 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,100.00)}]
+          RenderSVGRect {rect} at (214,44) size 202x306 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=50.00]
+          RenderSVGRect {rect} at (214,44) size 202x306 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+        RenderSVGContainer {g} at (214,44) size 202x306 [transform={m=((1.00,0.00)(0.00,1.00)) t=(100.00,0.00)}]
+          RenderSVGRect {rect} at (214,44) size 202x306 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=50.00]
+          RenderSVGRect {rect} at (214,44) size 202x306 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
         RenderSVGHiddenContainer {defs} at (0,0) size 0x0
           RenderSVGResourcePattern {pattern} [id="pattern"] [patternUnits=userSpaceOnUse] [patternContentUnits=userSpaceOnUse]
-            RenderSVGRect {rect} at (215,45) size 100x25 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=25.00]
-            RenderSVGRect {rect} at (215,70) size 100x25 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=25.00] [width=100.00] [height=25.00]
+            RenderSVGRect {rect} at (214,44) size 202x306 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=25.00]
+            RenderSVGRect {rect} at (214,44) size 202x306 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=25.00] [width=100.00] [height=25.00]
       RenderText {#text} at (408,324) size 4x18
         text run at (408,324) width 4: " "
       RenderText {#text} at (0,0) size 0x0
 layer at (420,44) size 202x302
-  RenderSVGRoot {svg} at (420,44) size 202x287
+  RenderSVGRoot {svg} at (420,44) size 202x306
     RenderSVGText {text} at (5,266) size 169x18 contains 1 chunk(s)
       RenderSVGInlineText {#text} at (0,0) size 169x18
         chunk 1 text run 1 at (5.00,280.00) startOffset 0 endOffset 24 width 169.00: "+Accelerated Compositing"
-    RenderSVGContainer {g} at (421,45) size 200x200
-      RenderSVGRect {rect} at (421,145) size 100x100 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=100.00] [width=100.00] [height=100.00]
-      RenderSVGRect {rect} at (521,45) size 100x100 [fill={[type=PATTERN] [id="pattern"]}] [x=100.00] [y=0.00] [width=100.00] [height=100.00]
+    RenderSVGContainer {g} at (420,44) size 202x306
+      RenderSVGRect {rect} at (420,44) size 202x306 [fill={[type=PATTERN] [id="pattern"]}] [x=0.00] [y=100.00] [width=100.00] [height=100.00]
+      RenderSVGRect {rect} at (420,44) size 202x306 [fill={[type=PATTERN] [id="pattern"]}] [x=100.00] [y=0.00] [width=100.00] [height=100.00]

Modified: trunk/LayoutTests/platform/mac/svg/custom/svg-float-border-padding-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/custom/svg-float-border-padding-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/custom/svg-float-border-padding-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -11,7 +11,7 @@
         RenderText {#text} at (0,0) size 354x18
           text run at (0,0) width 354: "There should be a red, white and blue pattern below this"
       RenderSVGRoot {svg} at (18,86) size 140x140
-        RenderSVGRect {rect} at (38,106) size 100x100 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+        RenderSVGRect {rect} at (18,86) size 140x140 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
       RenderBlock {p} at (0,228) size 784x18
         RenderText {#text} at (0,0) size 353x18
           text run at (0,0) width 353: "There should be a red, white and blue pattern above this"

Modified: trunk/LayoutTests/platform/mac/svg/hixie/mixed/010-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/hixie/mixed/010-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/hixie/mixed/010-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -7,7 +7,7 @@
         RenderText {#text} at (0,0) size 238x18
           text run at (0,0) width 238: "There should be a green block below."
       RenderBlock (anonymous) at (0,34) size 784x104
-        RenderSVGRoot {svg} at (8,50) size 300x100
-          RenderSVGRect {rect} at (8,50) size 300x100 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=300.00] [height=100.00]
-          RenderSVGRect {rect} at (8,50) size 300x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=300.00] [height=100.00]
+        RenderSVGRoot {svg} at (8,50) size 300x104
+          RenderSVGRect {rect} at (8,50) size 300x104 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=300.00] [height=100.00]
+          RenderSVGRect {rect} at (8,50) size 300x104 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=300.00] [height=100.00]
         RenderText {#text} at (0,0) size 0x0

Modified: trunk/LayoutTests/platform/mac/svg/text/small-fonts-in-html5-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/text/small-fonts-in-html5-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/text/small-fonts-in-html5-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -7,8 +7,8 @@
         RenderText {#text} at (0,0) size 471x37
           text run at (0,0) width 471: "Small fonts in HTML5/inline SVG"
       RenderBlock (anonymous) at (0,58) size 784x507
-        RenderSVGRoot {svg} at (157,259) size 104x31
-          RenderSVGContainer {g} at (159,261) size 100x27 [transform={m=((400.00,0.00)(0.00,400.00)) t=(0.00,0.00)}]
+        RenderSVGRoot {svg} at (8,79) size 502x507
+          RenderSVGContainer {g} at (8,79) size 502x507 [transform={m=((400.00,0.00)(0.00,400.00)) t=(0.00,0.00)}]
             RenderSVGText {text} at (0,0) size 1x1 contains 1 chunk(s)
               RenderSVGInlineText {#text} at (0,0) size 1x1
                 chunk 1 (middle anchor) text run 1 at (0.38,0.50) startOffset 0 endOffset 12 width 0.25: "Test passed."

Modified: trunk/LayoutTests/platform/mac/svg/zoom/text/zoom-svg-float-border-padding-expected.txt (168673 => 168674)


--- trunk/LayoutTests/platform/mac/svg/zoom/text/zoom-svg-float-border-padding-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/platform/mac/svg/zoom/text/zoom-svg-float-border-padding-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -12,7 +12,7 @@
         RenderText {#text} at (0,0) size 524x26
           text run at (0,0) width 524: "There should be a red, white and blue pattern below this"
       RenderSVGRoot {svg} at (18,142) size 140x141
-        RenderSVGRect {rect} at (38,162) size 100x101 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+        RenderSVGRect {rect} at (18,142) size 140x141 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
       RenderBlock {p} at (0,284) size 769x27
         RenderText {#text} at (0,0) size 523x26
           text run at (0,0) width 523: "There should be a red, white and blue pattern above this"

Modified: trunk/LayoutTests/svg/animations/animate-viewport-overflow-2-expected.txt (168673 => 168674)


--- trunk/LayoutTests/svg/animations/animate-viewport-overflow-2-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/svg/animations/animate-viewport-overflow-2-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -5,6 +5,6 @@
   RenderBlock {HTML} at (0,0) size 800x116
     RenderBody {BODY} at (8,8) size 784x100
       RenderBlock {DIV} at (0,0) size 100x100
-        RenderSVGRoot {svg} at (8,208) size 100x100
-          RenderSVGRect {rect} at (8,208) size 100x100 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=200.00] [width=100.00] [height=100.00]
+        RenderSVGRoot {svg} at (8,8) size 100x300
+          RenderSVGRect {rect} at (8,8) size 100x300 [fill={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=200.00] [width=100.00] [height=100.00]
         RenderText {#text} at (0,0) size 0x0

Modified: trunk/LayoutTests/svg/animations/animate-viewport-overflow-expected.txt (168673 => 168674)


--- trunk/LayoutTests/svg/animations/animate-viewport-overflow-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/svg/animations/animate-viewport-overflow-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -5,7 +5,7 @@
   RenderBlock {HTML} at (0,0) size 800x216
     RenderBody {BODY} at (8,8) size 784x200
       RenderBlock {DIV} at (0,0) size 100x100
-        RenderSVGRoot {svg} at (8,208) size 100x100
-          RenderSVGRect {rect} at (8,208) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=200.00] [width=100.00] [height=100.00]
+        RenderSVGRoot {svg} at (8,8) size 100x300
+          RenderSVGRect {rect} at (8,8) size 100x300 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=200.00] [width=100.00] [height=100.00]
         RenderText {#text} at (0,0) size 0x0
       RenderBlock {DIV} at (0,100) size 100x100

Modified: trunk/LayoutTests/svg/custom/gradient-stroke-width-expected.txt (168673 => 168674)


--- trunk/LayoutTests/svg/custom/gradient-stroke-width-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/svg/custom/gradient-stroke-width-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -1,7 +1,7 @@
 layer at (0,0) size 800x600
   RenderView at (0,0) size 800x600
 layer at (0,0) size 200x500
-  RenderSVGRoot {svg} at (32,32) size 123x123
+  RenderSVGRoot {svg} at (0,0) size 200x500
     RenderSVGHiddenContainer {defs} at (0,0) size 0x0
       RenderSVGResourceLinearGradient {linearGradient} [id="black2white"] [gradientUnits=objectBoundingBox] [start=(0,0)] [end=(1,0)]
         RenderSVGGradientStop {stop} [offset=0.00] [color=#000000]
@@ -11,5 +11,5 @@
         RenderSVGGradientStop {stop} [offset=1.00] [color=#BD1F1845]
       RenderSVGResourceRadialGradient {radialGradient} [id="red-radial-grad"] [gradientUnits=objectBoundingBox] [center=(0.50,0.50)] [focal=(0.50,0.50)] [radius=0.50] [focalRadius=0.00]
       RenderSVGResourceLinearGradient {linearGradient} [id="border-grad"] [gradientUnits=objectBoundingBox] [start=(0.05,0.95)] [end=(0.95,0.05)]
-    RenderSVGEllipse {circle} at (45,45) size 110x110 [stroke={[type=LINEAR-GRADIENT] [id="border-grad"] [stroke width=10.00]}] [fill={[type=RADIAL-GRADIENT] [id="red-radial-grad"]}] [cx=100.00] [cy=100.00] [r=50.00]
-    RenderSVGEllipse {circle} at (32,32) size 30x30 [stroke={[type=LINEAR-GRADIENT] [id="border-grad"] [stroke width=10.00]}] [fill={[type=RADIAL-GRADIENT] [id="red-radial-grad"]}] [cx=47.00] [cy=47.00] [r=10.00]
+    RenderSVGEllipse {circle} at (0,0) size 200x500 [stroke={[type=LINEAR-GRADIENT] [id="border-grad"] [stroke width=10.00]}] [fill={[type=RADIAL-GRADIENT] [id="red-radial-grad"]}] [cx=100.00] [cy=100.00] [r=50.00]
+    RenderSVGEllipse {circle} at (0,0) size 200x500 [stroke={[type=LINEAR-GRADIENT] [id="border-grad"] [stroke width=10.00]}] [fill={[type=RADIAL-GRADIENT] [id="red-radial-grad"]}] [cx=47.00] [cy=47.00] [r=10.00]

Modified: trunk/LayoutTests/svg/custom/repaint-moving-svg-and-div-expected.txt (168673 => 168674)


--- trunk/LayoutTests/svg/custom/repaint-moving-svg-and-div-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/svg/custom/repaint-moving-svg-and-div-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -5,7 +5,7 @@
     RenderBody {body} at (8,8) size 784x0
 layer at (250,350) size 150x150
   RenderSVGRoot {svg} at (250,350) size 150x150
-    RenderSVGRect {rect} at (275,375) size 100x100 [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+    RenderSVGRect {rect} at (250,350) size 150x150 [fill={[type=SOLID] [color=#00FF00]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
 layer at (550,350) size 150x150
   RenderBlock (positioned) {div} at (550,350) size 150x150 [border: (5px solid #FF0000) (20px solid #FFFF00) (10px solid #008000) (15px solid #0000FF)]
     RenderBlock {div} at (25,25) size 100x100 [bgcolor=#00FF00]

Added: trunk/LayoutTests/svg/custom/svg-root-background-expected.png


(Binary files differ)
Property changes on: trunk/LayoutTests/svg/custom/svg-root-background-expected.png ___________________________________________________________________

Added: svn:mime-type

Added: trunk/LayoutTests/svg/custom/svg-root-background-expected.txt (0 => 168674)


--- trunk/LayoutTests/svg/custom/svg-root-background-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/svg-root-background-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -0,0 +1,7 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+layer at (8,8) size 200x200
+  RenderSVGRoot {svg} at (8,8) size 200x200

Added: trunk/LayoutTests/svg/custom/svg-root-background.html (0 => 168674)


--- trunk/LayoutTests/svg/custom/svg-root-background.html	                        (rev 0)
+++ trunk/LayoutTests/svg/custom/svg-root-background.html	2014-05-13 06:04:58 UTC (rev 168674)
@@ -0,0 +1,22 @@
+<html>
+<head>
+<script>
+    if (window.testRunner)
+        testRunner.waitUntilDone();
+
+    function runTest() {
+        // This tests that changing the size of the outermost SVG updates the background of the SVG.
+        document.getElementById('svg').setAttribute('height','200');
+
+        if (window.testRunner)
+            testRunner.notifyDone();
+    }
+
+    window.addEventListener('load', function() {
+        setTimeout(runTest, 0);
+    }, false);
+</script>
+<body>
+<svg width="200" height="0" style="background-color: green; position: absolute;" id="svg"></svg>
+</body>
+</html>
\ No newline at end of file

Modified: trunk/LayoutTests/svg/custom/viewport-update2-expected.txt (168673 => 168674)


--- trunk/LayoutTests/svg/custom/viewport-update2-expected.txt	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/LayoutTests/svg/custom/viewport-update2-expected.txt	2014-05-13 06:04:58 UTC (rev 168674)
@@ -3,4 +3,4 @@
 layer at (0,0) size 110x110
   RenderSVGRoot {svg} at (0,0) size 110x110
     RenderSVGRect {rect} at (0,0) size 110x110 [fill={[type=SOLID] [color=#FF0000]}] [x=-100.00] [y=-100.00] [width=300.00] [height=300.00]
-    RenderSVGRect {rect} at (5,5) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
+    RenderSVGRect {rect} at (0,0) size 110x110 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]

Modified: trunk/Source/WebCore/ChangeLog (168673 => 168674)


--- trunk/Source/WebCore/ChangeLog	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/Source/WebCore/ChangeLog	2014-05-13 06:04:58 UTC (rev 168674)
@@ -1,3 +1,29 @@
+2014-05-12  Dirk Schulze  <[email protected]>
+
+        SVG root element accepts background color but fails to repaint it
+        https://bugs.webkit.org/show_bug.cgi?id=63153
+
+        Reviewed by Dean Jackson.
+
+        This is back ported from Blink. Don't know the exact commit though.
+        The patch checks if the SVGSVGElement is an outermost root element.
+        If it is, mark the whole element for repaint.
+
+        Test: svg/custom/svg-root-background.html
+
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::calculateHasBoxDecorations):
+        (WebCore::RenderBoxModelObject::updateFromStyle):
+        * rendering/RenderBoxModelObject.h:
+        * rendering/svg/RenderSVGRoot.cpp:
+        (WebCore::RenderSVGRoot::RenderSVGRoot):
+        (WebCore::RenderSVGRoot::layout):
+        (WebCore::RenderSVGRoot::paintReplaced):
+        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
+            This is a simple optimization by taking the necessary parts
+            from RenderReplaced and SVGRenderSupport.
+        * rendering/svg/RenderSVGRoot.h:
+
 2014-05-12  Simon Fraser  <[email protected]>
 
         [iOS] Fixed items are sometimes clipped after rubber-banding

Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (168673 => 168674)


--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2014-05-13 06:04:58 UTC (rev 168674)
@@ -190,6 +190,11 @@
     RenderLayerModelObject::willBeDestroyed();
 }
 
+bool RenderBoxModelObject::hasBoxDecorationStyle() const
+{
+    return hasBackground() || style().hasBorder() || style().hasAppearance() || style().boxShadow();
+}
+
 void RenderBoxModelObject::updateFromStyle()
 {
     RenderLayerModelObject::updateFromStyle();
@@ -197,7 +202,7 @@
     // Set the appropriate bits for a box model object.  Since all bits are cleared in styleWillChange,
     // we only check for bits that could possibly be set to true.
     const RenderStyle& styleToUse = style();
-    setHasBoxDecorations(hasBackground() || styleToUse.hasBorder() || styleToUse.hasAppearance() || styleToUse.boxShadow());
+    setHasBoxDecorations(hasBoxDecorationStyle());
     setInline(styleToUse.isDisplayInlineType());
     setPositionState(styleToUse.position());
     setHorizontalWritingMode(styleToUse.isHorizontalWritingMode());

Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (168673 => 168674)


--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h	2014-05-13 06:04:58 UTC (rev 168674)
@@ -250,6 +250,7 @@
 
     LayoutPoint adjustedPositionRelativeToOffsetParent(const LayoutPoint&) const;
 
+    bool hasBoxDecorationStyle() const;
     void calculateBackgroundImageGeometry(const RenderLayerModelObject* paintContainer, const FillLayer*, const LayoutRect& paintRect, BackgroundImageGeometry&, RenderElement* = 0) const;
     bool borderObscuresBackgroundEdge(const FloatSize& contextScale) const;
     bool borderObscuresBackground() const;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (168673 => 168674)


--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2014-05-13 06:04:58 UTC (rev 168674)
@@ -32,6 +32,7 @@
 #include "LayoutRepainter.h"
 #include "Page.h"
 #include "RenderIterator.h"
+#include "RenderLayer.h"
 #include "RenderNamedFlowFragment.h"
 #include "RenderSVGResource.h"
 #include "RenderSVGResourceContainer.h"
@@ -58,6 +59,7 @@
     , m_isLayoutSizeChanged(false)
     , m_needsBoundariesOrTransformUpdate(true)
     , m_hasSVGShadow(false)
+    , m_hasBoxDecorations(false)
 {
 }
 
@@ -203,6 +205,8 @@
     }
 
     updateLayerTransform();
+    m_hasBoxDecorations = isRoot() ? hasBoxDecorationStyle() : hasBoxDecorations();
+    invalidateBackgroundObscurationStatus();
 
     repainter.repaintAfterLayout();
 
@@ -358,6 +362,13 @@
     if (shouldApplyViewportClip())
         repaintRect.intersect(pixelSnappedBorderBoxRect());
 
+    if (m_hasBoxDecorations || hasRenderOverflow()) {
+        // The selectionRect can project outside of the overflowRect, so take their union
+        // for repainting to avoid selection painting glitches.
+        LayoutRect decoratedRepaintRect = unionRect(localSelectionRect(false), visualOverflowRect());
+        repaintRect.unite(decoratedRepaintRect);
+    }
+
     LayoutRect rect = enclosingIntRect(repaintRect);
     RenderReplaced::computeRectForRepaint(repaintContainer, rect, fixed);
     repaintRect = rect;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h (168673 => 168674)


--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h	2014-05-13 05:00:21 UTC (rev 168673)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h	2014-05-13 06:04:58 UTC (rev 168674)
@@ -119,6 +119,7 @@
     bool m_isLayoutSizeChanged : 1;
     bool m_needsBoundariesOrTransformUpdate : 1;
     bool m_hasSVGShadow : 1;
+    bool m_hasBoxDecorations : 1;
 };
 
 RENDER_OBJECT_TYPE_CASTS(RenderSVGRoot, isSVGRoot())
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to