<!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>[168404] trunk/Source/WebCore</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/168404">168404</a></dd>
<dt>Author</dt> <dd>dino@apple.com</dd>
<dt>Date</dt> <dd>2014-05-06 19:58:39 -0700 (Tue, 06 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Clean up the difference between painting focus rings and adding PDF annotations
https://bugs.webkit.org/show_bug.cgi?id=132638

Reviewed by Simon Fraser.

The code to add a PDF annotation when printing was called from
drawFocusRing, which is quite confusing. With just little movement
of code, we can detect an annotation and call addPDFURLRect in the
paint phase, and drawFocusRing becomes something that only
draws focus rings.

* rendering/RenderInline.cpp:
(WebCore::RenderInline::paintOutline): Split calls to drawFocusRing
and addPDFURLRect.
* rendering/RenderObject.cpp:
(WebCore::RenderObject::paintFocusRing): Get rid of call to PDF.
(WebCore::RenderObject::addPDFURLRect): Change the signature so it
can be called externally, and calculates the rectangle itself.
(WebCore::RenderObject::paintOutline): Split the calls.
* rendering/RenderObject.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderInlinecpp">trunk/Source/WebCore/rendering/RenderInline.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjectcpp">trunk/Source/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjecth">trunk/Source/WebCore/rendering/RenderObject.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (168403 => 168404)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-07 02:36:24 UTC (rev 168403)
+++ trunk/Source/WebCore/ChangeLog        2014-05-07 02:58:39 UTC (rev 168404)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2014-05-06  Dean Jackson  &lt;dino@apple.com&gt;
+
+        Clean up the difference between painting focus rings and adding PDF annotations
+        https://bugs.webkit.org/show_bug.cgi?id=132638
+
+        Reviewed by Simon Fraser.
+
+        The code to add a PDF annotation when printing was called from
+        drawFocusRing, which is quite confusing. With just little movement
+        of code, we can detect an annotation and call addPDFURLRect in the
+        paint phase, and drawFocusRing becomes something that only
+        draws focus rings.
+
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::paintOutline): Split calls to drawFocusRing
+        and addPDFURLRect.
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::paintFocusRing): Get rid of call to PDF.
+        (WebCore::RenderObject::addPDFURLRect): Change the signature so it
+        can be called externally, and calculates the rectangle itself.
+        (WebCore::RenderObject::paintOutline): Split the calls.
+        * rendering/RenderObject.h:
+
</ins><span class="cx"> 2014-05-06  Rik Cabanier  &lt;cabanier@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Calling createPattern with a broken image must throw an invalidstate error
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderInlinecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (168403 => 168404)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderInline.cpp        2014-05-07 02:36:24 UTC (rev 168403)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp        2014-05-07 02:58:39 UTC (rev 168404)
</span><span class="lines">@@ -1492,12 +1492,11 @@
</span><span class="cx">         return;
</span><span class="cx">     
</span><span class="cx">     RenderStyle&amp; styleToUse = style();
</span><del>-    if (styleToUse.outlineStyleIsAuto() || hasOutlineAnnotation()) {
-        if (!theme().supportsFocusRing(&amp;styleToUse)) {
-            // Only paint the focus ring by hand if the theme isn't able to draw the focus ring.
-            paintFocusRing(paintInfo, paintOffset, &amp;styleToUse);
-        }
-    }
</del><ins>+    // Only paint the focus ring by hand if the theme isn't able to draw it.
+    if (styleToUse.outlineStyleIsAuto() &amp;&amp; !theme().supportsFocusRing(&amp;styleToUse))
+        paintFocusRing(paintInfo, paintOffset, &amp;styleToUse);
+    else if (hasOutlineAnnotation() &amp;&amp; !theme().supportsFocusRing(&amp;styleToUse))
+        addPDFURLRect(paintInfo, paintOffset);
</ins><span class="cx"> 
</span><span class="cx">     GraphicsContext* graphicsContext = paintInfo.context;
</span><span class="cx">     if (graphicsContext-&gt;paintingDisabled())
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (168403 => 168404)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.cpp        2014-05-07 02:36:24 UTC (rev 168403)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp        2014-05-07 02:58:39 UTC (rev 168404)
</span><span class="lines">@@ -999,9 +999,9 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderObject::paintFocusRing(PaintInfo&amp; paintInfo, const LayoutPoint&amp; paintOffset, RenderStyle* style)
</span><span class="cx"> {
</span><del>-    Vector&lt;IntRect&gt; focusRingRects;
-    addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer);
</del><span class="cx">     if (style-&gt;outlineStyleIsAuto()) {
</span><ins>+        Vector&lt;IntRect&gt; focusRingRects;
+        addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer);
</ins><span class="cx"> #if PLATFORM(MAC)
</span><span class="cx">         bool needsRepaint;
</span><span class="cx">         paintInfo.context-&gt;drawFocusRing(focusRingRects, style-&gt;outlineWidth(), style-&gt;outlineOffset(), document().page()-&gt;focusController().timeSinceFocusWasSet(), needsRepaint);
</span><span class="lines">@@ -1010,12 +1010,15 @@
</span><span class="cx"> #else
</span><span class="cx">         paintInfo.context-&gt;drawFocusRing(focusRingRects, style-&gt;outlineWidth(), style-&gt;outlineOffset(), style-&gt;visitedDependentColor(CSSPropertyOutlineColor));
</span><span class="cx"> #endif
</span><del>-    } else
-        addPDFURLRect(paintInfo.context, unionRect(focusRingRects));
</del><ins>+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderObject::addPDFURLRect(GraphicsContext* context, const LayoutRect&amp; rect)
</del><ins>+void RenderObject::addPDFURLRect(PaintInfo&amp; paintInfo, const LayoutPoint&amp; paintOffset)
</ins><span class="cx"> {
</span><ins>+    Vector&lt;IntRect&gt; focusRingRects;
+    addFocusRingRects(focusRingRects, paintOffset, paintInfo.paintContainer);
+    IntRect rect = unionRect(focusRingRects);
+
</ins><span class="cx">     if (rect.isEmpty())
</span><span class="cx">         return;
</span><span class="cx">     Node* n = node();
</span><span class="lines">@@ -1024,7 +1027,7 @@
</span><span class="cx">     const AtomicString&amp; href = toElement(n)-&gt;getAttribute(hrefAttr);
</span><span class="cx">     if (href.isNull())
</span><span class="cx">         return;
</span><del>-    context-&gt;setURLForRect(n-&gt;document().completeURL(href), pixelSnappedIntRect(rect));
</del><ins>+    paintInfo.context-&gt;setURLForRect(n-&gt;document().completeURL(href), pixelSnappedIntRect(rect));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderObject::paintOutline(PaintInfo&amp; paintInfo, const LayoutRect&amp; paintRect)
</span><span class="lines">@@ -1037,12 +1040,11 @@
</span><span class="cx"> 
</span><span class="cx">     int outlineOffset = styleToUse.outlineOffset();
</span><span class="cx"> 
</span><del>-    if (styleToUse.outlineStyleIsAuto() || hasOutlineAnnotation()) {
-        if (!theme().supportsFocusRing(&amp;styleToUse)) {
-            // Only paint the focus ring by hand if the theme isn't able to draw the focus ring.
-            paintFocusRing(paintInfo, paintRect.location(), &amp;styleToUse);
-        }
-    }
</del><ins>+    // Only paint the focus ring by hand if the theme isn't able to draw it.
+    if (styleToUse.outlineStyleIsAuto() &amp;&amp; !theme().supportsFocusRing(&amp;styleToUse))
+        paintFocusRing(paintInfo, paintRect.location(), &amp;styleToUse);
+    else if (hasOutlineAnnotation() &amp;&amp; !theme().supportsFocusRing(&amp;styleToUse))
+        addPDFURLRect(paintInfo, paintRect.location());
</ins><span class="cx"> 
</span><span class="cx">     if (styleToUse.outlineStyleIsAuto() || styleToUse.outlineStyle() == BNONE)
</span><span class="cx">         return;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.h (168403 => 168404)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.h        2014-05-07 02:36:24 UTC (rev 168403)
+++ trunk/Source/WebCore/rendering/RenderObject.h        2014-05-07 02:58:39 UTC (rev 168404)
</span><span class="lines">@@ -871,7 +871,7 @@
</span><span class="cx"> protected:
</span><span class="cx">     void paintFocusRing(PaintInfo&amp;, const LayoutPoint&amp;, RenderStyle*);
</span><span class="cx">     void paintOutline(PaintInfo&amp;, const LayoutRect&amp;);
</span><del>-    void addPDFURLRect(GraphicsContext*, const LayoutRect&amp;);
</del><ins>+    void addPDFURLRect(PaintInfo&amp;, const LayoutPoint&amp;);
</ins><span class="cx">     Node&amp; nodeForNonAnonymous() const { ASSERT(!isAnonymous()); return m_node; }
</span><span class="cx"> 
</span><span class="cx">     void adjustRectForOutlineAndShadow(LayoutRect&amp;) const;
</span></span></pre>
</div>
</div>

</body>
</html>