<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[168645] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/168645">168645</a></dd>
<dt>Author</dt> <dd>krit@webkit.org</dd>
<dt>Date</dt> <dd>2014-05-12 14:18:24 -0700 (Mon, 12 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>SVG outline property is broken and inefficient
https://bugs.webkit.org/show_bug.cgi?id=113666

Reviewed by Dean Jackson.


Source/WebCore:
&quot;[SVG2] css 'outline' property should apply to svg elements

The 'outline' property was only partially working in SVG before
this patch, this makes it work on text and text content child
elements too.

This makes SVG render the outlines as part of the foreground paint
phase.

Partly based on Florin Malita's webkit patch https://bugs.webkit.org/show_bug.cgi?id=113666#c12.&quot;

Tests: svg/custom/outline-stacking-expected.svg
       svg/custom/outline-stacking.svg
       svg/custom/rgba-color-outline.svg
       svg/text/text-outline-expected.svg
       svg/text/text-outline-rgba.html
       svg/text/text-outline.html
       svg/text/textpath-outline-expected.svg
       svg/text/textpath-outline.svg
       svg/text/tspan-multiple-outline.svg
       svg/text/tspan-outline-2-expected.svg
       svg/text/tspan-outline-2.svg
       svg/text/tspan-outline-expected.svg
       svg/text/tspan-outline.html

* rendering/svg/RenderSVGContainer.cpp:
(WebCore::RenderSVGContainer::paint): Draw outline in forground
    paint phase.
* rendering/svg/RenderSVGImage.cpp:
(WebCore::RenderSVGImage::paint): Draw outline in forground
    paint phase.
* rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::paintReplaced): Pass paint offset.
* rendering/svg/RenderSVGShape.cpp:
(WebCore::RenderSVGShape::paint): Draw outline in forground
    paint phase.
* rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::paint): Draw outline in forground
    paint phase.
* rendering/svg/SVGInlineFlowBox.cpp:
(WebCore::SVGInlineFlowBox::paint): Pass paint offset.
* rendering/svg/SVGInlineTextBox.cpp:
(WebCore::SVGInlineTextBox::paint): Draw outline in forground
    paint phase.
* rendering/svg/SVGRootInlineBox.cpp:
(WebCore::SVGRootInlineBox::paint): Pass paint offset.

LayoutTests:
Test stacking for outline properties. 'outline' should
not draw above overlapping content anymore.
Test outline drawing for text elements.

