<!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>[165595] 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/165595">165595</a></dd>
<dt>Author</dt> <dd>krit@webkit.org</dd>
<dt>Date</dt> <dd>2014-03-13 19:25:41 -0700 (Thu, 13 Mar 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[SVG2] support paint-order presentation attribute
https://bugs.webkit.org/show_bug.cgi?id=129373

Reviewed by Dean Jackson.

Source/WebCore:

Add support for the paint-order property from SVG2. The presentation
attribute/CSS property allows to paint fill, stroke and markers in any order
the author desires.

Firefox supports this but behind a runtime flag. It is just activated in
nightly builds by default.

Chromium supports it behind a runtime flag as well but is going to ship it
pretty soon.

Tests: svg/paint-order/paint-order-fill-expected.svg
       svg/paint-order/paint-order-fill-markers-expected.svg
       svg/paint-order/paint-order-fill-markers.svg
       svg/paint-order/paint-order-fill.svg
       svg/paint-order/paint-order-markers-expected.svg
       svg/paint-order/paint-order-markers-stroke-expected.svg
       svg/paint-order/paint-order-markers-stroke.svg
       svg/paint-order/paint-order-markers.svg
       svg/paint-order/paint-order-normal-expected.svg
       svg/paint-order/paint-order-normal.svg
       svg/paint-order/paint-order-stroke-expected.svg
       svg/paint-order/paint-order-stroke-marker-expected.svg
       svg/paint-order/paint-order-stroke-marker.svg
       svg/paint-order/paint-order-stroke.svg
       svg/paint-order/paint-order-text-markers-expected.svg
       svg/paint-order/paint-order-text-markers.svg
       svg/paint-order/paint-order-text-normal-expected.svg
       svg/paint-order/paint-order-text-normal.svg
       svg/paint-order/paint-order-text-stroke-expected.svg
       svg/paint-order/paint-order-text-stroke.svg
       svg/paint-order/paint-order-text-tspan-001-expected.svg
       svg/paint-order/paint-order-text-tspan-001.svg
       svg/paint-order/paint-order-text-tspan-002-expected.svg
       svg/paint-order/paint-order-text-tspan-002.svg
       svg/paint-order/parsing-paint-order.html

* css/CSSComputedStyleDeclaration.cpp: Computed style for paint-order.
(WebCore::ComputedStyleExtractor::propertyValue):
* css/CSSParser.h:
* css/CSSPropertyNames.in:
* css/CSSValueKeywords.in:
* css/SVGCSSComputedStyleDeclaration.cpp:
(WebCore::paintOrder):
(WebCore::ComputedStyleExtractor::svgPropertyValue):
* css/SVGCSSParser.cpp: Parse paint-order. Take care of serialization
    at this point already to get element style correct.
(WebCore::CSSParser::parseSVGValue):
(WebCore::CSSParser::parsePaintOrder):
* css/SVGCSSStyleSelector.cpp:
(WebCore::StyleResolver::applySVGProperty):
* rendering/style/SVGRenderStyle.cpp:
(WebCore::SVGRenderStyle::paintTypesForPaintOrder):
(WebCore::SVGRenderStyle::diff): Repaint on change.
* rendering/style/SVGRenderStyle.h:
(WebCore::SVGRenderStyle::initialPaintOrder):
(WebCore::SVGRenderStyle::setPaintOrder):
(WebCore::SVGRenderStyle::paintOrder):
(WebCore::SVGRenderStyle::InheritedFlags::operator==):
(WebCore::SVGRenderStyle::setBitDefaults):
* rendering/style/SVGRenderStyleDefs.h:
* rendering/svg/RenderSVGShape.cpp: Change order of painting based on paint-order.
(WebCore::RenderSVGShape::strokeShape):
(WebCore::RenderSVGShape::fillStrokeMarkers):
(WebCore::RenderSVGShape::paint):
(WebCore::RenderSVGShape::addFocusRingRects):
* rendering/svg/RenderSVGShape.h:
* rendering/svg/SVGInlineTextBox.cpp:
(WebCore::SVGInlineTextBox::paint): Ditto.
* svg/SVGElement.cpp: Make property a presentation attribute.
(WebCore::populateAttributeNameToCSSPropertyIDMap):
(WebCore::populateAttributeNameToAnimatedPropertyTypeMap):
* svg/svgattrs.in: Add paint-order attribute.

LayoutTests:

Test parsing and bahvior of the paint-order property.

* svg/paint-order/paint-order-fill-expected.svg: Added.
* svg/paint-order/paint-order-fill-markers-expected.svg: Added.
* svg/paint-order/paint-order-fill-markers.svg: Added.
* svg/paint-order/paint-order-fill.svg: Added.
* svg/paint-order/paint-order-markers-expected.svg: Added.
* svg/paint-order/paint-order-markers-stroke-expected.svg: Added.
* svg/paint-order/paint-order-markers-stroke.svg: Added.
* svg/paint-order/paint-order-markers.svg: Added.
* svg/paint-order/paint-order-normal-expected.svg: Added.
* svg/paint-order/paint-order-normal.svg: Added.
* svg/paint-order/paint-order-stroke-expected.svg: Added.
* svg/paint-order/paint-order-stroke-marker-expected.svg: Added.
* svg/paint-order/paint-order-stroke-marker.svg: Added.
* svg/paint-order/paint-order-stroke.svg: Added.
* svg/paint-order/paint-order-text-markers-expected.svg: Added.
* svg/paint-order/paint-order-text-markers.svg: Added.
* svg/paint-order/paint-order-text-normal-expected.svg: Added.
* svg/paint-order/paint-order-text-normal.svg: Added.
* svg/paint-order/paint-order-text-stroke-expected.svg: Added.
* svg/paint-order/paint-order-text-stroke.svg: Added.
* svg/paint-order/paint-order-text-tspan-001-expected.svg: Added.
* svg/paint-order/paint-order-text-tspan-001.svg: Added.
* svg/paint-order/paint-order-text-tspan-002-expected.svg: Added.
* svg/paint-order/paint-order-text-tspan-002.svg: Added.
* svg/paint-order/parsing-paint-order-expected.txt: Added.
* svg/paint-order/parsing-paint-order.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="#trunkSourceWebCorecssCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSParserh">trunk/Source/WebCore/css/CSSParser.h</a></li>
<li><a href="#trunkSourceWebCorecssCSSPropertyNamesin">trunk/Source/WebCore/css/CSSPropertyNames.in</a></li>
<li><a href="#trunkSourceWebCorecssCSSValueKeywordsin">trunk/Source/WebCore/css/CSSValueKeywords.in</a></li>
<li><a href="#trunkSourceWebCorecssSVGCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssSVGCSSParsercpp">trunk/Source/WebCore/css/SVGCSSParser.cpp</a></li>
<li><a href="#trunkSourceWebCorecssSVGCSSStyleSelectorcpp">trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleSVGRenderStylecpp">trunk/Source/WebCore/rendering/style/SVGRenderStyle.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleSVGRenderStyleh">trunk/Source/WebCore/rendering/style/SVGRenderStyle.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleSVGRenderStyleDefsh">trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGShapecpp">trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgRenderSVGShapeh">trunk/Source/WebCore/rendering/svg/RenderSVGShape.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGInlineTextBoxcpp">trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGElementcpp">trunk/Source/WebCore/svg/SVGElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgsvgattrsin">trunk/Source/WebCore/svg/svgattrs.in</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li>trunk/LayoutTests/svg/paint-order/</li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderfillexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-fill-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderfillmarkersexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-fill-markers-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderfillmarkerssvg">trunk/LayoutTests/svg/paint-order/paint-order-fill-markers.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderfillsvg">trunk/LayoutTests/svg/paint-order/paint-order-fill.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordermarkersexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-markers-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordermarkersstrokeexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordermarkersstrokesvg">trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordermarkerssvg">trunk/LayoutTests/svg/paint-order/paint-order-markers.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordernormalexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-normal-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordernormalsvg">trunk/LayoutTests/svg/paint-order/paint-order-normal.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderstrokeexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-stroke-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderstrokemarkerexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderstrokemarkersvg">trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintorderstrokesvg">trunk/LayoutTests/svg/paint-order/paint-order-stroke.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertextmarkersexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-text-markers-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertextmarkerssvg">trunk/LayoutTests/svg/paint-order/paint-order-text-markers.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertextnormalexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-text-normal-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertextnormalsvg">trunk/LayoutTests/svg/paint-order/paint-order-text-normal.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertextstrokeexpectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-text-stroke-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertextstrokesvg">trunk/LayoutTests/svg/paint-order/paint-order-text-stroke.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertexttspan001expectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertexttspan001svg">trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertexttspan002expectedsvg">trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002-expected.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderpaintordertexttspan002svg">trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002.svg</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderparsingpaintorderexpectedtxt">trunk/LayoutTests/svg/paint-order/parsing-paint-order-expected.txt</a></li>
<li><a href="#trunkLayoutTestssvgpaintorderparsingpaintorderhtml">trunk/LayoutTests/svg/paint-order/parsing-paint-order.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/LayoutTests/ChangeLog        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -1,3 +1,39 @@
</span><ins>+2014-03-13  Dirk Schulze  &lt;krit@webkit.org&gt;
+
+        [SVG2] support paint-order presentation attribute
+        https://bugs.webkit.org/show_bug.cgi?id=129373
+
+        Reviewed by Dean Jackson.
+
+        Test parsing and bahvior of the paint-order property.
+
+        * svg/paint-order/paint-order-fill-expected.svg: Added.
+        * svg/paint-order/paint-order-fill-markers-expected.svg: Added.
+        * svg/paint-order/paint-order-fill-markers.svg: Added.
+        * svg/paint-order/paint-order-fill.svg: Added.
+        * svg/paint-order/paint-order-markers-expected.svg: Added.
+        * svg/paint-order/paint-order-markers-stroke-expected.svg: Added.
+        * svg/paint-order/paint-order-markers-stroke.svg: Added.
+        * svg/paint-order/paint-order-markers.svg: Added.
+        * svg/paint-order/paint-order-normal-expected.svg: Added.
+        * svg/paint-order/paint-order-normal.svg: Added.
+        * svg/paint-order/paint-order-stroke-expected.svg: Added.
+        * svg/paint-order/paint-order-stroke-marker-expected.svg: Added.
+        * svg/paint-order/paint-order-stroke-marker.svg: Added.
+        * svg/paint-order/paint-order-stroke.svg: Added.
+        * svg/paint-order/paint-order-text-markers-expected.svg: Added.
+        * svg/paint-order/paint-order-text-markers.svg: Added.
+        * svg/paint-order/paint-order-text-normal-expected.svg: Added.
+        * svg/paint-order/paint-order-text-normal.svg: Added.
+        * svg/paint-order/paint-order-text-stroke-expected.svg: Added.
+        * svg/paint-order/paint-order-text-stroke.svg: Added.
+        * svg/paint-order/paint-order-text-tspan-001-expected.svg: Added.
+        * svg/paint-order/paint-order-text-tspan-001.svg: Added.
+        * svg/paint-order/paint-order-text-tspan-002-expected.svg: Added.
+        * svg/paint-order/paint-order-text-tspan-002.svg: Added.
+        * svg/paint-order/parsing-paint-order-expected.txt: Added.
+        * svg/paint-order/parsing-paint-order.html: Added.
+
</ins><span class="cx"> 2014-03-13  Diego Pino Garcia  &lt;dpino@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: AXI: Expose focused/focusable state in the Accessibility Node Inspector
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderfillexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-fill-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-fill-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-fill-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot;/&gt;
+&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderfillmarkersexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-fill-markers-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-fill-markers-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-fill-markers-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot;/&gt;
+&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;yellow&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot;/&gt;
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderfillmarkerssvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-fill-markers.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-fill-markers.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-fill-markers.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;marker id=&quot;marker1&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerWidth=&quot;5&quot; markerHeight=&quot;5&quot;&gt;
+  &lt;rect width=&quot;10&quot; height=&quot;10&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/marker&gt;
+&lt;path d=&quot;M50,50 L150,50 L150,150 L50,150 z&quot; marker-start=&quot;url(#marker1)&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot; fill=&quot;blue&quot; paint-order=&quot;fill markers&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderfillsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-fill.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-fill.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-fill.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;marker id=&quot;marker1&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerWidth=&quot;5&quot; markerHeight=&quot;5&quot;&gt;
+  &lt;rect width=&quot;10&quot; height=&quot;10&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/marker&gt;
+&lt;path d=&quot;M50,50 L150,50 L150,150 L50,150 z&quot; marker-start=&quot;url(#marker1)&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot; fill=&quot;blue&quot; paint-order=&quot;fill&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordermarkersexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-markers-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-markers-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-markers-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;yellow&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot;/&gt;
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordermarkersstrokeexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;yellow&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot;/&gt;
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordermarkersstrokesvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-markers-stroke.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;marker id=&quot;marker1&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerWidth=&quot;5&quot; markerHeight=&quot;5&quot;&gt;
+  &lt;rect width=&quot;10&quot; height=&quot;10&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/marker&gt;
+&lt;path d=&quot;M50,50 L150,50 L150,150 L50,150 z&quot; marker-start=&quot;url(#marker1)&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot; fill=&quot;blue&quot; paint-order=&quot;markers stroke&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordermarkerssvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-markers.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-markers.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-markers.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;marker id=&quot;marker1&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerWidth=&quot;5&quot; markerHeight=&quot;5&quot;&gt;
+  &lt;rect width=&quot;10&quot; height=&quot;10&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/marker&gt;
+&lt;path d=&quot;M50,50 L150,50 L150,150 L50,150 z&quot; marker-start=&quot;url(#marker1)&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot; fill=&quot;blue&quot; paint-order=&quot;markers&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordernormalexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-normal-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-normal-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-normal-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot;/&gt;
+&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordernormalsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-normal.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-normal.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-normal.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;marker id=&quot;marker1&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerWidth=&quot;5&quot; markerHeight=&quot;5&quot;&gt;
+  &lt;rect width=&quot;10&quot; height=&quot;10&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/marker&gt;
+&lt;path d=&quot;M50,50 L150,50 L150,150 L50,150 z&quot; marker-start=&quot;url(#marker1)&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot; fill=&quot;blue&quot; paint-order=&quot;normal&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderstrokeexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-stroke-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-stroke-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-stroke-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot;/&gt;
+&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderstrokemarkerexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot;/&gt;
+&lt;rect width=&quot;100&quot; height=&quot;100&quot; fill=&quot;yellow&quot;/&gt;
+&lt;rect x=&quot;50&quot; y=&quot;50&quot; width=&quot;100&quot; height=&quot;100&quot; fill=&quot;blue&quot;/&gt;
+&lt;/svg&gt;
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderstrokemarkersvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-stroke-marker.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;marker id=&quot;marker1&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerWidth=&quot;5&quot; markerHeight=&quot;5&quot;&gt;
+  &lt;rect width=&quot;10&quot; height=&quot;10&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/marker&gt;
+&lt;path d=&quot;M50,50 L150,50 L150,150 L50,150 z&quot; marker-start=&quot;url(#marker1)&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot; fill=&quot;blue&quot; paint-order=&quot;stroke markers&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintorderstrokesvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-stroke.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-stroke.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-stroke.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,6 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;marker id=&quot;marker1&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerWidth=&quot;5&quot; markerHeight=&quot;5&quot;&gt;
+  &lt;rect width=&quot;10&quot; height=&quot;10&quot; fill=&quot;yellow&quot;/&gt;
+&lt;/marker&gt;
+&lt;path d=&quot;M50,50 L150,50 L150,150 L50,150 z&quot; marker-start=&quot;url(#marker1)&quot; stroke=&quot;green&quot; stroke-width=&quot;20&quot; fill=&quot;blue&quot; paint-order=&quot;stroke&quot;/&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertextmarkersexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-markers-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-markers-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-markers-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-order&lt;/text&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;none&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-order&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertextmarkerssvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-markers.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-markers.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-markers.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot; paint-order=&quot;markers&quot;&gt;paint-order&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertextnormalexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-normal-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-normal-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-normal-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-order&lt;/text&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;none&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-order&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertextnormalsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-normal.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-normal.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-normal.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot; paint-order=&quot;normal&quot;&gt;paint-order&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertextstrokeexpectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-stroke-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-stroke-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-stroke-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;none&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-order&lt;/text&gt;
+&lt;text fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-order&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertextstrokesvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-stroke.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-stroke.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-stroke.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot; paint-order=&quot;stroke&quot;&gt;paint-order&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertexttspan001expectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-&lt;tspan fill=&quot;none&quot;&gt;order&lt;/tspan&gt;&lt;/text&gt;
+&lt;text fill=&quot;none&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-&lt;tspan fill=&quot;blue&quot;&gt;order&lt;/tspan&gt;&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertexttspan001svg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-001.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-&lt;tspan paint-order=&quot;stroke&quot;&gt;order&lt;/tspan&gt;&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertexttspan002expectedsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002-expected.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002-expected.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002-expected.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;none&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-&lt;tspan stroke=&quot;none&quot; fill=&quot;blue&quot;&gt;order&lt;/tspan&gt;&lt;/text&gt;
+&lt;text fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot;&gt;paint-&lt;tspan fill=&quot;none&quot; stroke=&quot;green&quot; stroke-width=&quot;3&quot;&gt;order&lt;/tspan&gt;&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderpaintordertexttspan002svg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002.svg (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002.svg                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/paint-order-text-tspan-002.svg        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
+&lt;text stroke=&quot;green&quot; stroke-width=&quot;3&quot; fill=&quot;blue&quot; x=&quot;20&quot; y=&quot;100&quot; font-size=&quot;36&quot; font-weight=&quot;bold&quot; paint-order=&quot;stroke&quot;&gt;paint-&lt;tspan paint-order=&quot;fill&quot;&gt;order&lt;/tspan&gt;&lt;/text&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderparsingpaintorderexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/parsing-paint-order-expected.txt (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/parsing-paint-order-expected.txt                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/parsing-paint-order-expected.txt        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,57 @@
</span><ins>+Test parsing, element style and computed style for paint-order property.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS innerStyle(&quot;paint-order&quot;, &quot;normal&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;fill&quot;) is &quot;fill&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke&quot;) is &quot;stroke&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;markers&quot;) is &quot;markers&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;fill stroke&quot;) is &quot;fill&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;fill stroke markers&quot;) is &quot;fill&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;fill markers&quot;) is &quot;fill markers&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;fill markers stroke&quot;) is &quot;fill markers&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke fill&quot;) is &quot;stroke&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke fill markers&quot;) is &quot;stroke&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke markers&quot;) is &quot;stroke markers&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke markers fill&quot;) is &quot;stroke markers&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke fill&quot;) is &quot;stroke&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke fill markers&quot;) is &quot;stroke&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke markers&quot;) is &quot;stroke markers&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke markers fill&quot;) is &quot;stroke markers&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;normal&quot;) is &quot;normal&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;fill&quot;) is &quot;fill&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke&quot;) is &quot;stroke&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;markers&quot;) is &quot;markers&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;fill stroke&quot;) is &quot;fill&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;fill stroke markers&quot;) is &quot;fill&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;fill markers&quot;) is &quot;fill markers&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;fill markers stroke&quot;) is &quot;fill markers&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke fill&quot;) is &quot;stroke&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke fill markers&quot;) is &quot;stroke&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke markers&quot;) is &quot;stroke markers&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke markers fill&quot;) is &quot;stroke markers&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke fill&quot;) is &quot;stroke&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke fill markers&quot;) is &quot;stroke&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke markers&quot;) is &quot;stroke markers&quot;
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke markers fill&quot;) is &quot;stroke markers&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;normal fill&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;normal fill&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;normal stroke&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;normal stroke&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;normal markers&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;normal markers&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;fill fill&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;fill fill&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;stroke stroke&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;stroke stroke&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;markers markers&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;markers markers&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;markers fill markers&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;markers fill markers&quot;) is &quot;normal&quot;
+PASS innerStyle(&quot;paint-order&quot;, &quot;markers stroke markers&quot;) is null
+PASS computedStyle(&quot;paint-order&quot;, &quot;markers stroke markers&quot;) is &quot;normal&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestssvgpaintorderparsingpaintorderhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/paint-order/parsing-paint-order.html (0 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/paint-order/parsing-paint-order.html                                (rev 0)
+++ trunk/LayoutTests/svg/paint-order/parsing-paint-order.html        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -0,0 +1,92 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;style&gt;
+* { font-size: 16px; }
+div { font-size: 8px; }
+&lt;/style&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+description('Test parsing, element style and computed style for paint-order property.');
+
+function computedStyle(property, value) {
+    var div = document.createElement(&quot;div&quot;);
+    document.body.appendChild(div);
+    div.style.setProperty(property, value);
+    var computedValue = getComputedStyle(div).getPropertyValue(property);
+    document.body.removeChild(div);
+    return computedValue;
+}
+
+function innerStyle(property, value) {
+    var div = document.createElement(&quot;div&quot;);
+    div.style.setProperty(property, value);
+    return div.style.getPropertyValue(property);
+}
+
+function testComputed(property, value, expected) {
+    shouldBeEqualToString('computedStyle(&quot;' + property + '&quot;, &quot;' + value + '&quot;)', expected);
+}
+
+function testInner(property, value, expected) {
+    if (expected === null)
+        shouldBeNull('innerStyle(&quot;' + property + '&quot;, &quot;' + value + '&quot;)');
+    else
+        shouldBeEqualToString('innerStyle(&quot;' + property + '&quot;, &quot;' + value + '&quot;)', expected);
+}
+
+function negativeTest(property, value) {
+    testInner(property, value, null);
+    testComputed(property, value, 'normal');
+}
+
+// Test element style.
+testInner(&quot;paint-order&quot;, &quot;normal&quot;, &quot;normal&quot;);
+testInner(&quot;paint-order&quot;, &quot;fill&quot;, &quot;fill&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke&quot;, &quot;stroke&quot;);
+testInner(&quot;paint-order&quot;, &quot;markers&quot;, &quot;markers&quot;);
+testInner(&quot;paint-order&quot;, &quot;fill stroke&quot;, &quot;fill&quot;);
+testInner(&quot;paint-order&quot;, &quot;fill stroke markers&quot;, &quot;fill&quot;);
+testInner(&quot;paint-order&quot;, &quot;fill markers&quot;, &quot;fill markers&quot;);
+testInner(&quot;paint-order&quot;, &quot;fill markers stroke&quot;, &quot;fill markers&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke fill&quot;, &quot;stroke&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke fill markers&quot;, &quot;stroke&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke markers&quot;, &quot;stroke markers&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke markers fill&quot;, &quot;stroke markers&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke fill&quot;, &quot;stroke&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke fill markers&quot;, &quot;stroke&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke markers&quot;, &quot;stroke markers&quot;);
+testInner(&quot;paint-order&quot;, &quot;stroke markers fill&quot;, &quot;stroke markers&quot;);
+
+// Test computed style.
+testComputed(&quot;paint-order&quot;, &quot;normal&quot;, &quot;normal&quot;);
+testComputed(&quot;paint-order&quot;, &quot;fill&quot;, &quot;fill&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke&quot;, &quot;stroke&quot;);
+testComputed(&quot;paint-order&quot;, &quot;markers&quot;, &quot;markers&quot;);
+testComputed(&quot;paint-order&quot;, &quot;fill stroke&quot;, &quot;fill&quot;);
+testComputed(&quot;paint-order&quot;, &quot;fill stroke markers&quot;, &quot;fill&quot;);
+testComputed(&quot;paint-order&quot;, &quot;fill markers&quot;, &quot;fill markers&quot;);
+testComputed(&quot;paint-order&quot;, &quot;fill markers stroke&quot;, &quot;fill markers&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke fill&quot;, &quot;stroke&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke fill markers&quot;, &quot;stroke&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke markers&quot;, &quot;stroke markers&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke markers fill&quot;, &quot;stroke markers&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke fill&quot;, &quot;stroke&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke fill markers&quot;, &quot;stroke&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke markers&quot;, &quot;stroke markers&quot;);
+testComputed(&quot;paint-order&quot;, &quot;stroke markers fill&quot;, &quot;stroke markers&quot;);
+
+// Negative tests.
+negativeTest(&quot;paint-order&quot;, &quot;normal fill&quot;);
+negativeTest(&quot;paint-order&quot;, &quot;normal stroke&quot;);
+negativeTest(&quot;paint-order&quot;, &quot;normal markers&quot;);
+negativeTest(&quot;paint-order&quot;, &quot;fill fill&quot;);
+negativeTest(&quot;paint-order&quot;, &quot;stroke stroke&quot;);
+negativeTest(&quot;paint-order&quot;, &quot;markers markers&quot;);
+negativeTest(&quot;paint-order&quot;, &quot;markers fill markers&quot;);
+negativeTest(&quot;paint-order&quot;, &quot;markers stroke markers&quot;);
+
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/ChangeLog        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -1,3 +1,83 @@
</span><ins>+2014-03-13  Dirk Schulze  &lt;krit@webkit.org&gt;
+
+        [SVG2] support paint-order presentation attribute
+        https://bugs.webkit.org/show_bug.cgi?id=129373
+
+        Reviewed by Dean Jackson.
+
+        Add support for the paint-order property from SVG2. The presentation
+        attribute/CSS property allows to paint fill, stroke and markers in any order
+        the author desires.
+
+        Firefox supports this but behind a runtime flag. It is just activated in
+        nightly builds by default.
+
+        Chromium supports it behind a runtime flag as well but is going to ship it
+        pretty soon.
+
+        Tests: svg/paint-order/paint-order-fill-expected.svg
+               svg/paint-order/paint-order-fill-markers-expected.svg
+               svg/paint-order/paint-order-fill-markers.svg
+               svg/paint-order/paint-order-fill.svg
+               svg/paint-order/paint-order-markers-expected.svg
+               svg/paint-order/paint-order-markers-stroke-expected.svg
+               svg/paint-order/paint-order-markers-stroke.svg
+               svg/paint-order/paint-order-markers.svg
+               svg/paint-order/paint-order-normal-expected.svg
+               svg/paint-order/paint-order-normal.svg
+               svg/paint-order/paint-order-stroke-expected.svg
+               svg/paint-order/paint-order-stroke-marker-expected.svg
+               svg/paint-order/paint-order-stroke-marker.svg
+               svg/paint-order/paint-order-stroke.svg
+               svg/paint-order/paint-order-text-markers-expected.svg
+               svg/paint-order/paint-order-text-markers.svg
+               svg/paint-order/paint-order-text-normal-expected.svg
+               svg/paint-order/paint-order-text-normal.svg
+               svg/paint-order/paint-order-text-stroke-expected.svg
+               svg/paint-order/paint-order-text-stroke.svg
+               svg/paint-order/paint-order-text-tspan-001-expected.svg
+               svg/paint-order/paint-order-text-tspan-001.svg
+               svg/paint-order/paint-order-text-tspan-002-expected.svg
+               svg/paint-order/paint-order-text-tspan-002.svg
+               svg/paint-order/parsing-paint-order.html
+
+        * css/CSSComputedStyleDeclaration.cpp: Computed style for paint-order.
+        (WebCore::ComputedStyleExtractor::propertyValue):
+        * css/CSSParser.h:
+        * css/CSSPropertyNames.in:
+        * css/CSSValueKeywords.in:
+        * css/SVGCSSComputedStyleDeclaration.cpp:
+        (WebCore::paintOrder):
+        (WebCore::ComputedStyleExtractor::svgPropertyValue):
+        * css/SVGCSSParser.cpp: Parse paint-order. Take care of serialization
+            at this point already to get element style correct.
+        (WebCore::CSSParser::parseSVGValue):
+        (WebCore::CSSParser::parsePaintOrder):
+        * css/SVGCSSStyleSelector.cpp:
+        (WebCore::StyleResolver::applySVGProperty):
+        * rendering/style/SVGRenderStyle.cpp:
+        (WebCore::SVGRenderStyle::paintTypesForPaintOrder):
+        (WebCore::SVGRenderStyle::diff): Repaint on change.
+        * rendering/style/SVGRenderStyle.h:
+        (WebCore::SVGRenderStyle::initialPaintOrder):
+        (WebCore::SVGRenderStyle::setPaintOrder):
+        (WebCore::SVGRenderStyle::paintOrder):
+        (WebCore::SVGRenderStyle::InheritedFlags::operator==):
+        (WebCore::SVGRenderStyle::setBitDefaults):
+        * rendering/style/SVGRenderStyleDefs.h:
+        * rendering/svg/RenderSVGShape.cpp: Change order of painting based on paint-order.
+        (WebCore::RenderSVGShape::strokeShape):
+        (WebCore::RenderSVGShape::fillStrokeMarkers):
+        (WebCore::RenderSVGShape::paint):
+        (WebCore::RenderSVGShape::addFocusRingRects):
+        * rendering/svg/RenderSVGShape.h:
+        * rendering/svg/SVGInlineTextBox.cpp:
+        (WebCore::SVGInlineTextBox::paint): Ditto.
+        * svg/SVGElement.cpp: Make property a presentation attribute.
+        (WebCore::populateAttributeNameToCSSPropertyIDMap):
+        (WebCore::populateAttributeNameToAnimatedPropertyTypeMap):
+        * svg/svgattrs.in: Add paint-order attribute.
+
</ins><span class="cx"> 2014-03-13  Andreas Kling  &lt;akling@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Network process instantiates JSC::VM under fake memory pressure.
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -413,6 +413,7 @@
</span><span class="cx">     CSSPropertyMarkerMid,
</span><span class="cx">     CSSPropertyMarkerStart,
</span><span class="cx">     CSSPropertyMaskType,
</span><ins>+    CSSPropertyPaintOrder,
</ins><span class="cx">     CSSPropertyShapeRendering,
</span><span class="cx">     CSSPropertyStroke,
</span><span class="cx">     CSSPropertyStrokeDasharray,
</span><span class="lines">@@ -3012,6 +3013,7 @@
</span><span class="cx">         case CSSPropertyMarkerMid:
</span><span class="cx">         case CSSPropertyMarkerStart:
</span><span class="cx">         case CSSPropertyMaskType:
</span><ins>+        case CSSPropertyPaintOrder:
</ins><span class="cx">         case CSSPropertyShapeRendering:
</span><span class="cx">         case CSSPropertyStroke:
</span><span class="cx">         case CSSPropertyStrokeDasharray:
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSParserh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSParser.h (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSParser.h        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/css/CSSParser.h        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -212,6 +212,7 @@
</span><span class="cx">     PassRefPtr&lt;CSSValue&gt; parseSVGPaint();
</span><span class="cx">     PassRefPtr&lt;CSSValue&gt; parseSVGColor();
</span><span class="cx">     PassRefPtr&lt;CSSValue&gt; parseSVGStrokeDasharray();
</span><ins>+    PassRefPtr&lt;CSSValue&gt; parsePaintOrder();
</ins><span class="cx"> 
</span><span class="cx">     // CSS3 Parsing Routines (for properties specific to CSS3)
</span><span class="cx">     PassRefPtr&lt;CSSValueList&gt; parseShadow(CSSParserValueList*, CSSPropertyID);
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSPropertyNamesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSPropertyNames.in        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -157,6 +157,7 @@
</span><span class="cx"> page-break-after
</span><span class="cx"> page-break-before
</span><span class="cx"> page-break-inside
</span><ins>+paint-order
</ins><span class="cx"> pointer-events [Inherited]
</span><span class="cx"> position
</span><span class="cx"> quotes [Inherited]
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSValueKeywordsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSValueKeywords.in (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSValueKeywords.in        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/css/CSSValueKeywords.in        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -1047,6 +1047,12 @@
</span><span class="cx"> -webkit-paged-x
</span><span class="cx"> -webkit-paged-y
</span><span class="cx"> 
</span><ins>+// paint-order
+// normal
+// fill
+// stroke
+markers
+
</ins><span class="cx"> // -webkit-grid-{column-start|column-end|row-start|row-end}
</span><span class="cx"> span
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssSVGCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/css/SVGCSSComputedStyleDeclaration.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -29,6 +29,41 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+static PassRefPtr&lt;CSSValue&gt; paintOrder(PaintOrder paintOrder)
+{
+    RefPtr&lt;CSSValueList&gt; paintOrderList = CSSValueList::createSpaceSeparated();
+    RefPtr&lt;CSSValue&gt; fill = CSSPrimitiveValue::createIdentifier(CSSValueFill);
+    RefPtr&lt;CSSValue&gt; stroke = CSSPrimitiveValue::createIdentifier(CSSValueStroke);
+    RefPtr&lt;CSSValue&gt; markers = CSSPrimitiveValue::createIdentifier(CSSValueMarkers);
+
+    switch (paintOrder) {
+    case PaintOrderNormal:
+        return CSSPrimitiveValue::createIdentifier(CSSValueNormal);
+    case PaintOrderFill:
+        paintOrderList-&gt;append(fill.release());
+        break;
+    case PaintOrderFillMarkers:
+        paintOrderList-&gt;append(fill.release());
+        paintOrderList-&gt;append(markers.release());
+        break;
+    case PaintOrderStroke:
+        paintOrderList-&gt;append(stroke.release());
+        break;
+    case PaintOrderStrokeMarkers:
+        paintOrderList-&gt;append(stroke.release());
+        paintOrderList-&gt;append(markers.release());
+        break;
+    case PaintOrderMarkers:
+        paintOrderList-&gt;append(markers.release());
+        break;
+    case PaintOrderMarkersStroke:
+        paintOrderList-&gt;append(markers.release());
+        paintOrderList-&gt;append(stroke.release());
+        break;
+    }
+    return paintOrderList.release();
+}
+
</ins><span class="cx"> static PassRefPtr&lt;CSSPrimitiveValue&gt; glyphOrientationToCSSPrimitiveValue(EGlyphOrientation orientation)
</span><span class="cx"> {
</span><span class="cx">     switch (orientation) {
</span><span class="lines">@@ -192,6 +227,8 @@
</span><span class="cx">             return CSSPrimitiveValue::create(svgStyle.vectorEffect());
</span><span class="cx">         case CSSPropertyMaskType:
</span><span class="cx">             return CSSPrimitiveValue::create(svgStyle.maskType());
</span><ins>+        case CSSPropertyPaintOrder:
+            return paintOrder(svgStyle.paintOrder());
</ins><span class="cx">         case CSSPropertyMarker:
</span><span class="cx">         case CSSPropertyEnableBackground:
</span><span class="cx">         case CSSPropertyColorProfile:
</span></span></pre></div>
<a id="trunkSourceWebCorecssSVGCSSParsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/SVGCSSParser.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SVGCSSParser.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/css/SVGCSSParser.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -174,7 +174,12 @@
</span><span class="cx">                 m_valueList-&gt;next();
</span><span class="cx">         }
</span><span class="cx">         break;
</span><del>-
</del><ins>+    case CSSPropertyPaintOrder:
+        if (id == CSSValueNormal)
+            valid_primitive = true;
+        else
+            parsedValue = parsePaintOrder();
+        break;
</ins><span class="cx">     case CSSPropertyFill:                 // &lt;paint&gt; | inherit
</span><span class="cx">     case CSSPropertyStroke:               // &lt;paint&gt; | inherit
</span><span class="cx">         {
</span><span class="lines">@@ -363,4 +368,53 @@
</span><span class="cx">     return SVGColor::createFromColor(Color(c));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+PassRefPtr&lt;CSSValue&gt; CSSParser::parsePaintOrder()
+{
+    CSSParserValue* value = m_valueList-&gt;current();
+
+    Vector&lt;CSSValueID&gt; paintTypeList;
+    RefPtr&lt;CSSPrimitiveValue&gt; fill;
+    RefPtr&lt;CSSPrimitiveValue&gt; stroke;
+    RefPtr&lt;CSSPrimitiveValue&gt; markers;
+    while (value) {
+        if (value-&gt;id == CSSValueFill &amp;&amp; !fill)
+            fill = CSSPrimitiveValue::createIdentifier(value-&gt;id);
+        else if (value-&gt;id == CSSValueStroke &amp;&amp; !stroke)
+            stroke = CSSPrimitiveValue::createIdentifier(value-&gt;id);
+        else if (value-&gt;id == CSSValueMarkers &amp;&amp; !markers)
+            markers = CSSPrimitiveValue::createIdentifier(value-&gt;id);
+        else
+            return nullptr;
+        paintTypeList.append(value-&gt;id);
+        value = m_valueList-&gt;next();
+    }
+
+    // After parsing we serialize the paint-order list. Since it is not possible to
+    // pop a last list items from CSSValueList without bigger cost, we create the
+    // list after parsing. 
+    CSSValueID firstPaintOrderType = paintTypeList.at(0);
+    RefPtr&lt;CSSValueList&gt; paintOrderList = CSSValueList::createSpaceSeparated();
+    switch (firstPaintOrderType) {
+    case CSSValueFill:
+        FALLTHROUGH;
+    case CSSValueStroke:
+        paintOrderList-&gt;append(firstPaintOrderType == CSSValueFill ? fill.release() : stroke.release());
+        if (paintTypeList.size() &gt; 1) {
+            if (paintTypeList.at(1) == CSSValueMarkers)
+                paintOrderList-&gt;append(markers.release());
+        }
+        break;
+    case CSSValueMarkers:
+        paintOrderList-&gt;append(markers.release());
+        if (paintTypeList.size() &gt; 1) {
+            if (paintTypeList.at(1) == CSSValueStroke)
+                paintOrderList-&gt;append(stroke.release());
+        }
+        break;
+    default:
+        ASSERT_NOT_REACHED();
+    }
+    return paintOrderList.release();
</ins><span class="cx"> }
</span><ins>+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCorecssSVGCSSStyleSelectorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/css/SVGCSSStyleSelector.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -203,6 +203,36 @@
</span><span class="cx">                 svgStyle.setClipRule(*primitiveValue);
</span><span class="cx">             break;
</span><span class="cx">         }
</span><ins>+        case CSSPropertyPaintOrder: {
+            HANDLE_INHERIT_AND_INITIAL(paintOrder, PaintOrder)
+            // 'normal' is the only primitiveValue
+            if (primitiveValue)
+                svgStyle.setPaintOrder(PaintOrderNormal);
+            if (!value-&gt;isValueList())
+                break;
+            CSSValueList* orderTypeList = toCSSValueList(value);
+
+            // Serialization happened during parsing. No additional checking needed.
+            unsigned length = orderTypeList-&gt;length();
+            primitiveValue = toCSSPrimitiveValue(orderTypeList-&gt;itemWithoutBoundsCheck(0));
+            PaintOrder paintOrder;
+            switch (primitiveValue-&gt;getValueID()) {
+            case CSSValueFill:
+                paintOrder = length &gt; 1 ? PaintOrderFillMarkers : PaintOrderFill;
+                break;
+            case CSSValueStroke:
+                paintOrder = length &gt; 1 ? PaintOrderStrokeMarkers : PaintOrderStroke;
+                break;
+            case CSSValueMarkers:
+                paintOrder = length &gt; 1 ? PaintOrderMarkersStroke : PaintOrderMarkers;
+                break;
+            default:
+                ASSERT_NOT_REACHED();
+                paintOrder = PaintOrderNormal;
+            }
+            svgStyle.setPaintOrder(static_cast&lt;PaintOrder&gt;(paintOrder));
+            break;
+        }
</ins><span class="cx">         case CSSPropertyFillRule:
</span><span class="cx">         {
</span><span class="cx">             HANDLE_INHERIT_AND_INITIAL(fillRule, FillRule)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleSVGRenderStylecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/SVGRenderStyle.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/SVGRenderStyle.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/rendering/style/SVGRenderStyle.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -143,6 +143,46 @@
</span><span class="cx">     resources = other-&gt;resources;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Vector&lt;PaintType&gt; SVGRenderStyle::paintTypesForPaintOrder() const
+{
+    Vector&lt;PaintType, 3&gt; paintOrder;
+    switch (this-&gt;paintOrder()) {
+    case PaintOrderNormal:
+        FALLTHROUGH;
+    case PaintOrderFill:
+        paintOrder.append(PaintTypeFill);
+        paintOrder.append(PaintTypeStroke);
+        paintOrder.append(PaintTypeMarkers);
+        break;
+    case PaintOrderFillMarkers:
+        paintOrder.append(PaintTypeFill);
+        paintOrder.append(PaintTypeMarkers);
+        paintOrder.append(PaintTypeStroke);
+        break;
+    case PaintOrderStroke:
+        paintOrder.append(PaintTypeStroke);
+        paintOrder.append(PaintTypeFill);
+        paintOrder.append(PaintTypeMarkers);
+        break;
+    case PaintOrderStrokeMarkers:
+        paintOrder.append(PaintTypeStroke);
+        paintOrder.append(PaintTypeMarkers);
+        paintOrder.append(PaintTypeFill);
+        break;
+    case PaintOrderMarkers:
+        paintOrder.append(PaintTypeMarkers);
+        paintOrder.append(PaintTypeFill);
+        paintOrder.append(PaintTypeStroke);
+        break;
+    case PaintOrderMarkersStroke:
+        paintOrder.append(PaintTypeMarkers);
+        paintOrder.append(PaintTypeStroke);
+        paintOrder.append(PaintTypeFill);
+        break;
+    };
+    return paintOrder;
+}
+
</ins><span class="cx"> StyleDifference SVGRenderStyle::diff(const SVGRenderStyle* other) const
</span><span class="cx"> {
</span><span class="cx">     // NOTE: All comparisions that may return StyleDifferenceLayout have to go before those who return StyleDifferenceRepaint
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleSVGRenderStyleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/SVGRenderStyle.h (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/SVGRenderStyle.h        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/rendering/style/SVGRenderStyle.h        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -95,6 +95,7 @@
</span><span class="cx">     static String initialMarkerMidResource() { return String(); }
</span><span class="cx">     static String initialMarkerEndResource() { return String(); }
</span><span class="cx">     static EMaskType initialMaskType() { return MT_LUMINANCE; }
</span><ins>+    static PaintOrder initialPaintOrder() { return PaintOrderNormal; }
</ins><span class="cx"> 
</span><span class="cx">     static SVGLength initialBaselineShiftValue()
</span><span class="cx">     {
</span><span class="lines">@@ -143,6 +144,7 @@
</span><span class="cx">     void setGlyphOrientationHorizontal(EGlyphOrientation val) { svg_inherited_flags._glyphOrientationHorizontal = val; }
</span><span class="cx">     void setGlyphOrientationVertical(EGlyphOrientation val) { svg_inherited_flags._glyphOrientationVertical = val; }
</span><span class="cx">     void setMaskType(EMaskType val) { svg_noninherited_flags.f.maskType = val; }
</span><ins>+    void setPaintOrder(PaintOrder val) { svg_inherited_flags.paintOrder = val; }
</ins><span class="cx"> 
</span><span class="cx">     void setFillOpacity(float obj)
</span><span class="cx">     {
</span><span class="lines">@@ -347,6 +349,8 @@
</span><span class="cx">     String markerMidResource() const { return inheritedResources-&gt;markerMid; }
</span><span class="cx">     String markerEndResource() const { return inheritedResources-&gt;markerEnd; }
</span><span class="cx">     EMaskType maskType() const { return (EMaskType) svg_noninherited_flags.f.maskType; }
</span><ins>+    PaintOrder paintOrder() const { return (PaintOrder) svg_inherited_flags.paintOrder; }
+    Vector&lt;PaintType&gt; paintTypesForPaintOrder() const;
</ins><span class="cx"> 
</span><span class="cx">     const SVGPaint::SVGPaintType&amp; visitedLinkFillPaintType() const { return fill-&gt;visitedLinkPaintType; }
</span><span class="cx">     const Color&amp; visitedLinkFillPaintColor() const { return fill-&gt;visitedLinkPaintColor; }
</span><span class="lines">@@ -382,7 +386,8 @@
</span><span class="cx">                 &amp;&amp; (_colorInterpolationFilters == other._colorInterpolationFilters)
</span><span class="cx">                 &amp;&amp; (_writingMode == other._writingMode)
</span><span class="cx">                 &amp;&amp; (_glyphOrientationHorizontal == other._glyphOrientationHorizontal)
</span><del>-                &amp;&amp; (_glyphOrientationVertical == other._glyphOrientationVertical);
</del><ins>+                &amp;&amp; (_glyphOrientationVertical == other._glyphOrientationVertical)
+                &amp;&amp; (paintOrder == other.paintOrder);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         bool operator!=(const InheritedFlags&amp; other) const
</span><span class="lines">@@ -402,6 +407,7 @@
</span><span class="cx">         unsigned _writingMode : 3; // SVGWritingMode
</span><span class="cx">         unsigned _glyphOrientationHorizontal : 3; // EGlyphOrientation
</span><span class="cx">         unsigned _glyphOrientationVertical : 3; // EGlyphOrientation
</span><ins>+        unsigned paintOrder : 3; // PaintOrder
</ins><span class="cx">     } svg_inherited_flags;
</span><span class="cx"> 
</span><span class="cx">     // don't inherit
</span><span class="lines">@@ -457,6 +463,7 @@
</span><span class="cx">         svg_inherited_flags._writingMode = initialWritingMode();
</span><span class="cx">         svg_inherited_flags._glyphOrientationHorizontal = initialGlyphOrientationHorizontal();
</span><span class="cx">         svg_inherited_flags._glyphOrientationVertical = initialGlyphOrientationVertical();
</span><ins>+        svg_inherited_flags.paintOrder = initialPaintOrder();
</ins><span class="cx"> 
</span><span class="cx">         svg_noninherited_flags._niflags = 0;
</span><span class="cx">         svg_noninherited_flags.f._alignmentBaseline = initialAlignmentBaseline();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleSVGRenderStyleDefsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/rendering/style/SVGRenderStyleDefs.h        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -91,6 +91,23 @@
</span><span class="cx">         MT_ALPHA
</span><span class="cx">     };
</span><span class="cx"> 
</span><ins>+    // These are all minimized combinations of paint-order.
+    enum PaintOrder {
+        PaintOrderNormal = 0,
+        PaintOrderFill = 1,
+        PaintOrderFillMarkers = 2,
+        PaintOrderStroke = 3,
+        PaintOrderStrokeMarkers = 4,
+        PaintOrderMarkers = 5,
+        PaintOrderMarkersStroke = 6
+    };
+
+    enum PaintType {
+        PaintTypeFill,
+        PaintTypeStroke,
+        PaintTypeMarkers
+    };
+
</ins><span class="cx">     class CSSValue;
</span><span class="cx">     class CSSValueList;
</span><span class="cx">     class SVGPaint;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGShapecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGShape.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -256,24 +256,39 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderSVGShape::fillAndStrokeShape(GraphicsContext* context)
</del><ins>+void RenderSVGShape::strokeShape(GraphicsContext* context)
</ins><span class="cx"> {
</span><del>-    fillShape(style(), context);
-
</del><span class="cx">     if (!style().svgStyle().hasVisibleStroke())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     GraphicsContextStateSaver stateSaver(*context, false);
</span><del>-
</del><span class="cx">     if (hasNonScalingStroke()) {
</span><span class="cx">         AffineTransform nonScalingTransform = nonScalingStrokeTransform();
</span><span class="cx">         if (!setupNonScalingStrokeContext(nonScalingTransform, stateSaver))
</span><span class="cx">             return;
</span><span class="cx">     }
</span><del>-
</del><span class="cx">     strokeShape(style(), context);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderSVGShape::fillStrokeMarkers(PaintInfo&amp; childPaintInfo)
+{
+    Vector&lt;PaintType&gt; paintOrder = style().svgStyle().paintTypesForPaintOrder();
+    for (unsigned i = 0; i &lt; paintOrder.size(); ++i) {
+        switch (paintOrder.at(i)) {
+        case PaintTypeFill:
+            fillShape(style(), childPaintInfo.context);
+            break;
+        case PaintTypeStroke:
+            strokeShape(childPaintInfo.context);
+            break;
+        case PaintTypeMarkers:
+            if (!m_markerPositions.isEmpty())
+                drawMarkers(childPaintInfo);
+            break;
+        }
+    }
+}
+
</ins><span class="cx"> void RenderSVGShape::paint(PaintInfo&amp; paintInfo, const LayoutPoint&amp;)
</span><span class="cx"> {
</span><span class="cx">     if (paintInfo.context-&gt;paintingDisabled() || style().visibility() == HIDDEN || isEmpty())
</span><span class="lines">@@ -296,9 +311,7 @@
</span><span class="cx">                 if (svgStyle.shapeRendering() == SR_CRISPEDGES)
</span><span class="cx">                     childPaintInfo.context-&gt;setShouldAntialias(false);
</span><span class="cx"> 
</span><del>-                fillAndStrokeShape(childPaintInfo.context);
-                if (!m_markerPositions.isEmpty())
-                    drawMarkers(childPaintInfo);
</del><ins>+                fillStrokeMarkers(childPaintInfo);
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgRenderSVGShapeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/RenderSVGShape.h (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/RenderSVGShape.h        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGShape.h        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -116,7 +116,8 @@
</span><span class="cx"> 
</span><span class="cx">     void fillShape(const RenderStyle&amp;, GraphicsContext*);
</span><span class="cx">     void strokeShape(const RenderStyle&amp;, GraphicsContext*);
</span><del>-    void fillAndStrokeShape(GraphicsContext*);
</del><ins>+    void strokeShape(GraphicsContext*);
+    void fillStrokeMarkers(PaintInfo&amp;);
</ins><span class="cx">     void drawMarkers(PaintInfo&amp;);
</span><span class="cx"> 
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGInlineTextBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/rendering/svg/SVGInlineTextBox.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -295,18 +295,26 @@
</span><span class="cx">         if (decorations &amp; TextDecorationOverline)
</span><span class="cx">             paintDecoration(paintInfo.context, TextDecorationOverline, fragment);
</span><span class="cx"> 
</span><del>-        // Fill text
-        if (hasFill) {
-            m_paintingResourceMode = ApplyToFillMode | ApplyToTextMode;
-            paintText(paintInfo.context, &amp;style, selectionStyle, fragment, hasSelection, paintSelectedTextOnly);
</del><ins>+        Vector&lt;PaintType&gt; paintOrder = style.svgStyle().paintTypesForPaintOrder();
+        for (unsigned i = 0; i &lt; paintOrder.size(); ++i) {
+            switch (paintOrder.at(i)) {
+            case PaintTypeFill:
+                if (!hasFill)
+                    continue;
+                m_paintingResourceMode = ApplyToFillMode | ApplyToTextMode;
+                paintText(paintInfo.context, &amp;style, selectionStyle, fragment, hasSelection, paintSelectedTextOnly);
+                break;
+            case PaintTypeStroke:
+                if (!hasVisibleStroke)
+                    continue;
+                m_paintingResourceMode = ApplyToStrokeMode | ApplyToTextMode;
+                paintText(paintInfo.context, &amp;style, selectionStyle, fragment, hasSelection, paintSelectedTextOnly);
+                break;
+            case PaintTypeMarkers:
+                continue;
+            }
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        // Stroke text
-        if (hasVisibleStroke) {
-            m_paintingResourceMode = ApplyToStrokeMode | ApplyToTextMode;
-            paintText(paintInfo.context, &amp;style, selectionStyle, fragment, hasSelection, paintSelectedTextOnly);
-        }
-
</del><span class="cx">         // Spec: Line-through should be drawn after the text is filled and stroked; thus, the line-through is rendered on top of the text.
</span><span class="cx">         if (decorations &amp; TextDecorationLineThrough)
</span><span class="cx">             paintDecoration(paintInfo.context, TextDecorationLineThrough, fragment);
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGElement.cpp (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGElement.cpp        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/svg/SVGElement.cpp        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -118,6 +118,7 @@
</span><span class="cx">         &amp;mask_typeAttr,
</span><span class="cx">         &amp;opacityAttr,
</span><span class="cx">         &amp;overflowAttr,
</span><ins>+        &amp;paint_orderAttr,
</ins><span class="cx">         &amp;pointer_eventsAttr,
</span><span class="cx">         &amp;shape_renderingAttr,
</span><span class="cx">         &amp;stop_colorAttr,
</span><span class="lines">@@ -195,6 +196,7 @@
</span><span class="cx">         { mask_typeAttr, AnimatedString },
</span><span class="cx">         { opacityAttr, AnimatedNumber },
</span><span class="cx">         { overflowAttr, AnimatedString },
</span><ins>+        { paint_orderAttr, AnimatedString },
</ins><span class="cx">         { pointer_eventsAttr, AnimatedString },
</span><span class="cx">         { shape_renderingAttr, AnimatedString },
</span><span class="cx">         { stop_colorAttr, AnimatedColor },
</span></span></pre></div>
<a id="trunkSourceWebCoresvgsvgattrsin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/svgattrs.in (165594 => 165595)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/svgattrs.in        2014-03-14 02:23:33 UTC (rev 165594)
+++ trunk/Source/WebCore/svg/svgattrs.in        2014-03-14 02:25:41 UTC (rev 165595)
</span><span class="lines">@@ -144,6 +144,7 @@
</span><span class="cx"> overflow
</span><span class="cx"> overline-position
</span><span class="cx"> overline-thickness
</span><ins>+paint-order
</ins><span class="cx"> panose-1
</span><span class="cx"> path
</span><span class="cx"> pathLength
</span></span></pre>
</div>
</div>

</body>
</html>