<!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 <krit@webkit.org>
+
+ [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 <dpino@igalia.com>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<rect x="50" y="50" width="100" height="100" fill="blue"/>
+<rect x="50" y="50" width="100" height="100" fill="none" stroke="green" stroke-width="20"/>
+<rect width="100" height="100" fill="yellow"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<rect x="50" y="50" width="100" height="100" fill="blue"/>
+<rect width="100" height="100" fill="yellow"/>
+<rect x="50" y="50" width="100" height="100" fill="none" stroke="green" stroke-width="20"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<marker id="marker1" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
+ <rect width="10" height="10" fill="yellow"/>
+</marker>
+<path d="M50,50 L150,50 L150,150 L50,150 z" marker-start="url(#marker1)" stroke="green" stroke-width="20" fill="blue" paint-order="fill markers"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<marker id="marker1" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
+ <rect width="10" height="10" fill="yellow"/>
+</marker>
+<path d="M50,50 L150,50 L150,150 L50,150 z" marker-start="url(#marker1)" stroke="green" stroke-width="20" fill="blue" paint-order="fill"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<rect width="100" height="100" fill="yellow"/>
+<rect x="50" y="50" width="100" height="100" fill="blue"/>
+<rect x="50" y="50" width="100" height="100" fill="none" stroke="green" stroke-width="20"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<rect width="100" height="100" fill="yellow"/>
+<rect x="50" y="50" width="100" height="100" fill="none" stroke="green" stroke-width="20"/>
+<rect x="50" y="50" width="100" height="100" fill="blue"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<marker id="marker1" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
+ <rect width="10" height="10" fill="yellow"/>
+</marker>
+<path d="M50,50 L150,50 L150,150 L50,150 z" marker-start="url(#marker1)" stroke="green" stroke-width="20" fill="blue" paint-order="markers stroke"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<marker id="marker1" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
+ <rect width="10" height="10" fill="yellow"/>
+</marker>
+<path d="M50,50 L150,50 L150,150 L50,150 z" marker-start="url(#marker1)" stroke="green" stroke-width="20" fill="blue" paint-order="markers"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<rect x="50" y="50" width="100" height="100" fill="blue"/>
+<rect x="50" y="50" width="100" height="100" fill="none" stroke="green" stroke-width="20"/>
+<rect width="100" height="100" fill="yellow"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<marker id="marker1" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
+ <rect width="10" height="10" fill="yellow"/>
+</marker>
+<path d="M50,50 L150,50 L150,150 L50,150 z" marker-start="url(#marker1)" stroke="green" stroke-width="20" fill="blue" paint-order="normal"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<rect x="50" y="50" width="100" height="100" fill="none" stroke="green" stroke-width="20"/>
+<rect x="50" y="50" width="100" height="100" fill="blue"/>
+<rect width="100" height="100" fill="yellow"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<rect x="50" y="50" width="100" height="100" fill="none" stroke="green" stroke-width="20"/>
+<rect width="100" height="100" fill="yellow"/>
+<rect x="50" y="50" width="100" height="100" fill="blue"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<marker id="marker1" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
+ <rect width="10" height="10" fill="yellow"/>
+</marker>
+<path d="M50,50 L150,50 L150,150 L50,150 z" marker-start="url(#marker1)" stroke="green" stroke-width="20" fill="blue" paint-order="stroke markers"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<marker id="marker1" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="5" markerHeight="5">
+ <rect width="10" height="10" fill="yellow"/>
+</marker>
+<path d="M50,50 L150,50 L150,150 L50,150 z" marker-start="url(#marker1)" stroke="green" stroke-width="20" fill="blue" paint-order="stroke"/>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text fill="blue" x="20" y="100" font-size="36" font-weight="bold">paint-order</text>
+<text stroke="green" stroke-width="3" fill="none" x="20" y="100" font-size="36" font-weight="bold">paint-order</text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="blue" x="20" y="100" font-size="36" font-weight="bold" paint-order="markers">paint-order</text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text fill="blue" x="20" y="100" font-size="36" font-weight="bold">paint-order</text>
+<text stroke="green" stroke-width="3" fill="none" x="20" y="100" font-size="36" font-weight="bold">paint-order</text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="blue" x="20" y="100" font-size="36" font-weight="bold" paint-order="normal">paint-order</text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="none" x="20" y="100" font-size="36" font-weight="bold">paint-order</text>
+<text fill="blue" x="20" y="100" font-size="36" font-weight="bold">paint-order</text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="blue" x="20" y="100" font-size="36" font-weight="bold" paint-order="stroke">paint-order</text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="blue" x="20" y="100" font-size="36" font-weight="bold">paint-<tspan fill="none">order</tspan></text>
+<text fill="none" x="20" y="100" font-size="36" font-weight="bold">paint-<tspan fill="blue">order</tspan></text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="blue" x="20" y="100" font-size="36" font-weight="bold">paint-<tspan paint-order="stroke">order</tspan></text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="none" x="20" y="100" font-size="36" font-weight="bold">paint-<tspan stroke="none" fill="blue">order</tspan></text>
+<text fill="blue" x="20" y="100" font-size="36" font-weight="bold">paint-<tspan fill="none" stroke="green" stroke-width="3">order</tspan></text>
+</svg>
</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>+<svg xmlns="http://www.w3.org/2000/svg">
+<text stroke="green" stroke-width="3" fill="blue" x="20" y="100" font-size="36" font-weight="bold" paint-order="stroke">paint-<tspan paint-order="fill">order</tspan></text>
+</svg>
</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 "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS innerStyle("paint-order", "normal") is "normal"
+PASS innerStyle("paint-order", "fill") is "fill"
+PASS innerStyle("paint-order", "stroke") is "stroke"
+PASS innerStyle("paint-order", "markers") is "markers"
+PASS innerStyle("paint-order", "fill stroke") is "fill"
+PASS innerStyle("paint-order", "fill stroke markers") is "fill"
+PASS innerStyle("paint-order", "fill markers") is "fill markers"
+PASS innerStyle("paint-order", "fill markers stroke") is "fill markers"
+PASS innerStyle("paint-order", "stroke fill") is "stroke"
+PASS innerStyle("paint-order", "stroke fill markers") is "stroke"
+PASS innerStyle("paint-order", "stroke markers") is "stroke markers"
+PASS innerStyle("paint-order", "stroke markers fill") is "stroke markers"
+PASS innerStyle("paint-order", "stroke fill") is "stroke"
+PASS innerStyle("paint-order", "stroke fill markers") is "stroke"
+PASS innerStyle("paint-order", "stroke markers") is "stroke markers"
+PASS innerStyle("paint-order", "stroke markers fill") is "stroke markers"
+PASS computedStyle("paint-order", "normal") is "normal"
+PASS computedStyle("paint-order", "fill") is "fill"
+PASS computedStyle("paint-order", "stroke") is "stroke"
+PASS computedStyle("paint-order", "markers") is "markers"
+PASS computedStyle("paint-order", "fill stroke") is "fill"
+PASS computedStyle("paint-order", "fill stroke markers") is "fill"
+PASS computedStyle("paint-order", "fill markers") is "fill markers"
+PASS computedStyle("paint-order", "fill markers stroke") is "fill markers"
+PASS computedStyle("paint-order", "stroke fill") is "stroke"
+PASS computedStyle("paint-order", "stroke fill markers") is "stroke"
+PASS computedStyle("paint-order", "stroke markers") is "stroke markers"
+PASS computedStyle("paint-order", "stroke markers fill") is "stroke markers"
+PASS computedStyle("paint-order", "stroke fill") is "stroke"
+PASS computedStyle("paint-order", "stroke fill markers") is "stroke"
+PASS computedStyle("paint-order", "stroke markers") is "stroke markers"
+PASS computedStyle("paint-order", "stroke markers fill") is "stroke markers"
+PASS innerStyle("paint-order", "normal fill") is null
+PASS computedStyle("paint-order", "normal fill") is "normal"
+PASS innerStyle("paint-order", "normal stroke") is null
+PASS computedStyle("paint-order", "normal stroke") is "normal"
+PASS innerStyle("paint-order", "normal markers") is null
+PASS computedStyle("paint-order", "normal markers") is "normal"
+PASS innerStyle("paint-order", "fill fill") is null
+PASS computedStyle("paint-order", "fill fill") is "normal"
+PASS innerStyle("paint-order", "stroke stroke") is null
+PASS computedStyle("paint-order", "stroke stroke") is "normal"
+PASS innerStyle("paint-order", "markers markers") is null
+PASS computedStyle("paint-order", "markers markers") is "normal"
+PASS innerStyle("paint-order", "markers fill markers") is null
+PASS computedStyle("paint-order", "markers fill markers") is "normal"
+PASS innerStyle("paint-order", "markers stroke markers") is null
+PASS computedStyle("paint-order", "markers stroke markers") is "normal"
+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>+<!DOCTYPE html>
+<html>
+<style>
+* { font-size: 16px; }
+div { font-size: 8px; }
+</style>
+<body>
+<script src="../../resources/js-test-pre.js"></script>
+<script>
+description('Test parsing, element style and computed style for paint-order property.');
+
+function computedStyle(property, value) {
+ var div = document.createElement("div");
+ 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("div");
+ div.style.setProperty(property, value);
+ return div.style.getPropertyValue(property);
+}
+
+function testComputed(property, value, expected) {
+ shouldBeEqualToString('computedStyle("' + property + '", "' + value + '")', expected);
+}
+
+function testInner(property, value, expected) {
+ if (expected === null)
+ shouldBeNull('innerStyle("' + property + '", "' + value + '")');
+ else
+ shouldBeEqualToString('innerStyle("' + property + '", "' + value + '")', expected);
+}
+
+function negativeTest(property, value) {
+ testInner(property, value, null);
+ testComputed(property, value, 'normal');
+}
+
+// Test element style.
+testInner("paint-order", "normal", "normal");
+testInner("paint-order", "fill", "fill");
+testInner("paint-order", "stroke", "stroke");
+testInner("paint-order", "markers", "markers");
+testInner("paint-order", "fill stroke", "fill");
+testInner("paint-order", "fill stroke markers", "fill");
+testInner("paint-order", "fill markers", "fill markers");
+testInner("paint-order", "fill markers stroke", "fill markers");
+testInner("paint-order", "stroke fill", "stroke");
+testInner("paint-order", "stroke fill markers", "stroke");
+testInner("paint-order", "stroke markers", "stroke markers");
+testInner("paint-order", "stroke markers fill", "stroke markers");
+testInner("paint-order", "stroke fill", "stroke");
+testInner("paint-order", "stroke fill markers", "stroke");
+testInner("paint-order", "stroke markers", "stroke markers");
+testInner("paint-order", "stroke markers fill", "stroke markers");
+
+// Test computed style.
+testComputed("paint-order", "normal", "normal");
+testComputed("paint-order", "fill", "fill");
+testComputed("paint-order", "stroke", "stroke");
+testComputed("paint-order", "markers", "markers");
+testComputed("paint-order", "fill stroke", "fill");
+testComputed("paint-order", "fill stroke markers", "fill");
+testComputed("paint-order", "fill markers", "fill markers");
+testComputed("paint-order", "fill markers stroke", "fill markers");
+testComputed("paint-order", "stroke fill", "stroke");
+testComputed("paint-order", "stroke fill markers", "stroke");
+testComputed("paint-order", "stroke markers", "stroke markers");
+testComputed("paint-order", "stroke markers fill", "stroke markers");
+testComputed("paint-order", "stroke fill", "stroke");
+testComputed("paint-order", "stroke fill markers", "stroke");
+testComputed("paint-order", "stroke markers", "stroke markers");
+testComputed("paint-order", "stroke markers fill", "stroke markers");
+
+// Negative tests.
+negativeTest("paint-order", "normal fill");
+negativeTest("paint-order", "normal stroke");
+negativeTest("paint-order", "normal markers");
+negativeTest("paint-order", "fill fill");
+negativeTest("paint-order", "stroke stroke");
+negativeTest("paint-order", "markers markers");
+negativeTest("paint-order", "markers fill markers");
+negativeTest("paint-order", "markers stroke markers");
+
+</script>
+<script src="../../resources/js-test-post.js"></script>
+</body>
+</html>
</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 <krit@webkit.org>
+
+ [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 <akling@apple.com>
</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<CSSValue> parseSVGPaint();
</span><span class="cx"> PassRefPtr<CSSValue> parseSVGColor();
</span><span class="cx"> PassRefPtr<CSSValue> parseSVGStrokeDasharray();
</span><ins>+ PassRefPtr<CSSValue> parsePaintOrder();
</ins><span class="cx">
</span><span class="cx"> // CSS3 Parsing Routines (for properties specific to CSS3)
</span><span class="cx"> PassRefPtr<CSSValueList> 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<CSSValue> paintOrder(PaintOrder paintOrder)
+{
+ RefPtr<CSSValueList> paintOrderList = CSSValueList::createSpaceSeparated();
+ RefPtr<CSSValue> fill = CSSPrimitiveValue::createIdentifier(CSSValueFill);
+ RefPtr<CSSValue> stroke = CSSPrimitiveValue::createIdentifier(CSSValueStroke);
+ RefPtr<CSSValue> markers = CSSPrimitiveValue::createIdentifier(CSSValueMarkers);
+
+ switch (paintOrder) {
+ case PaintOrderNormal:
+ return CSSPrimitiveValue::createIdentifier(CSSValueNormal);
+ case PaintOrderFill:
+ paintOrderList->append(fill.release());
+ break;
+ case PaintOrderFillMarkers:
+ paintOrderList->append(fill.release());
+ paintOrderList->append(markers.release());
+ break;
+ case PaintOrderStroke:
+ paintOrderList->append(stroke.release());
+ break;
+ case PaintOrderStrokeMarkers:
+ paintOrderList->append(stroke.release());
+ paintOrderList->append(markers.release());
+ break;
+ case PaintOrderMarkers:
+ paintOrderList->append(markers.release());
+ break;
+ case PaintOrderMarkersStroke:
+ paintOrderList->append(markers.release());
+ paintOrderList->append(stroke.release());
+ break;
+ }
+ return paintOrderList.release();
+}
+
</ins><span class="cx"> static PassRefPtr<CSSPrimitiveValue> 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->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: // <paint> | inherit
</span><span class="cx"> case CSSPropertyStroke: // <paint> | 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<CSSValue> CSSParser::parsePaintOrder()
+{
+ CSSParserValue* value = m_valueList->current();
+
+ Vector<CSSValueID> paintTypeList;
+ RefPtr<CSSPrimitiveValue> fill;
+ RefPtr<CSSPrimitiveValue> stroke;
+ RefPtr<CSSPrimitiveValue> markers;
+ while (value) {
+ if (value->id == CSSValueFill && !fill)
+ fill = CSSPrimitiveValue::createIdentifier(value->id);
+ else if (value->id == CSSValueStroke && !stroke)
+ stroke = CSSPrimitiveValue::createIdentifier(value->id);
+ else if (value->id == CSSValueMarkers && !markers)
+ markers = CSSPrimitiveValue::createIdentifier(value->id);
+ else
+ return nullptr;
+ paintTypeList.append(value->id);
+ value = m_valueList->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<CSSValueList> paintOrderList = CSSValueList::createSpaceSeparated();
+ switch (firstPaintOrderType) {
+ case CSSValueFill:
+ FALLTHROUGH;
+ case CSSValueStroke:
+ paintOrderList->append(firstPaintOrderType == CSSValueFill ? fill.release() : stroke.release());
+ if (paintTypeList.size() > 1) {
+ if (paintTypeList.at(1) == CSSValueMarkers)
+ paintOrderList->append(markers.release());
+ }
+ break;
+ case CSSValueMarkers:
+ paintOrderList->append(markers.release());
+ if (paintTypeList.size() > 1) {
+ if (paintTypeList.at(1) == CSSValueStroke)
+ paintOrderList->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->isValueList())
+ break;
+ CSSValueList* orderTypeList = toCSSValueList(value);
+
+ // Serialization happened during parsing. No additional checking needed.
+ unsigned length = orderTypeList->length();
+ primitiveValue = toCSSPrimitiveValue(orderTypeList->itemWithoutBoundsCheck(0));
+ PaintOrder paintOrder;
+ switch (primitiveValue->getValueID()) {
+ case CSSValueFill:
+ paintOrder = length > 1 ? PaintOrderFillMarkers : PaintOrderFill;
+ break;
+ case CSSValueStroke:
+ paintOrder = length > 1 ? PaintOrderStrokeMarkers : PaintOrderStroke;
+ break;
+ case CSSValueMarkers:
+ paintOrder = length > 1 ? PaintOrderMarkersStroke : PaintOrderMarkers;
+ break;
+ default:
+ ASSERT_NOT_REACHED();
+ paintOrder = PaintOrderNormal;
+ }
+ svgStyle.setPaintOrder(static_cast<PaintOrder>(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->resources;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+Vector<PaintType> SVGRenderStyle::paintTypesForPaintOrder() const
+{
+ Vector<PaintType, 3> paintOrder;
+ switch (this->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->markerMid; }
</span><span class="cx"> String markerEndResource() const { return inheritedResources->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<PaintType> paintTypesForPaintOrder() const;
</ins><span class="cx">
</span><span class="cx"> const SVGPaint::SVGPaintType& visitedLinkFillPaintType() const { return fill->visitedLinkPaintType; }
</span><span class="cx"> const Color& visitedLinkFillPaintColor() const { return fill->visitedLinkPaintColor; }
</span><span class="lines">@@ -382,7 +386,8 @@
</span><span class="cx"> && (_colorInterpolationFilters == other._colorInterpolationFilters)
</span><span class="cx"> && (_writingMode == other._writingMode)
</span><span class="cx"> && (_glyphOrientationHorizontal == other._glyphOrientationHorizontal)
</span><del>- && (_glyphOrientationVertical == other._glyphOrientationVertical);
</del><ins>+ && (_glyphOrientationVertical == other._glyphOrientationVertical)
+ && (paintOrder == other.paintOrder);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool operator!=(const InheritedFlags& 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& childPaintInfo)
+{
+ Vector<PaintType> paintOrder = style().svgStyle().paintTypesForPaintOrder();
+ for (unsigned i = 0; i < 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& paintInfo, const LayoutPoint&)
</span><span class="cx"> {
</span><span class="cx"> if (paintInfo.context->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->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&, GraphicsContext*);
</span><span class="cx"> void strokeShape(const RenderStyle&, GraphicsContext*);
</span><del>- void fillAndStrokeShape(GraphicsContext*);
</del><ins>+ void strokeShape(GraphicsContext*);
+ void fillStrokeMarkers(PaintInfo&);
</ins><span class="cx"> void drawMarkers(PaintInfo&);
</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 & 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, &style, selectionStyle, fragment, hasSelection, paintSelectedTextOnly);
</del><ins>+ Vector<PaintType> paintOrder = style.svgStyle().paintTypesForPaintOrder();
+ for (unsigned i = 0; i < paintOrder.size(); ++i) {
+ switch (paintOrder.at(i)) {
+ case PaintTypeFill:
+ if (!hasFill)
+ continue;
+ m_paintingResourceMode = ApplyToFillMode | ApplyToTextMode;
+ paintText(paintInfo.context, &style, selectionStyle, fragment, hasSelection, paintSelectedTextOnly);
+ break;
+ case PaintTypeStroke:
+ if (!hasVisibleStroke)
+ continue;
+ m_paintingResourceMode = ApplyToStrokeMode | ApplyToTextMode;
+ paintText(paintInfo.context, &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, &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 & 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"> &mask_typeAttr,
</span><span class="cx"> &opacityAttr,
</span><span class="cx"> &overflowAttr,
</span><ins>+ &paint_orderAttr,
</ins><span class="cx"> &pointer_eventsAttr,
</span><span class="cx"> &shape_renderingAttr,
</span><span class="cx"> &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>