* svg/custom/outline-stacking-expected.svg: Added.
* svg/custom/outline-stacking.svg: Added.
* svg/custom/rgba-color-outline-expected.html: Added.
* svg/custom/rgba-color-outline.svg: Added.
* svg/text/text-outline-expected.svg: Added.
* svg/text/text-outline-rgba-expected.html: Added.
* svg/text/text-outline-rgba.html: Added.
* svg/text/text-outline.html: Added.
* svg/text/textpath-outline-expected.svg: Added.
* svg/text/textpath-outline.svg: Added.
* svg/text/tspan-multiple-outline-expected.html: Added.
* svg/text/tspan-multiple-outline.svg: Added.
* svg/text/tspan-outline-2-expected.svg: Added.
* svg/text/tspan-outline-2.svg: Added.
* svg/text/tspan-outline-expected.svg: Added.
* svg/text/tspan-outline.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGContainercpp">trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGImagecpp">trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGRootcpp">trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGShapecpp">trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGTextcpp">trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGInlineFlowBoxcpp">trunk/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGInlineTextBoxcpp">trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGRootInlineBoxcpp">trunk/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestssvgcustomoutlinestackingexpectedsvg">trunk/LayoutTests/svg/custom/outline-stacking-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgcustomoutlinestackingsvg">trunk/LayoutTests/svg/custom/outline-stacking.svg</a></li>
<li><a href="#trunkLayoutTestssvgcustomrgbacoloroutlineexpectedhtml">trunk/LayoutTests/svg/custom/rgba-color-outline-expected.html</a></li>
<li><a href="#trunkLayoutTestssvgcustomrgbacoloroutlinesvg">trunk/LayoutTests/svg/custom/rgba-color-outline.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttextoutlineexpectedsvg">trunk/LayoutTests/svg/text/text-outline-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttextoutlinergbaexpectedhtml">trunk/LayoutTests/svg/text/text-outline-rgba-expected.html</a></li>
<li><a href="#trunkLayoutTestssvgtexttextoutlinergbahtml">trunk/LayoutTests/svg/text/text-outline-rgba.html</a></li>
<li><a href="#trunkLayoutTestssvgtexttextoutlinehtml">trunk/LayoutTests/svg/text/text-outline.html</a></li>
<li><a href="#trunkLayoutTestssvgtexttextpathoutlineexpectedsvg">trunk/LayoutTests/svg/text/textpath-outline-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttextpathoutlinesvg">trunk/LayoutTests/svg/text/textpath-outline.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttspanmultipleoutlineexpectedhtml">trunk/LayoutTests/svg/text/tspan-multiple-outline-expected.html</a></li>
<li><a href="#trunkLayoutTestssvgtexttspanmultipleoutlinesvg">trunk/LayoutTests/svg/text/tspan-multiple-outline.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttspanoutline2expectedsvg">trunk/LayoutTests/svg/text/tspan-outline-2-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttspanoutline2svg">trunk/LayoutTests/svg/text/tspan-outline-2.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttspanoutlineexpectedsvg">trunk/LayoutTests/svg/text/tspan-outline-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgtexttspanoutlinehtml">trunk/LayoutTests/svg/text/tspan-outline.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/LayoutTests/ChangeLog        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -1,3 +1,33 @@
</span><ins>+2014-05-12  Dirk Schulze  &lt;krit@webkit.org&gt;
+
+        SVG outline property is broken and inefficient
+        https://bugs.webkit.org/show_bug.cgi?id=113666
+
+        Reviewed by Dean Jackson.
+
+        Patch by Erik Dahlström backported from Blink.
+
+        Test stacking for outline properties. 'outline' should
+        not draw above overlapping content anymore.
+        Test outline drawing for text elements.
+
+        * svg/custom/outline-stacking-expected.svg: Added.
+        * svg/custom/outline-stacking.svg: Added.
+        * svg/custom/rgba-color-outline-expected.html: Added.
+        * svg/custom/rgba-color-outline.svg: Added.
+        * svg/text/text-outline-expected.svg: Added.
+        * svg/text/text-outline-rgba-expected.html: Added.
+        * svg/text/text-outline-rgba.html: Added.
+        * svg/text/text-outline.html: Added.
+        * svg/text/textpath-outline-expected.svg: Added.
+        * svg/text/textpath-outline.svg: Added.
+        * svg/text/tspan-multiple-outline-expected.html: Added.
+        * svg/text/tspan-multiple-outline.svg: Added.
+        * svg/text/tspan-outline-2-expected.svg: Added.
+        * svg/text/tspan-outline-2.svg: Added.
+        * svg/text/tspan-outline-expected.svg: Added.
+        * svg/text/tspan-outline.html: Added.
+
</ins><span class="cx"> 2014-05-09  Jon Honeycutt  &lt;jhoneycutt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r167818): editing/inserting/typing-space-to-trigger-smart-link.html fails on WebKit1 bots
</span></span></pre></div>
<a id="trunkLayoutTestssvgcustomoutlinestackingexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/custom/outline-stacking-expected.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/custom/outline-stacking-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/custom/outline-stacking-expected.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; standalone=&quot;no&quot;?&gt;
+&lt;svg width=&quot;800&quot; height=&quot;600&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+  &lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;green&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgcustomoutlinestackingsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/custom/outline-stacking.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/custom/outline-stacking.svg                                (rev 0)
+++ trunk/LayoutTests/svg/custom/outline-stacking.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; encoding=&quot;iso-8859-1&quot; standalone=&quot;no&quot;?&gt;
+&lt;!-- Test for https://bugs.webkit.org/show_bug.cgi?id=113666
+     The element foreground and outline should be drawn atomically. --&gt;
+&lt;svg width=&quot;800&quot; height=&quot;600&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+  &lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;1&quot; height=&quot;1&quot; style=&quot;outline: 40px solid red;&quot;/&gt;
+  &lt;rect x=&quot;0&quot; y=&quot;0&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;green&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgcustomrgbacoloroutlineexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/custom/rgba-color-outline-expected.html (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/custom/rgba-color-outline-expected.html                                (rev 0)
+++ trunk/LayoutTests/svg/custom/rgba-color-outline-expected.html        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;style&gt;
+* { padding: 0; margin: 0; }
+div { position: absolute; 
+        top: 50px; 
+        left: 50px; 
+        width:1px; 
+        height:1px; 
+        background: rgba(0,0,255,0.5);
+        outline: 50px solid rgba(0,0,255,0.5); }
+ }
+&lt;/style&gt;
+&lt;div&gt;&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgcustomrgbacoloroutlinesvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/custom/rgba-color-outline.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/custom/rgba-color-outline.svg                                (rev 0)
+++ trunk/LayoutTests/svg/custom/rgba-color-outline.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;200&quot; height=&quot;200&quot;&gt;
+&lt;style&gt;
+rect { outline: 50px solid rgba(0,0,255,0.5); }
+&lt;/style&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;1&quot; height=&quot;1&quot; fill=&quot;rgba(0,0,255,0.5)&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttextoutlineexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/text-outline-expected.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/text-outline-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/text/text-outline-expected.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;100&quot;&gt;
+        &lt;style&gt;
+        text { font: 32px sans-serif; }
+        &lt;/style&gt;
+        
+        &lt;text y=&quot;40&quot; tabindex=&quot;2&quot; fill=&quot;green&quot;&gt;[object SVGTextElement]&lt;/text&gt;
+        &lt;script&gt;
+                document.querySelector(&quot;text&quot;).focus();
+        &lt;/script&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttextoutlinergbaexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/text-outline-rgba-expected.html (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/text-outline-rgba-expected.html                                (rev 0)
+++ trunk/LayoutTests/svg/text/text-outline-rgba-expected.html        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;style&gt;
+* { margin: 8; padding: 0; }
+div {
+        position: absolute;
+        top: 50px;
+        left: 50px;
+        outline: 50px solid rgba(0,0,255,0.5);
+        background: rgba(0,0,255,0.5);
+        width: 1px;
+        height: 1px;
+}
+&lt;/style&gt;
+&lt;div&gt;&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttextoutlinergbahtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/text-outline-rgba.html (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/text-outline-rgba.html                                (rev 0)
+++ trunk/LayoutTests/svg/text/text-outline-rgba.html        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;200&quot;&gt;
+        &lt;style&gt;
+        * { margin: 0; padding: 0; }
+        rect {
+                outline: 50px solid rgba(0,0,255,0.5);
+        }
+        &lt;/style&gt;
+        &lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;1&quot; height=&quot;1&quot; fill=&quot;rgba(0,0,255,0.5)&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttextoutlinehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/text-outline.html (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/text-outline.html                                (rev 0)
+++ trunk/LayoutTests/svg/text/text-outline.html        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;100&quot;&gt;
+        &lt;desc&gt;Test that the outline is painted, and that :active stylerules apply correctly on the 'text' element.&lt;/desc&gt;
+        &lt;style&gt;
+        * { margin: 0; padding: 0; }
+        *:focus { fill: green }
+        text { font: 32px sans-serif; }
+        &lt;/style&gt;
+        
+        &lt;text y=&quot;40&quot; tabindex=&quot;2&quot;&gt;Test didn't run&lt;/text&gt;
+        &lt;script&gt;
+                var t = document.querySelector(&quot;text&quot;);
+                t.focus();
+                t.textContent = document.activeElement;
+        &lt;/script&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttextpathoutlineexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/textpath-outline-expected.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/textpath-outline-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/text/textpath-outline-expected.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;  id=&quot;svg-root&quot; width=&quot;800&quot; height=&quot;600&quot;&gt;
+        &lt;defs&gt;
+                &lt;style&gt;
+                text { font: 24px sans-serif; outline: 1px solid black }
+                &lt;/style&gt;
+        &lt;/defs&gt;
+        &lt;text x=&quot;8&quot; y=&quot;30&quot;&gt;Outlined text&lt;/text&gt;
+&lt;/svg&gt;
+
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttextpathoutlinesvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/textpath-outline.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/textpath-outline.svg                                (rev 0)
+++ trunk/LayoutTests/svg/text/textpath-outline.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;  id=&quot;svg-root&quot; width=&quot;800&quot; height=&quot;600&quot;&gt;
+        &lt;defs&gt;
+                &lt;path id=&quot;tp&quot; d=&quot;M8,30h400&quot;/&gt;
+                &lt;style&gt;
+                textPath { font: 24px sans-serif; outline: 1px solid black }
+                &lt;/style&gt;
+        &lt;/defs&gt;
+        &lt;text&gt;&lt;textPath xlink:href=&quot;#tp&quot;&gt;Outlined text&lt;/textPath&gt;&lt;/text&gt;
+&lt;/svg&gt;
+
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttspanmultipleoutlineexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/tspan-multiple-outline-expected.html (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/tspan-multiple-outline-expected.html                                (rev 0)
+++ trunk/LayoutTests/svg/text/tspan-multiple-outline-expected.html        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;head&gt;
+&lt;style&gt;
+html,body { margin-top: 10.5px; padding-top: 0px }
+span:first-of-type { position: relative;  }
+span { font: 32px sans-serif; outline: 1px solid black; line-height: 1.5em; }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;span&gt;tspan 1&lt;/span&gt;&lt;br/&gt;
+&lt;span&gt;tspan 2&lt;/span&gt;&lt;br/&gt;
+&lt;span&gt;tspan 3&lt;/span&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttspanmultipleoutlinesvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/tspan-multiple-outline.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/tspan-multiple-outline.svg                                (rev 0)
+++ trunk/LayoutTests/svg/text/tspan-multiple-outline.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;300&quot;&gt;
+        &lt;style&gt;
+        text { font: 32px sans-serif; }
+        tspan { outline: 1px solid black; }
+        &lt;/style&gt;
+        
+        &lt;text x=&quot;8&quot; y=&quot;8&quot;&gt;&lt;tspan dy=&quot;1.5em&quot;&gt;tspan 1&lt;/tspan&gt;
+        &lt;tspan x=&quot;8&quot; dy=&quot;1.5em&quot;&gt;tspan 2&lt;/tspan&gt;
+        &lt;tspan x=&quot;8&quot; dy=&quot;1.5em&quot;&gt;tspan 3&lt;/tspan&gt;&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttspanoutline2expectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/tspan-outline-2-expected.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/tspan-outline-2-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/text/tspan-outline-2-expected.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,9 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;100&quot;&gt;
+        &lt;style&gt;
+        text { font: 32px sans-serif; }
+        tspan { fill: green; outline: 2px solid black; }
+ }
+        &lt;/style&gt;
+        
+        &lt;text y=&quot;40&quot; tabindex=&quot;2&quot;&gt;&gt;&gt;&gt; &lt;tspan&gt;[object SVGTSpanElement]&lt;/tspan&gt; &amp;lt;&amp;lt;&amp;lt;&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttspanoutline2svg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/tspan-outline-2.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/tspan-outline-2.svg                                (rev 0)
+++ trunk/LayoutTests/svg/text/tspan-outline-2.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;100&quot;&gt;
+        &lt;desc&gt;Test that the outline is painted, and that :active stylerules apply correctly on the 'tspan' element.&lt;/desc&gt;
+        &lt;style&gt;
+        *:focus { fill: green; outline: 2px solid black; }
+        text { font: 32px sans-serif; }
+        &lt;/style&gt;
+        
+        &lt;text y=&quot;40&quot;&gt;&gt;&gt;&gt; &lt;tspan tabindex=&quot;2&quot;&gt;Test didn't run&lt;/tspan&gt; &amp;lt;&amp;lt;&amp;lt;&lt;/text&gt;
+        &lt;script&gt;
+                var t = document.querySelector(&quot;tspan&quot;);
+                t.focus();
+                t.textContent = document.activeElement;
+        &lt;/script&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttspanoutlineexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/tspan-outline-expected.svg (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/tspan-outline-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/text/tspan-outline-expected.svg        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,10 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;100&quot;&gt;
+        &lt;style&gt;
+        text { font: 32px sans-serif; }
+        &lt;/style&gt;
+        
+        &lt;text y=&quot;40&quot; tabindex=&quot;2&quot; fill=&quot;green&quot;&gt;[object SVGTSpanElement]&lt;/text&gt;
+        &lt;script&gt;
+                document.querySelector(&quot;text&quot;).focus();
+        &lt;/script&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtexttspanoutlinehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/tspan-outline.html (0 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/tspan-outline.html                                (rev 0)
+++ trunk/LayoutTests/svg/text/tspan-outline.html        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!doctype html&gt;
+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;800&quot; height=&quot;100&quot;&gt;
+        &lt;desc&gt;Test that the outline is painted, and that :active stylerules apply correctly on the 'tspan' element.&lt;/desc&gt;
+        &lt;style&gt;
+        * { margin: 0; padding: 0; }
+        *:focus { fill: green }
+        text { font: 32px sans-serif; }
+        &lt;/style&gt;
+        
+        &lt;text y=&quot;40&quot;&gt;&lt;tspan tabindex=&quot;2&quot;&gt;Test didn't run&lt;/tspan&gt;&lt;/text&gt;
+        &lt;script&gt;
+                var t = document.querySelector(&quot;tspan&quot;);
+                t.focus();
+                t.textContent = document.activeElement;
+        &lt;/script&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/ChangeLog        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -1,3 +1,59 @@
</span><ins>+2014-05-12  Dirk Schulze  &lt;krit@webkit.org&gt;
+
+        SVG outline property is broken and inefficient
+        https://bugs.webkit.org/show_bug.cgi?id=113666
+
+        Reviewed by Dean Jackson.
+
+        Patch by Erik Dahlström backported from Blink.
+
+        &quot;[SVG2] css 'outline' property should apply to svg elements 
+
+        The 'outline' property was only partially working in SVG before
+        this patch, this makes it work on text and text content child
+        elements too. 
+
+        This makes SVG render the outlines as part of the foreground paint
+        phase. 
+
+        Partly based on Florin Malita's webkit patch https://bugs.webkit.org/show_bug.cgi?id=113666#c12.&quot;
+
+        Tests: svg/custom/outline-stacking-expected.svg
+               svg/custom/outline-stacking.svg
+               svg/custom/rgba-color-outline.svg
+               svg/text/text-outline-expected.svg
+               svg/text/text-outline-rgba.html
+               svg/text/text-outline.html
+               svg/text/textpath-outline-expected.svg
+               svg/text/textpath-outline.svg
+               svg/text/tspan-multiple-outline.svg
+               svg/text/tspan-outline-2-expected.svg
+               svg/text/tspan-outline-2.svg
+               svg/text/tspan-outline-expected.svg
+               svg/text/tspan-outline.html
+
+        * rendering/svg/RenderSVGContainer.cpp:
+        (WebCore::RenderSVGContainer::paint): Draw outline in forground
+            paint phase.
+        * rendering/svg/RenderSVGImage.cpp:
+        (WebCore::RenderSVGImage::paint): Draw outline in forground
+            paint phase.
+        * rendering/svg/RenderSVGRoot.cpp:
+        (WebCore::RenderSVGRoot::paintReplaced): Pass paint offset.
+        * rendering/svg/RenderSVGShape.cpp:
+        (WebCore::RenderSVGShape::paint): Draw outline in forground
+            paint phase.
+        * rendering/svg/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::paint): Draw outline in forground
+            paint phase.
+        * rendering/svg/SVGInlineFlowBox.cpp:
+        (WebCore::SVGInlineFlowBox::paint): Pass paint offset.
+        * rendering/svg/SVGInlineTextBox.cpp:
+        (WebCore::SVGInlineTextBox::paint): Draw outline in forground
+            paint phase.
+        * rendering/svg/SVGRootInlineBox.cpp:
+        (WebCore::SVGRootInlineBox::paint): Pass paint offset.
+
</ins><span class="cx"> 2014-05-12  Beth Dakin  &lt;bdakin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Layer for bottom overhang area needs to be offset by the topContentInset
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGContainercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGContainer.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -143,11 +143,11 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     // FIXME: This really should be drawn from local coordinates, but currently we hack it
</span><del>-    // to avoid our clip killing our outline rect.  Thus we translate our
</del><ins>+    // to avoid our clip killing our outline rect. Thus we translate our
</ins><span class="cx">     // outline rect into parent coords before drawing.
</span><span class="cx">     // FIXME: This means our focus ring won't share our rotation like it should.
</span><span class="cx">     // We should instead disable our clip during PaintPhaseOutline
</span><del>-    if ((paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSelfOutline) &amp;&amp; style().outlineWidth() &amp;&amp; style().visibility() == VISIBLE) {
</del><ins>+    if (paintInfo.phase == PaintPhaseSelfOutline &amp;&amp; style().outlineWidth() &amp;&amp; style().visibility() == VISIBLE) {
</ins><span class="cx">         IntRect paintRectInParent = enclosingIntRect(localToParentTransform().mapRect(repaintRect));
</span><span class="cx">         paintOutline(paintInfo, paintRectInParent);
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGImage.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -132,7 +132,8 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderSVGImage::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp;)
</span><span class="cx"> {
</span><del>-    if (paintInfo.context-&gt;paintingDisabled() || style().visibility() == HIDDEN || !imageResource().hasImage())
</del><ins>+    if (paintInfo.context-&gt;paintingDisabled() || paintInfo.phase != PaintPhaseForeground
+        || style().visibility() == HIDDEN || !imageResource().hasImage())
</ins><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     FloatRect boundingBox = repaintRectInLocalCoordinates();
</span><span class="lines">@@ -140,25 +141,22 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     PaintInfo childPaintInfo(paintInfo);
</span><del>-    bool drawsOutline = style().outlineWidth() &amp;&amp; (childPaintInfo.phase == PaintPhaseOutline || childPaintInfo.phase == PaintPhaseSelfOutline);
-    if (drawsOutline || childPaintInfo.phase == PaintPhaseForeground) {
-        GraphicsContextStateSaver stateSaver(*childPaintInfo.context);
-        childPaintInfo.applyTransform(m_localTransform);
</del><ins>+    GraphicsContextStateSaver stateSaver(*childPaintInfo.context);
+    childPaintInfo.applyTransform(m_localTransform);
</ins><span class="cx"> 
</span><del>-        if (childPaintInfo.phase == PaintPhaseForeground) {
-            SVGRenderingContext renderingContext(*this, childPaintInfo);
</del><ins>+    if (childPaintInfo.phase == PaintPhaseForeground) {
+        SVGRenderingContext renderingContext(*this, childPaintInfo);
</ins><span class="cx"> 
</span><del>-            if (renderingContext.isRenderingPrepared()) {
-                if (style().svgStyle().bufferedRendering() == BR_STATIC  &amp;&amp; renderingContext.bufferForeground(m_bufferedForeground))
-                    return;
</del><ins>+        if (renderingContext.isRenderingPrepared()) {
+            if (style().svgStyle().bufferedRendering() == BR_STATIC  &amp;&amp; renderingContext.bufferForeground(m_bufferedForeground))
+                return;
</ins><span class="cx"> 
</span><del>-                paintForeground(childPaintInfo);
-            }
</del><ins>+            paintForeground(childPaintInfo);
</ins><span class="cx">         }
</span><del>-
-        if (drawsOutline)
-            paintOutline(childPaintInfo, IntRect(boundingBox));
</del><span class="cx">     }
</span><ins>+
+    if (style().outlineWidth())
+        paintOutline(childPaintInfo, IntRect(boundingBox));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderSVGImage::paintForeground(PaintInfo&amp; paintInfo)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGRootcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -230,6 +230,10 @@
</span><span class="cx">     if (paintInfo.context-&gt;paintingDisabled())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    // SVG outlines are painted during PaintPhaseForeground.
+    if (paintInfo.phase == PaintPhaseOutline || paintInfo.phase == PaintPhaseSelfOutline)
+        return;
+
</ins><span class="cx">     // An empty viewBox also disables rendering.
</span><span class="cx">     // (http://www.w3.org/TR/SVG/coords.html#ViewBoxAttribute)
</span><span class="cx">     if (svgSVGElement().hasEmptyViewBox())
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGShapecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -290,33 +290,31 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderSVGShape::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp;)
</span><span class="cx"> {
</span><del>-    if (paintInfo.context-&gt;paintingDisabled() || style().visibility() == HIDDEN || isEmpty())
</del><ins>+    if (paintInfo.context-&gt;paintingDisabled() || paintInfo.phase != PaintPhaseForeground
+        || style().visibility() == HIDDEN || isEmpty())
</ins><span class="cx">         return;
</span><span class="cx">     FloatRect boundingBox = repaintRectInLocalCoordinates();
</span><span class="cx">     if (!SVGRenderSupport::paintInfoIntersectsRepaintRect(boundingBox, m_localTransform, paintInfo))
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     PaintInfo childPaintInfo(paintInfo);
</span><del>-    bool drawsOutline = style().outlineWidth() &amp;&amp; (childPaintInfo.phase == PaintPhaseOutline || childPaintInfo.phase == PaintPhaseSelfOutline);
-    if (drawsOutline || childPaintInfo.phase == PaintPhaseForeground) {
-        GraphicsContextStateSaver stateSaver(*childPaintInfo.context);
-        childPaintInfo.applyTransform(m_localTransform);
</del><ins>+    GraphicsContextStateSaver stateSaver(*childPaintInfo.context);
+    childPaintInfo.applyTransform(m_localTransform);
</ins><span class="cx"> 
</span><del>-        if (childPaintInfo.phase == PaintPhaseForeground) {
-            SVGRenderingContext renderingContext(*this, childPaintInfo);
</del><ins>+    if (childPaintInfo.phase == PaintPhaseForeground) {
+        SVGRenderingContext renderingContext(*this, childPaintInfo);
</ins><span class="cx"> 
</span><del>-            if (renderingContext.isRenderingPrepared()) {
-                const SVGRenderStyle&amp; svgStyle = style().svgStyle();
-                if (svgStyle.shapeRendering() == SR_CRISPEDGES)
-                    childPaintInfo.context-&gt;setShouldAntialias(false);
</del><ins>+        if (renderingContext.isRenderingPrepared()) {
+            const SVGRenderStyle&amp; svgStyle = style().svgStyle();
+            if (svgStyle.shapeRendering() == SR_CRISPEDGES)
+                childPaintInfo.context-&gt;setShouldAntialias(false);
</ins><span class="cx"> 
</span><del>-                fillStrokeMarkers(childPaintInfo);
-            }
</del><ins>+            fillStrokeMarkers(childPaintInfo);
</ins><span class="cx">         }
</span><del>-
-        if (drawsOutline)
-            paintOutline(childPaintInfo, IntRect(boundingBox));
</del><span class="cx">     }
</span><ins>+
+    if (style().outlineWidth())
+        paintOutline(childPaintInfo, IntRect(boundingBox));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // This method is called from inside paintOutline() since we call paintOutline()
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -493,7 +493,6 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (paintInfo.phase != PaintPhaseForeground
</span><del>-     &amp;&amp; paintInfo.phase != PaintPhaseSelfOutline
</del><span class="cx">      &amp;&amp; paintInfo.phase != PaintPhaseSelection)
</span><span class="cx">          return;
</span><span class="cx"> 
</span><span class="lines">@@ -501,6 +500,12 @@
</span><span class="cx">     GraphicsContextStateSaver stateSaver(*blockInfo.context);
</span><span class="cx">     blockInfo.applyTransform(localToParentTransform());
</span><span class="cx">     RenderBlock::paint(blockInfo, LayoutPoint());
</span><ins>+
+    // Paint the outlines, if any
+    if (paintInfo.phase == PaintPhaseForeground) {
+        blockInfo.phase = PaintPhaseSelfOutline;
+        RenderBlock::paint(blockInfo, LayoutPoint());
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> FloatRect RenderSVGText::strokeBoundingBox() const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGInlineFlowBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/SVGInlineFlowBox.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGInlineFlowBox::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp;, LayoutUnit, LayoutUnit)
</del><ins>+void SVGInlineFlowBox::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp; paintOffset, LayoutUnit, LayoutUnit)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection);
</span><span class="cx">     ASSERT(!paintInfo.context-&gt;paintingDisabled());
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">             if (child-&gt;isSVGInlineTextBox())
</span><span class="cx">                 computeTextMatchMarkerRectForRenderer(&amp;(toSVGInlineTextBox(child)-&gt;renderer()));
</span><span class="cx"> 
</span><del>-            child-&gt;paint(paintInfo, LayoutPoint(), 0, 0);
</del><ins>+            child-&gt;paint(paintInfo, paintOffset, 0, 0);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGInlineTextBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &quot;InlineFlowBox.h&quot;
</span><span class="cx"> #include &quot;PointerEventsHitRules.h&quot;
</span><span class="cx"> #include &quot;RenderBlock.h&quot;
</span><ins>+#include &quot;RenderInline.h&quot;
</ins><span class="cx"> #include &quot;RenderSVGResourceSolidColor.h&quot;
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;SVGRenderingContext.h&quot;
</span><span class="lines">@@ -242,7 +243,7 @@
</span><span class="cx">     ASSERT(!m_paintingResource);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGInlineTextBox::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp;, LayoutUnit, LayoutUnit)
</del><ins>+void SVGInlineTextBox::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp; paintOffset, LayoutUnit, LayoutUnit)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(paintInfo.shouldPaintWithinRoot(renderer()));
</span><span class="cx">     ASSERT(paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection);
</span><span class="lines">@@ -335,6 +336,10 @@
</span><span class="cx">         m_paintingResourceMode = ApplyToDefaultMode;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // Finally, paint the outline if any.
+    if (renderer().style().hasOutline() &amp;&amp; parentRenderer.isRenderInline())
+        toRenderInline(parentRenderer).paintOutline(paintInfo, paintOffset);
+
</ins><span class="cx">     ASSERT(!m_paintingResource);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGRootInlineBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp (168644 => 168645)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp        2014-05-12 21:07:57 UTC (rev 168644)
+++ trunk/Source/WebCore/rendering/svg/SVGRootInlineBox.cpp        2014-05-12 21:18:24 UTC (rev 168645)
</span><span class="lines">@@ -45,7 +45,7 @@
</span><span class="cx">     return toRenderSVGText(blockFlow());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void SVGRootInlineBox::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp;, LayoutUnit, LayoutUnit)
</del><ins>+void SVGRootInlineBox::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp; paintOffset, LayoutUnit, LayoutUnit)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(paintInfo.phase == PaintPhaseForeground || paintInfo.phase == PaintPhaseSelection);
</span><span class="cx">     ASSERT(!paintInfo.context-&gt;paintingDisabled());
</span><span class="lines">@@ -69,7 +69,7 @@
</span><span class="cx">             if (child-&gt;isSVGInlineTextBox())
</span><span class="cx">                 SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer(&amp;toSVGInlineTextBox(child)-&gt;renderer());
</span><span class="cx"> 
</span><del>-            child-&gt;paint(paintInfo, LayoutPoint(), 0, 0);
</del><ins>+            child-&gt;paint(paintInfo, paintOffset, 0, 0);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>