<!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>[202117] 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/202117">202117</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2016-06-15 18:14:02 -0700 (Wed, 15 Jun 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>&lt;attachment&gt; elements jump around a lot around when subtitle text changes slightly
https://bugs.webkit.org/show_bug.cgi?id=158818
&lt;rdar://problem/24450270&gt;

Reviewed by Simon Fraser.

Test: fast/attachment/attachment-subtitle-resize.html

* rendering/RenderAttachment.cpp:
(WebCore::RenderAttachment::layout):
* rendering/RenderAttachment.h:
* rendering/RenderThemeMac.mm:
(WebCore::AttachmentLayout::AttachmentLayout):
(WebCore::RenderThemeMac::paintAttachment):
In order to avoid changes to the centered subtitle text causing the whole
attachment to bounce around a lot, make it so that attachment width can only
increase, never decrease, and round the subtitle's width up to the nearest
increment of 10px when determining its affect on the whole element's width.
Also, center the attachment in its element, instead of left-aligning it,
so that the extra width we may have is evenly distributed between the two sides.

* fast/attachment/attachment-subtitle-resize-expected.txt: Added.
* fast/attachment/attachment-subtitle-resize.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsTestExpectations">trunk/LayoutTests/TestExpectations</a></li>
<li><a href="#trunkLayoutTestsplatformmacTestExpectations">trunk/LayoutTests/platform/mac/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderAttachmentcpp">trunk/Source/WebCore/rendering/RenderAttachment.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderAttachmenth">trunk/Source/WebCore/rendering/RenderAttachment.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderThemeMacmm">trunk/Source/WebCore/rendering/RenderThemeMac.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastattachmentattachmentsubtitleresizeexpectedtxt">trunk/LayoutTests/fast/attachment/attachment-subtitle-resize-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastattachmentattachmentsubtitleresizehtml">trunk/LayoutTests/fast/attachment/attachment-subtitle-resize.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (202116 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-06-15 23:44:57 UTC (rev 202116)
+++ trunk/LayoutTests/ChangeLog        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-06-15  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        &lt;attachment&gt; elements jump around a lot around when subtitle text changes slightly
+        https://bugs.webkit.org/show_bug.cgi?id=158818
+        &lt;rdar://problem/24450270&gt;
+
+        Reviewed by Simon Fraser.
+
+        * fast/attachment/attachment-subtitle-resize-expected.txt: Added.
+        * fast/attachment/attachment-subtitle-resize.html: Added.
+
</ins><span class="cx"> 2016-06-13  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS WK2] Make it possible to test the Next/Previous buttons in the keyboard accessory bar
</span></span></pre></div>
<a id="trunkLayoutTestsTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/TestExpectations (202116 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/TestExpectations        2016-06-15 23:44:57 UTC (rev 202116)
+++ trunk/LayoutTests/TestExpectations        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -54,6 +54,9 @@
</span><span class="cx"> fast/harness/ui-side-scripts.html [ Skip ]
</span><span class="cx"> fast/harness/concurrent-ui-side-scripts.html [ Skip ]
</span><span class="cx"> 
</span><ins>+# This test only makes sense on Mac
+fast/attachment/attachment-subtitle-resize.html
+
</ins><span class="cx"> #//////////////////////////////////////////////////////////////////////////////////////////
</span><span class="cx"> # End platform-specific tests.
</span><span class="cx"> #//////////////////////////////////////////////////////////////////////////////////////////
</span></span></pre></div>
<a id="trunkLayoutTestsfastattachmentattachmentsubtitleresizeexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/attachment/attachment-subtitle-resize-expected.txt (0 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/attachment/attachment-subtitle-resize-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/attachment/attachment-subtitle-resize-expected.txt        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+This tests that attachments which resize will only grow in width, never shrink.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS wideAttachmentWidth &gt; skinnyAttachmentWidth
+PASS Attachment starts out skinny.
+PASS Attachment resized from skinny to wide becomes wide.
+PASS Attachment resized from wide to skinny remains wide.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+  
</ins></span></pre></div>
<a id="trunkLayoutTestsfastattachmentattachmentsubtitleresizehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/attachment/attachment-subtitle-resize.html (0 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/attachment/attachment-subtitle-resize.html                                (rev 0)
+++ trunk/LayoutTests/fast/attachment/attachment-subtitle-resize.html        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -0,0 +1,43 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+    if (window.internals)
+        window.internals.settings.setAttachmentElementEnabled(true)
+&lt;/script&gt;
+&lt;body&gt;
+&lt;attachment id=&quot;wideAttachment&quot; subtitle=&quot;VERY LONG SUBTITLE THAT WILL MAKE THE ATTACHMENT VERY WIDE&quot;&gt;&lt;/attachment&gt;
+&lt;attachment id=&quot;skinnyAttachment&quot; subtitle=&quot;skinny but wider than icon&quot;&gt;&lt;/attachment&gt;
+&lt;attachment id=&quot;resizedAttachment&quot; subtitle=&quot;skinny but wider than icon&quot;&gt;&lt;/attachment&gt;
+&lt;script&gt;
+description(&quot;This tests that attachments which resize will only grow in width, never shrink.&quot;);
+
+var wideAttachmentEl = document.getElementById(&quot;wideAttachment&quot;);
+var skinnyAttachmentEl = document.getElementById(&quot;skinnyAttachment&quot;);
+var resizedAttachmentEl = document.getElementById(&quot;resizedAttachment&quot;);
+
+var wideAttachmentWidth = wideAttachmentEl.offsetWidth;
+var skinnyAttachmentWidth = skinnyAttachmentEl.offsetWidth;
+
+function assert(value, description)
+{
+    if (value)
+        testPassed(description);
+    else
+        testFailed(description);
+}
+
+assert(wideAttachmentWidth &gt; skinnyAttachmentWidth, &quot;wideAttachmentWidth &gt; skinnyAttachmentWidth&quot;);
+
+assert(resizedAttachmentEl.offsetWidth == skinnyAttachmentWidth, &quot;Attachment starts out skinny.&quot;);
+
+resizedAttachmentEl.setAttribute(&quot;subtitle&quot;, &quot;VERY LONG SUBTITLE THAT WILL MAKE THE ATTACHMENT VERY WIDE&quot;);
+assert(resizedAttachmentEl.offsetWidth == wideAttachmentWidth, &quot;Attachment resized from skinny to wide becomes wide.&quot;);
+
+resizedAttachmentEl.setAttribute(&quot;subtitle&quot;, &quot;skinny but wider than icon&quot;);
+assert(resizedAttachmentEl.offsetWidth == wideAttachmentWidth, &quot;Attachment resized from wide to skinny remains wide.&quot;);
+
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmacTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/TestExpectations (202116 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/TestExpectations        2016-06-15 23:44:57 UTC (rev 202116)
+++ trunk/LayoutTests/platform/mac/TestExpectations        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -20,6 +20,8 @@
</span><span class="cx"> fast/text-autosizing/ios [ Pass ]
</span><span class="cx"> fast/text-autosizing/mac [ Pass ]
</span><span class="cx"> 
</span><ins>+fast/attachment/attachment-subtitle-resize.html [ Pass ]
+
</ins><span class="cx"> #//////////////////////////////////////////////////////////////////////////////////////////
</span><span class="cx"> # End platform-specific directories.
</span><span class="cx"> #//////////////////////////////////////////////////////////////////////////////////////////
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (202116 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-06-15 23:44:57 UTC (rev 202116)
+++ trunk/Source/WebCore/ChangeLog        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2016-06-15  Tim Horton  &lt;timothy_horton@apple.com&gt;
+
+        &lt;attachment&gt; elements jump around a lot around when subtitle text changes slightly
+        https://bugs.webkit.org/show_bug.cgi?id=158818
+        &lt;rdar://problem/24450270&gt;
+
+        Reviewed by Simon Fraser.
+
+        Test: fast/attachment/attachment-subtitle-resize.html
+
+        * rendering/RenderAttachment.cpp:
+        (WebCore::RenderAttachment::layout):
+        * rendering/RenderAttachment.h:
+        * rendering/RenderThemeMac.mm:
+        (WebCore::AttachmentLayout::AttachmentLayout):
+        (WebCore::RenderThemeMac::paintAttachment):
+        In order to avoid changes to the centered subtitle text causing the whole
+        attachment to bounce around a lot, make it so that attachment width can only
+        increase, never decrease, and round the subtitle's width up to the nearest
+        increment of 10px when determining its affect on the whole element's width.
+        Also, center the attachment in its element, instead of left-aligning it,
+        so that the extra width we may have is evenly distributed between the two sides.
+
</ins><span class="cx"> 2016-06-15  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reset bindings test results after r202105
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderAttachmentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderAttachment.cpp (202116 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderAttachment.cpp        2016-06-15 23:44:57 UTC (rev 202116)
+++ trunk/Source/WebCore/rendering/RenderAttachment.cpp        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -53,7 +53,10 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderAttachment::layout()
</span><span class="cx"> {
</span><del>-    setIntrinsicSize(document().page()-&gt;theme().attachmentIntrinsicSize(*this));
</del><ins>+    LayoutSize newIntrinsicSize = document().page()-&gt;theme().attachmentIntrinsicSize(*this);
+    m_minimumIntrinsicWidth = std::max(m_minimumIntrinsicWidth, newIntrinsicSize.width());
+    newIntrinsicSize.setWidth(m_minimumIntrinsicWidth);
+    setIntrinsicSize(newIntrinsicSize);
</ins><span class="cx"> 
</span><span class="cx">     RenderReplaced::layout();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderAttachmenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderAttachment.h (202116 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderAttachment.h        2016-06-15 23:44:57 UTC (rev 202116)
+++ trunk/Source/WebCore/rendering/RenderAttachment.h        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -50,6 +50,8 @@
</span><span class="cx">     void layout() override;
</span><span class="cx"> 
</span><span class="cx">     int baselinePosition(FontBaseline, bool, LineDirectionMode, LinePositionMode) const override;
</span><ins>+
+    LayoutUnit m_minimumIntrinsicWidth;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> inline RenderAttachment* HTMLAttachmentElement::renderer() const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderThemeMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderThemeMac.mm (202116 => 202117)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderThemeMac.mm        2016-06-15 23:44:57 UTC (rev 202116)
+++ trunk/Source/WebCore/rendering/RenderThemeMac.mm        2016-06-16 01:14:02 UTC (rev 202117)
</span><span class="lines">@@ -73,6 +73,7 @@
</span><span class="cx"> #import &quot;UserAgentScripts.h&quot;
</span><span class="cx"> #import &quot;UserAgentStyleSheets.h&quot;
</span><span class="cx"> #import &quot;WebCoreSystemInterface.h&quot;
</span><ins>+#import &lt;wtf/MathExtras.h&gt;
</ins><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/StdLibExtras.h&gt;
</span><span class="lines">@@ -2188,6 +2189,7 @@
</span><span class="cx"> static Color attachmentTitleInactiveTextColor() { return Color(100, 100, 100, 255); }
</span><span class="cx"> 
</span><span class="cx"> const CGFloat attachmentSubtitleFontSize = 10;
</span><ins>+const int attachmentSubtitleWidthIncrement = 10;
</ins><span class="cx"> static Color attachmentSubtitleTextColor() { return Color(82, 145, 214, 255); }
</span><span class="cx"> 
</span><span class="cx"> const CGFloat attachmentProgressBarWidth = 30;
</span><span class="lines">@@ -2381,7 +2383,11 @@
</span><span class="cx">     attachmentRect = iconBackgroundRect;
</span><span class="cx">     for (const auto&amp; line : lines)
</span><span class="cx">         attachmentRect.unite(line.backgroundRect);
</span><del>-    attachmentRect.unite(subtitleTextRect);
</del><ins>+    if (!subtitleTextRect.isEmpty()) {
+        FloatRect roundedSubtitleTextRect = subtitleTextRect;
+        roundedSubtitleTextRect.inflateX(attachmentSubtitleWidthIncrement - clampToInteger(ceilf(subtitleTextRect.width())) % attachmentSubtitleWidthIncrement);
+        attachmentRect.unite(roundedSubtitleTextRect);
+    }
</ins><span class="cx">     attachmentRect.inflate(attachmentMargin);
</span><span class="cx">     attachmentRect = encloseRectToDevicePixels(attachmentRect, attachment.document().deviceScaleFactor());
</span><span class="cx"> }
</span><span class="lines">@@ -2594,7 +2600,7 @@
</span><span class="cx">     GraphicsContextStateSaver saver(context);
</span><span class="cx"> 
</span><span class="cx">     context.translate(toFloatSize(paintRect.location()));
</span><del>-    context.translate(FloatSize((layout.attachmentRect.width() - attachmentIconBackgroundSize) / 2, 0));
</del><ins>+    context.translate(floorSizeToDevicePixels(LayoutSize((paintRect.width() - attachmentIconBackgroundSize) / 2, 0), renderer.document().deviceScaleFactor()));
</ins><span class="cx"> 
</span><span class="cx">     bool useSelectedStyle = attachment.selectionState() != RenderObject::SelectionNone;
</span><span class="cx">     bool usePlaceholder = validProgress &amp;&amp; !progress;
</span></span></pre>
</div>
</div>

</body>
</html>