<!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>[202348] 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/202348">202348</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2016-06-22 13:44:26 -0700 (Wed, 22 Jun 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/201629">r201629</a>): Weird button glitching on github.com
https://bugs.webkit.org/show_bug.cgi?id=159031
rdar://problem/26880332

Reviewed by Tim Horton.

Source/WebCore:

<a href="http://trac.webkit.org/projects/webkit/changeset/201629">r201629</a> changed the logic slightly when creating an image buffer for a scaled context;
it set the buffer context's scale to the scale in the source context, but this failed
to take into account the rounding up of the buffer size, which the old code did.

Fix by reverting to the old behavior.

Since buffer sizes can only be integral, changed compatibleBufferSize() to return
an IntSize.

Test: fast/backgrounds/scaled-gradient-background.html

* platform/graphics/ImageBuffer.cpp:
(WebCore::ImageBuffer::createCompatibleBuffer):
(WebCore::ImageBuffer::compatibleBufferSize):
* platform/graphics/ImageBuffer.h:
* platform/graphics/IntRect.h:
(WebCore::IntRect::area):
* platform/graphics/IntSize.h:
(WebCore::IntSize::area): Make this return an unsigned.

LayoutTests:

* fast/backgrounds/scaled-gradient-background-expected.html: Added.
* fast/backgrounds/scaled-gradient-background.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="#trunkSourceWebCoreplatformgraphicsImageBuffercpp">trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsImageBufferh">trunk/Source/WebCore/platform/graphics/ImageBuffer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsIntRecth">trunk/Source/WebCore/platform/graphics/IntRect.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsIntSizeh">trunk/Source/WebCore/platform/graphics/IntSize.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastbackgroundsscaledgradientbackgroundexpectedhtml">trunk/LayoutTests/fast/backgrounds/scaled-gradient-background-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundsscaledgradientbackgroundhtml">trunk/LayoutTests/fast/backgrounds/scaled-gradient-background.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (202347 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-06-22 20:39:49 UTC (rev 202347)
+++ trunk/LayoutTests/ChangeLog        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-06-22  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        REGRESSION (r201629): Weird button glitching on github.com
+        https://bugs.webkit.org/show_bug.cgi?id=159031
+        rdar://problem/26880332
+
+        Reviewed by Tim Horton.
+
+        * fast/backgrounds/scaled-gradient-background-expected.html: Added.
+        * fast/backgrounds/scaled-gradient-background.html: Added.
+
</ins><span class="cx"> 2016-06-22  Alexey Proskuryakov  &lt;ap@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Test expectation gardening for rdar://problem/26950065
</span></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundsscaledgradientbackgroundexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/scaled-gradient-background-expected.html (0 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/scaled-gradient-background-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/scaled-gradient-background-expected.html        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+    .box {
+        position: absolute;
+        top: 50px;
+        left: 50px;
+        height: 100px;
+        width: 100px;
+        margin: 100px;
+        background-color: green;
+        border: 1px solid black;
+    }
+
+    .clipper {
+        position: absolute;
+        top: 78px;
+        left: 78px;
+        height: 205px;
+        width: 205px;
+        border: 20px solid gray;
+    }
+    &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;p&gt;Green background should not appear stripey&lt;/p&gt;
+&lt;div class=&quot;box&quot; style=&quot;transform: scale(2.19)&quot;&gt;&lt;/div&gt;
+
+&lt;div class=&quot;clipper&quot;&gt;&lt;/div&gt;
+
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundsscaledgradientbackgroundhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/scaled-gradient-background.html (0 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/scaled-gradient-background.html                                (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/scaled-gradient-background.html        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -0,0 +1,35 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+    .box {
+        position: absolute;
+        top: 50px;
+        left: 50px;
+        height: 100px;
+        width: 100px;
+        margin: 100px;
+        background-image: linear-gradient(green, green);
+        border: 1px solid black;
+    }
+    
+    .clipper {
+        position: absolute;
+        top: 78px;
+        left: 78px;
+        height: 205px;
+        width: 205px;
+        border: 20px solid gray;
+    }
+    &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+&lt;p&gt;Green background should not appear stripey&lt;/p&gt;
+&lt;div class=&quot;box&quot; style=&quot;transform: scale(2.19)&quot;&gt;&lt;/div&gt;
+
+&lt;div class=&quot;clipper&quot;&gt;&lt;/div&gt;
+
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (202347 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-06-22 20:39:49 UTC (rev 202347)
+++ trunk/Source/WebCore/ChangeLog        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2016-06-22  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        REGRESSION (r201629): Weird button glitching on github.com
+        https://bugs.webkit.org/show_bug.cgi?id=159031
+        rdar://problem/26880332
+
+        Reviewed by Tim Horton.
+
+        r201629 changed the logic slightly when creating an image buffer for a scaled context;
+        it set the buffer context's scale to the scale in the source context, but this failed
+        to take into account the rounding up of the buffer size, which the old code did.
+
+        Fix by reverting to the old behavior.
+
+        Since buffer sizes can only be integral, changed compatibleBufferSize() to return
+        an IntSize.
+
+        Test: fast/backgrounds/scaled-gradient-background.html
+
+        * platform/graphics/ImageBuffer.cpp:
+        (WebCore::ImageBuffer::createCompatibleBuffer):
+        (WebCore::ImageBuffer::compatibleBufferSize):
+        * platform/graphics/ImageBuffer.h:
+        * platform/graphics/IntRect.h:
+        (WebCore::IntRect::area):
+        * platform/graphics/IntSize.h:
+        (WebCore::IntSize::area): Make this return an unsigned.
+
</ins><span class="cx"> 2016-06-22  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Inline the last of the Apple Pay WebCore code
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsImageBuffercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp (202347 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp        2016-06-22 20:39:49 UTC (rev 202347)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -169,14 +169,14 @@
</span><span class="cx">     if (size.isEmpty())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    FloatSize scaledSize = ImageBuffer::compatibleBufferSize(size, context);
</del><ins>+    IntSize scaledSize = ImageBuffer::compatibleBufferSize(size, context);
</ins><span class="cx"> 
</span><del>-    auto buffer = ImageBuffer::createCompatibleBuffer(expandedIntSize(scaledSize), 1, ColorSpaceSRGB, context, hasAlpha);
</del><ins>+    auto buffer = ImageBuffer::createCompatibleBuffer(scaledSize, 1, ColorSpaceSRGB, context, hasAlpha);
</ins><span class="cx">     if (!buffer)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><span class="cx">     // Set up a corresponding scale factor on the graphics context.
</span><del>-    buffer-&gt;context().scale(context.scaleFactor());
</del><ins>+    buffer-&gt;context().scale(FloatSize(scaledSize.width() / size.width(), scaledSize.height() / size.height()));
</ins><span class="cx">     return buffer;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -185,11 +185,11 @@
</span><span class="cx">     return create(size, context.renderingMode(), resolutionScale, colorSpace);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-FloatSize ImageBuffer::compatibleBufferSize(const FloatSize&amp; size, const GraphicsContext&amp; context)
</del><ins>+IntSize ImageBuffer::compatibleBufferSize(const FloatSize&amp; size, const GraphicsContext&amp; context)
</ins><span class="cx"> {
</span><span class="cx">     // Enlarge the buffer size if the context's transform is scaling it so we need a higher
</span><span class="cx">     // resolution than one pixel per unit.
</span><del>-    return size * context.scaleFactor();
</del><ins>+    return expandedIntSize(size * context.scaleFactor());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool ImageBuffer::isCompatibleWithContext(const GraphicsContext&amp; context) const
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsImageBufferh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ImageBuffer.h (202347 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ImageBuffer.h        2016-06-22 20:39:49 UTC (rev 202347)
+++ trunk/Source/WebCore/platform/graphics/ImageBuffer.h        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -83,7 +83,7 @@
</span><span class="cx">     static std::unique_ptr&lt;ImageBuffer&gt; createCompatibleBuffer(const FloatSize&amp;, const GraphicsContext&amp;, bool hasAlpha = true);
</span><span class="cx">     static std::unique_ptr&lt;ImageBuffer&gt; createCompatibleBuffer(const FloatSize&amp;, float resolutionScale, ColorSpace, const GraphicsContext&amp;, bool hasAlpha);
</span><span class="cx"> 
</span><del>-    static FloatSize compatibleBufferSize(const FloatSize&amp;, const GraphicsContext&amp;);
</del><ins>+    static IntSize compatibleBufferSize(const FloatSize&amp;, const GraphicsContext&amp;);
</ins><span class="cx">     bool isCompatibleWithContext(const GraphicsContext&amp;) const;
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT ~ImageBuffer();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsIntRecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/IntRect.h (202347 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/IntRect.h        2016-06-22 20:39:49 UTC (rev 202347)
+++ trunk/Source/WebCore/platform/graphics/IntRect.h        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -85,6 +85,8 @@
</span><span class="cx">     int maxY() const { return y() + height(); }
</span><span class="cx">     int width() const { return m_size.width(); }
</span><span class="cx">     int height() const { return m_size.height(); }
</span><ins>+    
+    unsigned area() const { return m_size.area(); }
</ins><span class="cx"> 
</span><span class="cx">     void setX(int x) { m_location.setX(x); }
</span><span class="cx">     void setY(int y) { m_location.setY(y); }
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsIntSizeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/IntSize.h (202347 => 202348)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/IntSize.h        2016-06-22 20:39:49 UTC (rev 202347)
+++ trunk/Source/WebCore/platform/graphics/IntSize.h        2016-06-22 20:44:26 UTC (rev 202348)
</span><span class="lines">@@ -125,9 +125,9 @@
</span><span class="cx"> 
</span><span class="cx">     IntSize constrainedBetween(const IntSize&amp; min, const IntSize&amp; max) const;
</span><span class="cx"> 
</span><del>-    int area() const
</del><ins>+    unsigned area() const
</ins><span class="cx">     {
</span><del>-        return m_width * m_height;
</del><ins>+        return abs(m_width) * abs(m_height);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     int diagonalLengthSquared() const
</span></span></pre>
</div>
</div>

</body>
</html>