<!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>[200582] 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/200582">200582</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2016-05-09 11:05:20 -0700 (Mon, 09 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Download progress on attachment elements sometimes exceeds element bounds
https://bugs.webkit.org/show_bug.cgi?id=157440
&lt;rdar://problem/25245440&gt;

Reviewed by Darin Adler.

In the case of very large dynamic type sizes, we can overflow the
bounds of the attachment. It turns out that we used to limit to one
line in many cases anyway, so only wrap if we have only a title and/or icon.
This looks better when you have many of the other elements even in
non-large-type modes.

* rendering/RenderThemeIOS.mm:
(WebCore::AttachmentInfo::buildTitleLines):
(WebCore::AttachmentInfo::AttachmentInfo):
Limit the title to a single line if we have anything
other than a title and icon.

(WebCore::attachmentBorderPath):
(WebCore::paintAttachmentBorder):
(WebCore::RenderThemeIOS::paintAttachment):
Clip to the border, so that even if somehow we paint outside of
the bounds, we don't paint over other parts of the page.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeIOSmm">trunk/Source/WebCore/rendering/RenderThemeIOS.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200581 => 200582)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-09 17:48:49 UTC (rev 200581)
+++ trunk/Source/WebCore/ChangeLog        2016-05-09 18:05:20 UTC (rev 200582)
</span><span class="lines">@@ -1,3 +1,29 @@
</span><ins>+2016-05-09  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        Download progress on attachment elements sometimes exceeds element bounds
+        https://bugs.webkit.org/show_bug.cgi?id=157440
+        &lt;rdar://problem/25245440&gt;
+
+        Reviewed by Darin Adler.
+
+        In the case of very large dynamic type sizes, we can overflow the
+        bounds of the attachment. It turns out that we used to limit to one
+        line in many cases anyway, so only wrap if we have only a title and/or icon.
+        This looks better when you have many of the other elements even in
+        non-large-type modes.
+
+        * rendering/RenderThemeIOS.mm:
+        (WebCore::AttachmentInfo::buildTitleLines):
+        (WebCore::AttachmentInfo::AttachmentInfo):
+        Limit the title to a single line if we have anything
+        other than a title and icon.
+
+        (WebCore::attachmentBorderPath):
+        (WebCore::paintAttachmentBorder):
+        (WebCore::RenderThemeIOS::paintAttachment):
+        Clip to the border, so that even if somehow we paint outside of
+        the bounds, we don't paint over other parts of the page.
+
</ins><span class="cx"> 2016-05-09  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (198056): Unable to use edit buttons on WordPress
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeIOS.mm (200581 => 200582)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeIOS.mm        2016-05-09 17:48:49 UTC (rev 200581)
+++ trunk/Source/WebCore/rendering/RenderThemeIOS.mm        2016-05-09 18:05:20 UTC (rev 200582)
</span><span class="lines">@@ -1397,7 +1397,7 @@
</span><span class="cx">     CGFloat contentYOrigin { 0 };
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    void buildTitleLines(const RenderAttachment&amp;);
</del><ins>+    void buildTitleLines(const RenderAttachment&amp;, unsigned maximumLineCount);
</ins><span class="cx">     void buildSingleLine(const String&amp;, CTFontRef, UIColor *);
</span><span class="cx"> 
</span><span class="cx">     void addLine(CTLineRef);
</span><span class="lines">@@ -1418,7 +1418,7 @@
</span><span class="cx">     lines.append(labelLine);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void AttachmentInfo::buildTitleLines(const RenderAttachment&amp; attachment)
</del><ins>+void AttachmentInfo::buildTitleLines(const RenderAttachment&amp; attachment, unsigned maximumLineCount)
</ins><span class="cx"> {
</span><span class="cx">     RetainPtr&lt;CTFontRef&gt; font = attachmentTitleFont();
</span><span class="cx"> 
</span><span class="lines">@@ -1444,17 +1444,16 @@
</span><span class="cx">     if (!lineCount)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // Lay out and record the first (attachmentTitleMaximumLineCount - 1) lines.
</del><ins>+    // Lay out and record the first (maximumLineCount - 1) lines.
</ins><span class="cx">     CFIndex lineIndex = 0;
</span><del>-    for (; lineIndex &lt; std::min(attachmentTitleMaximumLineCount - 1, lineCount); ++lineIndex) {
-        CTLineRef line = (CTLineRef)CFArrayGetValueAtIndex(ctLines, lineIndex);
-        addLine(line);
-    }
</del><ins>+    CFIndex nonTruncatedLineCount = std::min&lt;CFIndex&gt;(maximumLineCount - 1, lineCount);
+    for (; lineIndex &lt; nonTruncatedLineCount; ++lineIndex)
+        addLine((CTLineRef)CFArrayGetValueAtIndex(ctLines, lineIndex));
</ins><span class="cx"> 
</span><span class="cx">     if (lineIndex == lineCount)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    // We had text that didn't fit in the first (attachmentTitleMaximumLineCount - 1) lines.
</del><ins>+    // We had text that didn't fit in the first (maximumLineCount - 1) lines.
</ins><span class="cx">     // Combine it into one last line, and center-truncate it.
</span><span class="cx">     CTLineRef firstRemainingLine = (CTLineRef)CFArrayGetValueAtIndex(ctLines, lineIndex);
</span><span class="cx">     CFIndex remainingRangeStart = CTLineGetStringRange(firstRemainingLine).location;
</span><span class="lines">@@ -1573,7 +1572,8 @@
</span><span class="cx">     } else
</span><span class="cx">         buildSingleLine(action, attachmentActionFont().get(), attachmentActionColor(attachment));
</span><span class="cx"> 
</span><del>-    buildTitleLines(attachment);
</del><ins>+    bool forceSingleLineTitle = !action.isEmpty() || !subtitle.isEmpty() || hasProgress;
+    buildTitleLines(attachment, forceSingleLineTitle ? 1 : attachmentTitleMaximumLineCount);
</ins><span class="cx">     buildSingleLine(subtitle, attachmentSubtitleFont().get(), attachmentSubtitleColor());
</span><span class="cx"> 
</span><span class="cx">     if (!lines.isEmpty()) {
</span><span class="lines">@@ -1643,10 +1643,15 @@
</span><span class="cx">     context.fillPath(progressPath);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static void paintAttachmentBorder(GraphicsContext&amp; context, AttachmentInfo&amp; info)
</del><ins>+static Path attachmentBorderPath(AttachmentInfo&amp; info)
</ins><span class="cx"> {
</span><span class="cx">     Path borderPath;
</span><span class="cx">     borderPath.addRoundedRect(info.attachmentRect, FloatSize(attachmentBorderRadius, attachmentBorderRadius));
</span><ins>+    return borderPath;
+}
+
+static void paintAttachmentBorder(GraphicsContext&amp; context, Path&amp; borderPath)
+{
</ins><span class="cx">     context.setStrokeColor(attachmentBorderColor());
</span><span class="cx">     context.setStrokeThickness(1);
</span><span class="cx">     context.strokePath(borderPath);
</span><span class="lines">@@ -1666,7 +1671,9 @@
</span><span class="cx"> 
</span><span class="cx">     context.translate(toFloatSize(paintRect.location()));
</span><span class="cx"> 
</span><del>-    paintAttachmentBorder(context, info);
</del><ins>+    Path borderPath = attachmentBorderPath(info);
+    paintAttachmentBorder(context, borderPath);
+    context.clipPath(borderPath);
</ins><span class="cx"> 
</span><span class="cx">     context.translate(FloatSize(0, info.contentYOrigin));
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>