<!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>[166784] 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/166784">166784</a></dd>
<dt>Author</dt> <dd>zalan@apple.com</dd>
<dt>Date</dt> <dd>2014-04-04 09:30:18 -0700 (Fri, 04 Apr 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>Subpixel rendering: Move background images to device pixel boundaries.
https://bugs.webkit.org/show_bug.cgi?id=131144
Reviewed by Simon Fraser.
Replace integral snapping with device pixel snapping.
Background image geometry calculation uses LayoutUnits and we snap to device pixels right before painting.
Source/WebCore:
Tests: fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html
fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html
fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html
fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html
* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::setContentsTilePhase):
(WebCore::GraphicsLayer::contentsTilePhase):
(WebCore::GraphicsLayer::setContentsTileSize):
(WebCore::GraphicsLayer::contentsTileSize):
* platform/graphics/texmap/TextureMapperLayer.cpp:
(WebCore::TextureMapperLayer::setContentsTileSize):
(WebCore::TextureMapperLayer::setContentsTilePhase):
* platform/graphics/texmap/TextureMapperLayer.h:
* platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
(WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
(WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
* platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
* platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
* rendering/RenderBox.cpp:
(WebCore::RenderBox::repaintLayerRectsForImage):
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::paintFillLayerExtended):
(WebCore::resolveWidthForRatio):
(WebCore::resolveHeightForRatio):
(WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio):
(WebCore::resolveAgainstIntrinsicRatio):
(WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
(WebCore::RenderBoxModelObject::calculateFillTileSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::clip):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::relativePhase):
(WebCore::getSpace):
(WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
(WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
(WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
(WebCore::RenderBoxModelObject::paintNinePieceImage):
(WebCore::applySubPixelHeuristicForTileSize): Deleted.
* rendering/RenderBoxModelObject.h:
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::destOrigin):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestOrigin):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::destRect):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestRect):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::phase):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhase):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::tileSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setTileSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::spaceSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setSpaceSize):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseX):
(WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseY):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
* rendering/shapes/ShapeOutsideInfo.cpp:
(WebCore::getShapeImageAndRect):
LayoutTests:
* css3/background/background-repeat-round-auto1-expected.html:
* css3/background/background-repeat-round-auto1.html:
* css3/background/background-repeat-round-auto2-expected.html:
* css3/background/background-repeat-round-auto2.html:
* css3/background/background-repeat-round-border-expected.html:
* css3/background/background-repeat-round-border.html:
* css3/background/background-repeat-round-content-expected.html:
* css3/background/background-repeat-round-content.html:
* css3/background/background-repeat-space-content-expected.html:
* css3/background/background-repeat-space-content.html:
* css3/background/background-repeat-space-padding-expected.html:
* css3/background/background-repeat-space-padding.html:
* css3/masking/mask-repeat-round-auto1-expected.html:
* css3/masking/mask-repeat-round-auto1.html:
* css3/masking/mask-repeat-round-auto2-expected.html:
* css3/masking/mask-repeat-round-auto2.html:
* css3/masking/mask-repeat-round-border-expected.html:
* css3/masking/mask-repeat-round-border.html:
* css3/masking/mask-repeat-round-content-expected.html:
* css3/masking/mask-repeat-round-content.html:
* css3/masking/mask-repeat-space-content-expected.html:
* css3/masking/mask-repeat-space-content.html:
* css3/masking/mask-repeat-space-padding-expected.html:
* css3/masking/mask-repeat-space-padding.html:
* fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html: Added.
* fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html: Added.
* fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html: Added.
* fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html: Added.
* fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html: Added.
* fast/backgrounds/resources/black25x25.png: Added.</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1expectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1html">trunk/LayoutTests/css3/background/background-repeat-round-auto1.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2expectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2html">trunk/LayoutTests/css3/background/background-repeat-round-auto2.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundborderexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundborderhtml">trunk/LayoutTests/css3/background/background-repeat-round-border.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundcontentexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatroundcontenthtml">trunk/LayoutTests/css3/background/background-repeat-round-content.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacecontentexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacecontenthtml">trunk/LayoutTests/css3/background/background-repeat-space-content.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddingexpectedhtml">trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddinghtml">trunk/LayoutTests/css3/background/background-repeat-space-padding.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto1expectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto1html">trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto2expectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundauto2html">trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundborderexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundborderhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-border.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundcontentexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatroundcontenthtml">trunk/LayoutTests/css3/masking/mask-repeat-round-content.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacecontentexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacecontenthtml">trunk/LayoutTests/css3/masking/mask-repeat-space-content.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacepaddingexpectedhtml">trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html</a></li>
<li><a href="#trunkLayoutTestscss3maskingmaskrepeatspacepaddinghtml">trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayerh">trunk/Source/WebCore/platform/graphics/GraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayercpp">trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayerh">trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayercpp">trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayerh">trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsStateh">trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxcpp">trunk/Source/WebCore/rendering/RenderBox.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxModelObjectcpp">trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderBoxModelObjecth">trunk/Source/WebCore/rendering/RenderBoxModelObject.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingshapesShapeOutsideInfocpp">trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionexpectedhtml">trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionhtml">trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html</a></li>
<li><a href="#trunkLayoutTestsfastbackgroundsresourcesblack25x25png">trunk/LayoutTests/fast/backgrounds/resources/black25x25.png</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/ChangeLog        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2014-04-04 Zalan Bujtas <zalan@apple.com>
+
+ Subpixel rendering: Move background images to device pixel boundaries.
+ https://bugs.webkit.org/show_bug.cgi?id=131144
+
+ Reviewed by Simon Fraser.
+
+ Replace integral snapping with device pixel snapping.
+ Background image geometry calculation uses LayoutUnits and we snap to device pixels right before painting.
+
+ * css3/background/background-repeat-round-auto1-expected.html:
+ * css3/background/background-repeat-round-auto1.html:
+ * css3/background/background-repeat-round-auto2-expected.html:
+ * css3/background/background-repeat-round-auto2.html:
+ * css3/background/background-repeat-round-border-expected.html:
+ * css3/background/background-repeat-round-border.html:
+ * css3/background/background-repeat-round-content-expected.html:
+ * css3/background/background-repeat-round-content.html:
+ * css3/background/background-repeat-space-content-expected.html:
+ * css3/background/background-repeat-space-content.html:
+ * css3/background/background-repeat-space-padding-expected.html:
+ * css3/background/background-repeat-space-padding.html:
+ * css3/masking/mask-repeat-round-auto1-expected.html:
+ * css3/masking/mask-repeat-round-auto1.html:
+ * css3/masking/mask-repeat-round-auto2-expected.html:
+ * css3/masking/mask-repeat-round-auto2.html:
+ * css3/masking/mask-repeat-round-border-expected.html:
+ * css3/masking/mask-repeat-round-border.html:
+ * css3/masking/mask-repeat-round-content-expected.html:
+ * css3/masking/mask-repeat-round-content.html:
+ * css3/masking/mask-repeat-space-content-expected.html:
+ * css3/masking/mask-repeat-space-content.html:
+ * css3/masking/mask-repeat-space-padding-expected.html:
+ * css3/masking/mask-repeat-space-padding.html:
+ * fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html: Added.
+ * fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html: Added.
+ * fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html: Added.
+ * fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html: Added.
+ * fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html: Added.
+ * fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html: Added.
+ * fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html: Added.
+ * fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html: Added.
+ * fast/backgrounds/resources/black25x25.png: Added.
+
</ins><span class="cx"> 2014-04-04 Mihnea Ovidenie <mihnea@adobe.com>
</span><span class="cx">
</span><span class="cx"> [CSSRegions] Region's behaviour not updated when becoming valid from invalid
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto1-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: 111px 88px;
</del><ins>+ background-size: 50px auto;
</ins><span class="cx"> background-repeat: repeat;
</span><span class="cx"> background-origin: border-box;
</span><span class="cx"> background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto1html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto1.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto1.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto1.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: 106px auto;
</del><ins>+ background-size: 50px auto;
</ins><span class="cx"> background-repeat: round repeat;
</span><span class="cx"> background-origin: border-box;
</span><span class="cx"> background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto2-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: 124px 100px;
</del><ins>+ background-size: auto 50px;
</ins><span class="cx"> background-repeat: repeat;
</span><span class="cx"> background-origin: border-box;
</span><span class="cx"> background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundauto2html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-auto2.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-auto2.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-auto2.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: auto 99px;
</del><ins>+ background-size: auto 50px;
</ins><span class="cx"> background-repeat: repeat round;
</span><span class="cx"> background-origin: border-box;
</span><span class="cx"> background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundborderexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-border-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: 111px 85px;
</del><ins>+ background-size: 50px;
</ins><span class="cx"> background-repeat: repeat;
</span><span class="cx"> background-origin: border-box;
</span><span class="cx"> background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundborderhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-border.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-border.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-border.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: 106px;
</del><ins>+ background-size: 50px;
</ins><span class="cx"> background-repeat: round;
</span><span class="cx"> background-origin: border-box;
</span><span class="cx"> background-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundcontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: 72px 40px;
</del><ins>+ background-size: 100px;
</ins><span class="cx"> background-repeat: repeat;
</span><span class="cx"> background-origin: content-box;
</span><span class="cx"> background-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatroundcontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-round-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-round-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-round-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -9,7 +9,7 @@
</span><span class="cx"> padding: 50px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> background-image: url(resources/circle.png);
</span><del>- background-size: 70px 40px;
</del><ins>+ background-size: 100px;
</ins><span class="cx"> background-repeat: round;
</span><span class="cx"> background-origin: content-box;
</span><span class="cx"> background-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacecontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -3,14 +3,17 @@
</span><span class="cx"> <head>
</span><span class="cx"> <style>
</span><span class="cx"> div {
</span><del>- width: 800px;
</del><ins>+ width: 600px;
</ins><span class="cx"> height: 400px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> padding: 50px;
</span><del>- }
</del><ins>+ background-origin: content-box;
+ background-clip: content-box;
+ background-repeat: no-repeat;
+ }
</ins><span class="cx"> </style>
</span><span class="cx"> <script>
</span><del>- var sizeX = 121, sizeY = 93, spaceX = 14, spaceY = 9, width = 800, height = 400;
</del><ins>+ var sizeX = 100, sizeY = 80, spaceX = 0, spaceY = 0, width = 600, height = 400;
</ins><span class="cx">
</span><span class="cx"> var urls = Array(), size = Array(), position = Array();
</span><span class="cx">
</span><span class="lines">@@ -27,10 +30,7 @@
</span><span class="cx">
</span><span class="cx"> div.style.cssText += "background-image: " + urls.join(", ") + ";" +
</span><span class="cx"> "background-size: " + size.join(", ") + ";" +
</span><del>- "background-position: " + position.join(", ") + ";" +
- "background-repeat: no-repeat;" +
- "background-origin: content-box;" +
- "background-clip: content-box;";
</del><ins>+ "background-position: " + position.join(", ") + ";";
</ins><span class="cx"> }
</span><span class="cx"> </script>
</span><span class="cx"> </head>
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacecontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -3,12 +3,12 @@
</span><span class="cx"> <head>
</span><span class="cx"> <style>
</span><span class="cx"> div {
</span><del>- width: 800px;
</del><ins>+ width: 600px;
</ins><span class="cx"> height: 400px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> background-image: url("resources/circle.png");
</span><del>- background-size: 121px 93px;
</del><ins>+ background-size: 100px;
</ins><span class="cx"> background-repeat: space space;
</span><span class="cx"> background-origin: content-box;
</span><span class="cx"> background-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddingexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-padding-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -7,10 +7,13 @@
</span><span class="cx"> height: 300px;
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> padding: 50px;
</span><ins>+ background-repeat: no-repeat;
+ background-origin: padding-box;
+ background-clip: padding-box;
</ins><span class="cx"> }
</span><span class="cx"> </style>
</span><span class="cx"> <script>
</span><del>- var sizeX = 153, sizeY = 127, spaceX = 20, spaceY = 9, width = 700, height = 600;
</del><ins>+ var sizeX = 150, sizeY = 120, spaceX = 25, spaceY = 20, width = 400, height = 300;
</ins><span class="cx">
</span><span class="cx"> var urls = Array(), size = Array(), position = Array();
</span><span class="cx">
</span><span class="lines">@@ -27,10 +30,7 @@
</span><span class="cx">
</span><span class="cx"> div.style.cssText += "background-image: " + urls.join(", ") + ";" +
</span><span class="cx"> "background-size: " + size.join(", ") + ";" +
</span><del>- "background-position: " + position.join(", ") + ";" +
- "background-repeat: no-repeat;" +
- "background-origin: padding-box;" +
- "background-clip: padding-box;";
</del><ins>+ "background-position: " + position.join(", ") + ";";
</ins><span class="cx"> }
</span><span class="cx"> </script>
</span><span class="cx"> </head>
</span></span></pre></div>
<a id="trunkLayoutTestscss3backgroundbackgroundrepeatspacepaddinghtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/background/background-repeat-space-padding.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/background/background-repeat-space-padding.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/background/background-repeat-space-padding.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx"> border: 50px solid transparent;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> background-image: url("resources/circle.png");
</span><del>- background-size: 153px 127px;
</del><ins>+ background-size: 150px;
</ins><span class="cx"> background-repeat: space;
</span><span class="cx"> background-origin: padding-box;
</span><span class="cx"> background-clip: padding-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto1expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto1-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: 111px 88px;
</del><ins>+ -webkit-mask-size: 100px;
</ins><span class="cx"> -webkit-mask-repeat: repeat;
</span><span class="cx"> -webkit-mask-origin: border-box;
</span><span class="cx"> -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto1html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto1.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: 106px auto;
</del><ins>+ -webkit-mask-size: 100px;
</ins><span class="cx"> -webkit-mask-repeat: round repeat;
</span><span class="cx"> -webkit-mask-origin: border-box;
</span><span class="cx"> -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto2expectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto2-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: 124px 100px;
</del><ins>+ -webkit-mask-size: 50px;
</ins><span class="cx"> -webkit-mask-repeat: repeat;
</span><span class="cx"> -webkit-mask-origin: border-box;
</span><span class="cx"> -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundauto2html"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-auto2.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: auto 99px;
</del><ins>+ -webkit-mask-size: 50px;
</ins><span class="cx"> -webkit-mask-repeat: repeat round;
</span><span class="cx"> -webkit-mask-origin: border-box;
</span><span class="cx"> -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundborderexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-border-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: 111px 85px;
</del><ins>+ -webkit-mask-size: 50px;
</ins><span class="cx"> -webkit-mask-repeat: repeat;
</span><span class="cx"> -webkit-mask-origin: border-box;
</span><span class="cx"> -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundborderhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-border.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-border.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-border.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: 106px;
</del><ins>+ -webkit-mask-size: 50px;
</ins><span class="cx"> -webkit-mask-repeat: round;
</span><span class="cx"> -webkit-mask-origin: border-box;
</span><span class="cx"> -webkit-mask-clip: border-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundcontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: 72px 40px;
</del><ins>+ -webkit-mask-size: 50px;
</ins><span class="cx"> -webkit-mask-repeat: repeat;
</span><span class="cx"> -webkit-mask-origin: content-box;
</span><span class="cx"> -webkit-mask-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatroundcontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-round-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-round-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-round-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url(resources/circle.png);
</span><del>- -webkit-mask-size: 70px 40px;
</del><ins>+ -webkit-mask-size: 50px;
</ins><span class="cx"> -webkit-mask-repeat: round;
</span><span class="cx"> -webkit-mask-origin: content-box;
</span><span class="cx"> -webkit-mask-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacecontentexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-content-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -13,17 +13,20 @@
</span><span class="cx"> background-color: red;
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><ins>+ -webkit-mask-repeat: no-repeat;
+ -webkit-mask-origin: content-box;
+ -webkit-mask-clip: content-box;
</ins><span class="cx"> }
</span><span class="cx"> </style>
</span><span class="cx"> <script>
</span><del>- var sizeX = 121, sizeY = 93, spaceX = 58, spaceY = 10, width = 300, height = 300;
</del><ins>+ var sizeX = 100, sizeY = 80, spaceX = 0, spaceY = 30, width = 300, height = 300;
</ins><span class="cx">
</span><span class="cx"> var urls = Array(), size = Array(), position = Array();
</span><span class="cx">
</span><span class="cx"> function addMasks() {
</span><span class="cx"> for (var x = 0; x < width; x += sizeX + spaceX) {
</span><span class="cx"> for (var y = 0; y < height; y += sizeY + spaceY) {
</span><del>- urls.push("url(resources/circle.svg)");
</del><ins>+ urls.push("url(resources/circle.png)");
</ins><span class="cx"> size.push(sizeX + "px " + sizeY + "px");
</span><span class="cx"> position.push(x + "px " + y + "px");
</span><span class="cx"> }
</span><span class="lines">@@ -33,10 +36,7 @@
</span><span class="cx">
</span><span class="cx"> div.style.cssText += "-webkit-mask-image: " + urls.join(", ") + ";" +
</span><span class="cx"> "-webkit-mask-size: " + size.join(", ") + ";" +
</span><del>- "-webkit-mask-position: " + position.join(", ") + ";" +
- "-webkit-mask-repeat: no-repeat;" +
- "-webkit-mask-origin: content-box;" +
- "-webkit-mask-clip: content-box;";
</del><ins>+ "-webkit-mask-position: " + position.join(", ") + ";";
</ins><span class="cx"> }
</span><span class="cx"> </script>
</span><span class="cx"> </head>
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacecontenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-content.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-content.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-content.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -13,8 +13,8 @@
</span><span class="cx"> background-color: red;
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><del>- -webkit-mask-image: url("resources/circle.svg");
- -webkit-mask-size: 121px 93px;
</del><ins>+ -webkit-mask-image: url("resources/circle.png");
+ -webkit-mask-size: 100px;
</ins><span class="cx"> -webkit-mask-repeat: space space;
</span><span class="cx"> -webkit-mask-origin: content-box;
</span><span class="cx"> -webkit-mask-clip: content-box;
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacepaddingexpectedhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-padding-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -13,10 +13,13 @@
</span><span class="cx"> background-color: red;
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><ins>+ -webkit-mask-repeat: no-repeat;
+ -webkit-mask-origin: padding-box;
+ -webkit-mask-clip: padding-box;
</ins><span class="cx"> }
</span><span class="cx"> </style>
</span><span class="cx"> <script>
</span><del>- var sizeX = 153, sizeY = 127, spaceX = 20, spaceY = 9, width = 700, height = 600;
</del><ins>+ var sizeX = 100, sizeY = 80, spaceX = 0, spaceY = 0, width = 700, height = 600;
</ins><span class="cx">
</span><span class="cx"> var urls = Array(), size = Array(), position = Array();
</span><span class="cx">
</span><span class="lines">@@ -33,10 +36,7 @@
</span><span class="cx">
</span><span class="cx"> div.style.cssText += "-webkit-mask-image: " + urls.join(", ") + ";" +
</span><span class="cx"> "-webkit-mask-size: " + size.join(", ") + ";" +
</span><del>- "-webkit-mask-position: " + position.join(", ") + ";" +
- "-webkit-mask-repeat: no-repeat;" +
- "-webkit-mask-origin: padding-box;" +
- "-webkit-mask-clip: padding-box;";
</del><ins>+ "-webkit-mask-position: " + position.join(", ") + ";";
</ins><span class="cx"> }
</span><span class="cx"> </script>
</span><span class="cx"> </head>
</span></span></pre></div>
<a id="trunkLayoutTestscss3maskingmaskrepeatspacepaddinghtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/LayoutTests/css3/masking/mask-repeat-space-padding.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> border: 50px solid blue;
</span><span class="cx"> padding: 50px;
</span><span class="cx"> -webkit-mask-image: url("resources/circle.png");
</span><del>- -webkit-mask-size: 153px 127px;
</del><ins>+ -webkit-mask-size: 100px;
</ins><span class="cx"> -webkit-mask-repeat: space;
</span><span class="cx"> -webkit-mask-origin: padding-box;
</span><span class="cx"> -webkit-mask-position: 150px 150px; /* This should be igonored because of repeat: space */
</span></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that bitmap background images sized and positioned properly on subpixels.</title>
+<head>
+<style>
+ div {
+ background: black;
+ width: 9px;
+ height: 9px;
+ position: fixed;
+ }
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ adjustment = 0.1;
+ w=0.1; h=0.1;
+ for (i = 0; i < 15; ++i) {
+ adjustment+=0.1;
+ for (j = 0; j < 15; ++j) {
+ var e = document.createElement("div");
+ e.style.top = ((w + 1) * i + j * adjustment) + "px";
+ e.style.left = ((w + 1) * j + i * adjustment) + "px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+ }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that bitmap background images sized and positioned properly on subpixels.</title>
+<head>
+<style>
+ div {
+ background: url("resources/black25x25.png");
+ width: 9px;
+ height: 9px;
+ position: fixed;
+ }
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ adjustment = 0.1;
+ w=0.1; h=0.1;
+ for (i = 0; i < 15; ++i) {
+ adjustment+=0.1;
+ for (j = 0; j < 15; ++j) {
+ var e = document.createElement("div");
+ e.style.top = ((w + 1) * i + j * adjustment) + "px";
+ e.style.left = ((w + 1) * j + i * adjustment) + "px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+ }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,55 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that bitmap background images sized and positioned properly on subpixels when background-origin is present.</title>
+<style>
+ div {
+ background: red;
+ position: fixed;
+ height: 150px;
+ width: 25px;
+ top: 0px;
+ }
+ .box {
+ background: black;
+ height: 25px;
+ width: 25px;
+ }
+
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ w = 0;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = ((50 + w) * i) + "px";
+ e.style.height = (150 + w) + "px";
+ container.appendChild(e);
+ w+=0.1;
+ }
+
+ w = 0;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.className = "box";
+ e.style.top = "50px";
+ e.style.left = 25 + ((50 + w ) * i) + "px";
+ container.appendChild(e);
+ w+=0.1;
+ }
+
+ w = 0;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.className = "box";
+ e.style.top = "100px";
+ e.style.left = 25 + ((50 + w + 0.1) * i) + "px";
+ container.appendChild(e);
+ w+=0.1;
+ }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundoriginonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,63 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that bitmap background images sized and positioned properly on subpixels when background-origin is present.</title>
+<style>
+ div {
+ background: url("resources/black25x25.png");
+ position: fixed;
+ top: 0px;
+ background-repeat: no-repeat;
+ }
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ w=50; h=50;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundOrigin = "border-box";
+ e.style.borderLeft = "solid 25px red";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+
+ w=50; h=50;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.top = "50px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundOrigin = "padding-box";
+ e.style.borderLeft = "solid 25px red";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+
+ w=50; h=50;
+ padding = 0;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.top = "100px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundOrigin = "content-box";
+ e.style.paddingLeft = padding + "px";
+ e.style.borderLeft = "solid 25px red";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ padding+=0.1;
+ }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,62 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that bitmap background images sized and positioned properly on subpixels when background-repeat is present.</title>
+<style>
+ div {
+ background: black;
+ position: fixed;
+ top: 0px;
+ }
+ .thin {
+ background: white;
+ height: 0.5px;
+ width: 0.5px;
+ }
+ .thick {
+ background: white;
+ height: 1px;
+ width: 1px;
+ }
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ w=50; h=150;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundRepeat = "space";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+
+ w=25; h=25;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.top = "150px";
+ e.style.left = ((w + 25) * i) + "px";
+ e.style.width = "25px";
+ e.style.height = "25px";
+ e.style.backgroundRepeat = "space";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+</script>
+<div class=thin style="left: 151px; top: 25px; width: 255px;"></div>
+<div class=thick style="left: 406px; top: 25px; width: 105px;"></div>
+<div class=thin style="left: 176px; top: 0px; height: 50px;"></div>
+<div class=thin style="left: 226.5px; top: 0px; height: 50px;"></div>
+<div class=thin style="left: 277.5px; top: 0px; height: 50px;"></div>
+<div class=thin style="left: 328.5px; top: 0px; height: 50px;"></div>
+<div class=thin style="left: 380px; top: 0px; height: 50px;"></div>
+<div class=thick style="left: 431.5px; top: 0px; height: 50px;"></div>
+<div class=thick style="left: 483px; top: 0px; height: 50px;"></div>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpibitmapbackgroundrepeatonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,69 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that bitmap background images sized and positioned properly on subpixels when background-repeat is present.</title>
+<style>
+ div {
+ background: url("resources/black25x25.png");
+ position: fixed;
+ top: 0px;
+ }
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ w=50; h=50;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundRepeat = "space";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+
+ w=50; h=50;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.top = "50px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundRepeat = "round";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+
+ w=50; h=50;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.top = "100px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundRepeat = "repeat";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+
+ w=50; h=50;
+ for (i = 0; i < 10; ++i) {
+ var e = document.createElement("div");
+ e.style.left = (w * i) + "px";
+ e.style.top = "150px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ e.style.backgroundRepeat = "no-repeat";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position-expected.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that generated background images sized and positioned properly on subpixels.</title>
+<head>
+<style>
+ div {
+ background: black;
+ width: 9px;
+ height: 9px;
+ position: fixed;
+ }
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ adjustment = 0.1;
+ w=0.1; h=0.1;
+ for (i = 0; i < 15; ++i) {
+ adjustment+=0.1;
+ for (j = 0; j < 15; ++j) {
+ var e = document.createElement("div");
+ e.style.top = ((w + 1) * i + j * adjustment) + "px";
+ e.style.left = ((w + 1) * j + i * adjustment) + "px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+ }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundshidpigeneratedgradientbackgroundonsubpixelpositionhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html (0 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html         (rev 0)
+++ trunk/LayoutTests/fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -0,0 +1,36 @@
</span><ins>+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that generated background images sized and positioned properly on subpixels.</title>
+<head>
+<style>
+ div {
+ background: -webkit-linear-gradient(black, black);
+ width: 9px;
+ height: 9px;
+ position: fixed;
+ }
+</style>
+</head>
+<body>
+<p id="container"></p>
+<script>
+ var container = document.getElementById("container");
+ adjustment = 0.1;
+ w=0.1; h=0.1;
+ for (i = 0; i < 15; ++i) {
+ adjustment+=0.1;
+ for (j = 0; j < 15; ++j) {
+ var e = document.createElement("div");
+ e.style.top = ((w + 1) * i + j * adjustment) + "px";
+ e.style.left = ((w + 1) * j + i * adjustment) + "px";
+ e.style.width = w + "px";
+ e.style.height = h + "px";
+ container.appendChild(e);
+ w+=0.1;
+ h+=0.1;
+ }
+ }
+</script>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkLayoutTestsfastbackgroundsresourcesblack25x25png"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/fast/backgrounds/resources/black25x25.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx">Property changes on: trunk/LayoutTests/fast/backgrounds/resources/black25x25.png
</span><span class="cx">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/ChangeLog        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1,3 +1,71 @@
</span><ins>+2014-04-04 Zalan Bujtas <zalan@apple.com>
+
+ Subpixel rendering: Move background images to device pixel boundaries.
+ https://bugs.webkit.org/show_bug.cgi?id=131144
+
+ Reviewed by Simon Fraser.
+
+ Replace integral snapping with device pixel snapping.
+ Background image geometry calculation uses LayoutUnits and we snap to device pixels right before painting.
+
+ Tests: fast/backgrounds/hidpi-bitmap-background-on-subpixel-position.html
+ fast/backgrounds/hidpi-bitmap-background-origin-on-subpixel-position.html
+ fast/backgrounds/hidpi-bitmap-background-repeat-on-subpixel-position.html
+ fast/backgrounds/hidpi-generated-gradient-background-on-subpixel-position.html
+
+ * platform/graphics/GraphicsLayer.h:
+ (WebCore::GraphicsLayer::setContentsTilePhase):
+ (WebCore::GraphicsLayer::contentsTilePhase):
+ (WebCore::GraphicsLayer::setContentsTileSize):
+ (WebCore::GraphicsLayer::contentsTileSize):
+ * platform/graphics/texmap/TextureMapperLayer.cpp:
+ (WebCore::TextureMapperLayer::setContentsTileSize):
+ (WebCore::TextureMapperLayer::setContentsTilePhase):
+ * platform/graphics/texmap/TextureMapperLayer.h:
+ * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp:
+ (WebCore::CoordinatedGraphicsLayer::setContentsTileSize):
+ (WebCore::CoordinatedGraphicsLayer::setContentsTilePhase):
+ * platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h:
+ * platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h:
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::repaintLayerRectsForImage):
+ * rendering/RenderBoxModelObject.cpp:
+ (WebCore::RenderBoxModelObject::paintFillLayerExtended):
+ (WebCore::resolveWidthForRatio):
+ (WebCore::resolveHeightForRatio):
+ (WebCore::resolveAgainstIntrinsicWidthOrHeightAndRatio):
+ (WebCore::resolveAgainstIntrinsicRatio):
+ (WebCore::RenderBoxModelObject::calculateImageIntrinsicDimensions):
+ (WebCore::RenderBoxModelObject::calculateFillTileSize):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::clip):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::relativePhase):
+ (WebCore::getSpace):
+ (WebCore::RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting):
+ (WebCore::RenderBoxModelObject::calculateBackgroundImageGeometry):
+ (WebCore::RenderBoxModelObject::getGeometryForBackgroundImage):
+ (WebCore::RenderBoxModelObject::paintNinePieceImage):
+ (WebCore::applySubPixelHeuristicForTileSize): Deleted.
+ * rendering/RenderBoxModelObject.h:
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destOrigin):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestOrigin):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::destRect):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setDestRect):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::phase):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhase):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::tileSize):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setTileSize):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::spaceSize):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setSpaceSize):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseX):
+ (WebCore::RenderBoxModelObject::BackgroundImageGeometry::setPhaseY):
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateDirectlyCompositedBackgroundImage):
+ * rendering/shapes/ShapeOutsideInfo.cpp:
+ (WebCore::getShapeImageAndRect):
+
</ins><span class="cx"> 2014-04-04 Brent Fulgham <bfulgham@apple.com>
</span><span class="cx">
</span><span class="cx"> [Win] Unreviewed test fix (crash in debug build).
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -368,11 +368,11 @@
</span><span class="cx"> virtual void setContentsNeedsDisplay() { };
</span><span class="cx">
</span><span class="cx"> // The tile phase is relative to the GraphicsLayer bounds.
</span><del>- virtual void setContentsTilePhase(const IntPoint& p) { m_contentsTilePhase = p; }
- IntPoint contentsTilePhase() const { return m_contentsTilePhase; }
</del><ins>+ virtual void setContentsTilePhase(const FloatPoint& p) { m_contentsTilePhase = p; }
+ FloatPoint contentsTilePhase() const { return m_contentsTilePhase; }
</ins><span class="cx">
</span><del>- virtual void setContentsTileSize(const IntSize& s) { m_contentsTileSize = s; }
- IntSize contentsTileSize() const { return m_contentsTileSize; }
</del><ins>+ virtual void setContentsTileSize(const FloatSize& s) { m_contentsTileSize = s; }
+ FloatSize contentsTileSize() const { return m_contentsTileSize; }
</ins><span class="cx"> bool hasContentsTiling() const { return !m_contentsTileSize.isEmpty(); }
</span><span class="cx">
</span><span class="cx"> // Set that the position/size of the contents (image or video).
</span><span class="lines">@@ -610,8 +610,8 @@
</span><span class="cx">
</span><span class="cx"> FloatRect m_contentsRect;
</span><span class="cx"> FloatRect m_contentsClippingRect;
</span><del>- IntPoint m_contentsTilePhase;
- IntSize m_contentsTileSize;
</del><ins>+ FloatPoint m_contentsTilePhase;
+ FloatSize m_contentsTileSize;
</ins><span class="cx">
</span><span class="cx"> int m_repaintCount;
</span><span class="cx"> CustomAppearance m_customAppearance;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -568,7 +568,7 @@
</span><span class="cx"> m_patternTransformDirty = true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void TextureMapperLayer::setContentsTileSize(const IntSize& size)
</del><ins>+void TextureMapperLayer::setContentsTileSize(const FloatSize& size)
</ins><span class="cx"> {
</span><span class="cx"> if (size == m_state.contentsTileSize)
</span><span class="cx"> return;
</span><span class="lines">@@ -576,7 +576,7 @@
</span><span class="cx"> m_patternTransformDirty = true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void TextureMapperLayer::setContentsTilePhase(const IntPoint& phase)
</del><ins>+void TextureMapperLayer::setContentsTilePhase(const FloatPoint& phase)
</ins><span class="cx"> {
</span><span class="cx"> if (phase == m_state.contentsTilePhase)
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapTextureMapperLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -99,8 +99,8 @@
</span><span class="cx"> void setBackfaceVisibility(bool);
</span><span class="cx"> void setOpacity(float);
</span><span class="cx"> void setSolidColor(const Color&);
</span><del>- void setContentsTileSize(const IntSize&);
- void setContentsTilePhase(const IntPoint&);
</del><ins>+ void setContentsTileSize(const FloatSize&);
+ void setContentsTilePhase(const FloatPoint&);
</ins><span class="cx"> #if ENABLE(CSS_FILTERS)
</span><span class="cx"> void setFilters(const FilterOperations&);
</span><span class="cx"> #endif
</span><span class="lines">@@ -210,8 +210,8 @@
</span><span class="cx"> TransformationMatrix childrenTransform;
</span><span class="cx"> float opacity;
</span><span class="cx"> FloatRect contentsRect;
</span><del>- IntSize contentsTileSize;
- IntPoint contentsTilePhase;
</del><ins>+ FloatSize contentsTileSize;
+ FloatPoint contentsTilePhase;
</ins><span class="cx"> TextureMapperLayer* maskLayer;
</span><span class="cx"> TextureMapperLayer* replicaLayer;
</span><span class="cx"> Color solidColor;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -346,7 +346,7 @@
</span><span class="cx"> didChangeLayerState();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void CoordinatedGraphicsLayer::setContentsTileSize(const IntSize& s)
</del><ins>+void CoordinatedGraphicsLayer::setContentsTileSize(const FloatSize& s)
</ins><span class="cx"> {
</span><span class="cx"> if (contentsTileSize() == s)
</span><span class="cx"> return;
</span><span class="lines">@@ -357,7 +357,7 @@
</span><span class="cx"> didChangeLayerState();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void CoordinatedGraphicsLayer::setContentsTilePhase(const IntPoint& p)
</del><ins>+void CoordinatedGraphicsLayer::setContentsTilePhase(const FloatPoint& p)
</ins><span class="cx"> {
</span><span class="cx"> if (contentsTilePhase() == p)
</span><span class="cx"> return;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsLayer.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -85,8 +85,8 @@
</span><span class="cx"> virtual void setBackfaceVisibility(bool) override;
</span><span class="cx"> virtual void setOpacity(float) override;
</span><span class="cx"> virtual void setContentsRect(const FloatRect&) override;
</span><del>- virtual void setContentsTilePhase(const IntPoint&) override;
- virtual void setContentsTileSize(const IntSize&) override;
</del><ins>+ virtual void setContentsTilePhase(const FloatPoint&) override;
+ virtual void setContentsTileSize(const FloatSize&) override;
</ins><span class="cx"> virtual void setContentsToImage(Image*) override;
</span><span class="cx"> virtual void setContentsToSolidColor(const Color&) override;
</span><span class="cx"> virtual void setShowDebugBorder(bool) override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstexmapcoordinatedCoordinatedGraphicsStateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/platform/graphics/texmap/coordinated/CoordinatedGraphicsState.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -142,8 +142,8 @@
</span><span class="cx"> TransformationMatrix transform;
</span><span class="cx"> TransformationMatrix childrenTransform;
</span><span class="cx"> FloatRect contentsRect;
</span><del>- IntPoint contentsTilePhase;
- IntSize contentsTileSize;
</del><ins>+ FloatPoint contentsTilePhase;
+ FloatSize contentsTileSize;
</ins><span class="cx"> float opacity;
</span><span class="cx"> Color solidColor;
</span><span class="cx"> Color debugBorderColor;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1623,7 +1623,7 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- IntRect rectToRepaint = geometry.destRect();
</del><ins>+ LayoutRect rectToRepaint = geometry.destRect();
</ins><span class="cx"> bool shouldClipToLayer = true;
</span><span class="cx">
</span><span class="cx"> // If this is the root background layer, we may need to extend the repaintRect if the FrameView has an
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxModelObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -773,11 +773,11 @@
</span><span class="cx"> // FIXME: In the bgLayer->hasFiniteBounds() case, we could improve the culling test
</span><span class="cx"> // by verifying whether the background image covers the entire layout rect.
</span><span class="cx"> if (!bgLayer->next()) {
</span><del>- IntRect backgroundRect(pixelSnappedIntRect(scrolledPaintRect));
</del><ins>+ LayoutRect backgroundRect(scrolledPaintRect);
</ins><span class="cx"> bool boxShadowShouldBeAppliedToBackground = this->boxShadowShouldBeAppliedToBackground(bleedAvoidance, box);
</span><span class="cx"> if (boxShadowShouldBeAppliedToBackground || !shouldPaintBackgroundImage || !bgLayer->hasOpaqueImage(this) || !bgLayer->hasRepeatXY()) {
</span><span class="cx"> if (!boxShadowShouldBeAppliedToBackground)
</span><del>- backgroundRect.intersect(pixelSnappedIntRect(paintInfo.rect));
</del><ins>+ backgroundRect.intersect(paintInfo.rect);
</ins><span class="cx">
</span><span class="cx"> // If we have an alpha and we are painting the root element, go ahead and blend with the base background color.
</span><span class="cx"> Color baseColor;
</span><span class="lines">@@ -792,16 +792,17 @@
</span><span class="cx"> if (boxShadowShouldBeAppliedToBackground)
</span><span class="cx"> applyBoxShadowForBackground(context, &style());
</span><span class="cx">
</span><ins>+ FloatRect backgroundRectForPainting = pixelSnappedForPainting(backgroundRect, deviceScaleFactor);
</ins><span class="cx"> if (baseColor.alpha()) {
</span><span class="cx"> if (bgColor.alpha())
</span><span class="cx"> baseColor = baseColor.blend(bgColor);
</span><span class="cx">
</span><del>- context->fillRect(backgroundRect, baseColor, style().colorSpace(), CompositeCopy);
</del><ins>+ context->fillRect(backgroundRectForPainting, baseColor, style().colorSpace(), CompositeCopy);
</ins><span class="cx"> } else if (bgColor.alpha()) {
</span><span class="cx"> CompositeOperator operation = shouldClearBackground ? CompositeCopy : context->compositeOperation();
</span><del>- context->fillRect(backgroundRect, bgColor, style().colorSpace(), operation);
</del><ins>+ context->fillRect(backgroundRectForPainting, bgColor, style().colorSpace(), operation);
</ins><span class="cx"> } else if (shouldClearBackground)
</span><del>- context->clearRect(backgroundRect);
</del><ins>+ context->clearRect(backgroundRectForPainting);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -809,7 +810,7 @@
</span><span class="cx"> if (shouldPaintBackgroundImage) {
</span><span class="cx"> BackgroundImageGeometry geometry;
</span><span class="cx"> calculateBackgroundImageGeometry(paintInfo.paintContainer, bgLayer, scrolledPaintRect, geometry, backgroundObject);
</span><del>- geometry.clip(pixelSnappedIntRect(paintInfo.rect));
</del><ins>+ geometry.clip(LayoutRect(pixelSnappedRect));
</ins><span class="cx"> if (!geometry.destRect().isEmpty()) {
</span><span class="cx"> CompositeOperator compositeOp = op == CompositeSourceOver ? bgLayer->composite() : op;
</span><span class="cx"> auto clientForBackgroundImage = backgroundObject ? backgroundObject : this;
</span><span class="lines">@@ -818,8 +819,7 @@
</span><span class="cx"> bool useLowQualityScaling = shouldPaintAtLowQuality(context, image.get(), bgLayer, geometry.tileSize());
</span><span class="cx"> if (image.get())
</span><span class="cx"> image->setSpaceSize(geometry.spaceSize());
</span><del>- context->drawTiledImage(image.get(), style().colorSpace(), geometry.destRect(), geometry.relativePhase(), geometry.tileSize(),
- compositeOp, useLowQualityScaling, bgLayer->blendMode());
</del><ins>+ context->drawTiledImage(image.get(), style().colorSpace(), geometry.destRect(), geometry.relativePhase(), geometry.tileSize(), compositeOp, useLowQualityScaling, bgLayer->blendMode());
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -829,60 +829,60 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static inline int resolveWidthForRatio(int height, const FloatSize& intrinsicRatio)
</del><ins>+static inline int resolveWidthForRatio(LayoutUnit height, const FloatSize& intrinsicRatio)
</ins><span class="cx"> {
</span><del>- return ceilf(height * intrinsicRatio.width() / intrinsicRatio.height());
</del><ins>+ return height * intrinsicRatio.width() / intrinsicRatio.height();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-static inline int resolveHeightForRatio(int width, const FloatSize& intrinsicRatio)
</del><ins>+static inline int resolveHeightForRatio(LayoutUnit width, const FloatSize& intrinsicRatio)
</ins><span class="cx"> {
</span><del>- return ceilf(width * intrinsicRatio.height() / intrinsicRatio.width());
</del><ins>+ return width * intrinsicRatio.height() / intrinsicRatio.width();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-static inline IntSize resolveAgainstIntrinsicWidthOrHeightAndRatio(const IntSize& size, const FloatSize& intrinsicRatio, int useWidth, int useHeight)
</del><ins>+static inline LayoutSize resolveAgainstIntrinsicWidthOrHeightAndRatio(const LayoutSize& size, const FloatSize& intrinsicRatio, LayoutUnit useWidth, LayoutUnit useHeight)
</ins><span class="cx"> {
</span><span class="cx"> if (intrinsicRatio.isEmpty()) {
</span><span class="cx"> if (useWidth)
</span><del>- return IntSize(useWidth, size.height());
- return IntSize(size.width(), useHeight);
</del><ins>+ return LayoutSize(useWidth, size.height());
+ return LayoutSize(size.width(), useHeight);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (useWidth)
</span><del>- return IntSize(useWidth, resolveHeightForRatio(useWidth, intrinsicRatio));
- return IntSize(resolveWidthForRatio(useHeight, intrinsicRatio), useHeight);
</del><ins>+ return LayoutSize(useWidth, resolveHeightForRatio(useWidth, intrinsicRatio));
+ return LayoutSize(resolveWidthForRatio(useHeight, intrinsicRatio), useHeight);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-static inline IntSize resolveAgainstIntrinsicRatio(const IntSize& size, const FloatSize& intrinsicRatio)
</del><ins>+static inline LayoutSize resolveAgainstIntrinsicRatio(const LayoutSize& size, const FloatSize& intrinsicRatio)
</ins><span class="cx"> {
</span><span class="cx"> // Two possible solutions: (size.width(), solutionHeight) or (solutionWidth, size.height())
</span><span class="cx"> // "... must be assumed to be the largest dimensions..." = easiest answer: the rect with the largest surface area.
</span><span class="cx">
</span><del>- int solutionWidth = resolveWidthForRatio(size.height(), intrinsicRatio);
- int solutionHeight = resolveHeightForRatio(size.width(), intrinsicRatio);
</del><ins>+ LayoutUnit solutionWidth = resolveWidthForRatio(size.height(), intrinsicRatio);
+ LayoutUnit solutionHeight = resolveHeightForRatio(size.width(), intrinsicRatio);
</ins><span class="cx"> if (solutionWidth <= size.width()) {
</span><span class="cx"> if (solutionHeight <= size.height()) {
</span><span class="cx"> // If both solutions fit, choose the one covering the larger area.
</span><del>- int areaOne = solutionWidth * size.height();
- int areaTwo = size.width() * solutionHeight;
</del><ins>+ LayoutUnit areaOne = solutionWidth * size.height();
+ LayoutUnit areaTwo = size.width() * solutionHeight;
</ins><span class="cx"> if (areaOne < areaTwo)
</span><del>- return IntSize(size.width(), solutionHeight);
- return IntSize(solutionWidth, size.height());
</del><ins>+ return LayoutSize(size.width(), solutionHeight);
+ return LayoutSize(solutionWidth, size.height());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Only the first solution fits.
</span><del>- return IntSize(solutionWidth, size.height());
</del><ins>+ return LayoutSize(solutionWidth, size.height());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Only the second solution fits, assert that.
</span><span class="cx"> ASSERT(solutionHeight <= size.height());
</span><del>- return IntSize(size.width(), solutionHeight);
</del><ins>+ return LayoutSize(size.width(), solutionHeight);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-IntSize RenderBoxModelObject::calculateImageIntrinsicDimensions(StyleImage* image, const IntSize& positioningAreaSize, ScaleByEffectiveZoomOrNot shouldScaleOrNot) const
</del><ins>+LayoutSize RenderBoxModelObject::calculateImageIntrinsicDimensions(StyleImage* image, const LayoutSize& positioningAreaSize, ScaleByEffectiveZoomOrNot shouldScaleOrNot) const
</ins><span class="cx"> {
</span><span class="cx"> // A generated image without a fixed size, will always return the container size as intrinsic size.
</span><span class="cx"> if (image->isGeneratedImage() && image->usesImageContainerSize())
</span><del>- return IntSize(positioningAreaSize.width(), positioningAreaSize.height());
</del><ins>+ return LayoutSize(positioningAreaSize.width(), positioningAreaSize.height());
</ins><span class="cx">
</span><span class="cx"> Length intrinsicWidth;
</span><span class="cx"> Length intrinsicHeight;
</span><span class="lines">@@ -895,13 +895,13 @@
</span><span class="cx"> // FIXME: Remove unnecessary rounding when layout is off ints: webkit.org/b/63656
</span><span class="cx"> if (intrinsicWidth.isPercent() && intrinsicHeight.isPercent() && intrinsicRatio.isEmpty()) {
</span><span class="cx"> // Resolve width/height percentages against positioningAreaSize, only if no intrinsic ratio is provided.
</span><del>- int resolvedWidth = static_cast<int>(round(positioningAreaSize.width() * intrinsicWidth.percent() / 100));
- int resolvedHeight = static_cast<int>(round(positioningAreaSize.height() * intrinsicHeight.percent() / 100));
- return IntSize(resolvedWidth, resolvedHeight);
</del><ins>+ float resolvedWidth = positioningAreaSize.width() * intrinsicWidth.percent() / 100;
+ float resolvedHeight = positioningAreaSize.height() * intrinsicHeight.percent() / 100;
+ return LayoutSize(resolvedWidth, resolvedHeight);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- IntSize resolvedSize(intrinsicWidth.isFixed() ? intrinsicWidth.value() : 0, intrinsicHeight.isFixed() ? intrinsicHeight.value() : 0);
- IntSize minimumSize(resolvedSize.width() > 0 ? 1 : 0, resolvedSize.height() > 0 ? 1 : 0);
</del><ins>+ LayoutSize resolvedSize(intrinsicWidth.isFixed() ? intrinsicWidth.value() : 0, intrinsicHeight.isFixed() ? intrinsicHeight.value() : 0);
+ LayoutSize minimumSize(resolvedSize.width() > 0 ? 1 : 0, resolvedSize.height() > 0 ? 1 : 0);
</ins><span class="cx"> if (shouldScaleOrNot == ScaleByEffectiveZoom)
</span><span class="cx"> resolvedSize.scale(style().effectiveZoom());
</span><span class="cx"> resolvedSize.clampToMinimumSize(minimumSize);
</span><span class="lines">@@ -927,18 +927,12 @@
</span><span class="cx"> return positioningAreaSize;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static inline void applySubPixelHeuristicForTileSize(LayoutSize& tileSize, const IntSize& positioningAreaSize)
</del><ins>+LayoutSize RenderBoxModelObject::calculateFillTileSize(const FillLayer* fillLayer, const LayoutSize& positioningAreaSize) const
</ins><span class="cx"> {
</span><del>- tileSize.setWidth(positioningAreaSize.width() - tileSize.width() <= 1 ? tileSize.width().ceil() : tileSize.width().floor());
- tileSize.setHeight(positioningAreaSize.height() - tileSize.height() <= 1 ? tileSize.height().ceil() : tileSize.height().floor());
-}
-
-IntSize RenderBoxModelObject::calculateFillTileSize(const FillLayer* fillLayer, const IntSize& positioningAreaSize) const
-{
</del><span class="cx"> StyleImage* image = fillLayer->image();
</span><span class="cx"> EFillSizeType type = fillLayer->size().type;
</span><span class="cx">
</span><del>- IntSize imageIntrinsicSize = calculateImageIntrinsicDimensions(image, positioningAreaSize, ScaleByEffectiveZoom);
</del><ins>+ LayoutSize imageIntrinsicSize = calculateImageIntrinsicDimensions(image, positioningAreaSize, ScaleByEffectiveZoom);
</ins><span class="cx"> imageIntrinsicSize.scale(1 / image->imageScaleFactor(), 1 / image->imageScaleFactor());
</span><span class="cx"> switch (type) {
</span><span class="cx"> case SizeLength: {
</span><span class="lines">@@ -957,8 +951,6 @@
</span><span class="cx"> else if (layerHeight.isPercent() || layerHeight.isViewportPercentage())
</span><span class="cx"> tileSize.setHeight(valueForLength(layerHeight, positioningAreaSize.height()));
</span><span class="cx">
</span><del>- applySubPixelHeuristicForTileSize(tileSize, positioningAreaSize);
-
</del><span class="cx"> // If one of the values is auto we have to use the appropriate
</span><span class="cx"> // scale to maintain our aspect ratio.
</span><span class="cx"> if (layerWidth.isAuto() && !layerHeight.isAuto()) {
</span><span class="lines">@@ -973,7 +965,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> tileSize.clampNegativeToZero();
</span><del>- return flooredIntSize(tileSize);
</del><ins>+ return tileSize;
</ins><span class="cx"> }
</span><span class="cx"> case SizeNone: {
</span><span class="cx"> // If both values are ‘auto’ then the intrinsic width and/or height of the image should be used, if any.
</span><span class="lines">@@ -986,46 +978,46 @@
</span><span class="cx"> FALLTHROUGH;
</span><span class="cx"> case Contain:
</span><span class="cx"> case Cover: {
</span><del>- float horizontalScaleFactor = imageIntrinsicSize.width()
- ? static_cast<float>(positioningAreaSize.width()) / imageIntrinsicSize.width() : 1;
- float verticalScaleFactor = imageIntrinsicSize.height()
- ? static_cast<float>(positioningAreaSize.height()) / imageIntrinsicSize.height() : 1;
</del><ins>+ float horizontalScaleFactor = imageIntrinsicSize.width() ? (positioningAreaSize.width() / imageIntrinsicSize.width()).toFloat() : 1;
+ float verticalScaleFactor = imageIntrinsicSize.height() ? (positioningAreaSize.height() / imageIntrinsicSize.height()).toFloat() : 1;
</ins><span class="cx"> float scaleFactor = type == Contain ? std::min(horizontalScaleFactor, verticalScaleFactor) : std::max(horizontalScaleFactor, verticalScaleFactor);
</span><del>- return IntSize(std::max(1, static_cast<int>(imageIntrinsicSize.width() * scaleFactor)), std::max(1, static_cast<int>(imageIntrinsicSize.height() * scaleFactor)));
</del><ins>+ float deviceScaleFactor = document().deviceScaleFactor();
+ return LayoutSize(std::max<LayoutUnit>(1 / deviceScaleFactor, imageIntrinsicSize.width() * scaleFactor),
+ std::max<LayoutUnit>(1 / deviceScaleFactor, imageIntrinsicSize.height() * scaleFactor));
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ASSERT_NOT_REACHED();
</span><del>- return IntSize();
</del><ins>+ return LayoutSize();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX(int xOffset)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatX(LayoutUnit xOffset)
</ins><span class="cx"> {
</span><del>- m_destRect.move(std::max(xOffset, 0), 0);
- m_phase.setX(-std::min(xOffset, 0));
- m_destRect.setWidth(m_tileSize.width() + std::min(xOffset, 0));
</del><ins>+ m_destRect.move(std::max<LayoutUnit>(xOffset, 0), 0);
+ m_phase.setX(-std::min<LayoutUnit>(xOffset, 0));
+ m_destRect.setWidth(m_tileSize.width() + std::min<float>(xOffset, 0));
</ins><span class="cx"> }
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY(int yOffset)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::setNoRepeatY(LayoutUnit yOffset)
</ins><span class="cx"> {
</span><del>- m_destRect.move(0, std::max(yOffset, 0));
- m_phase.setY(-std::min(yOffset, 0));
- m_destRect.setHeight(m_tileSize.height() + std::min(yOffset, 0));
</del><ins>+ m_destRect.move(0, std::max<LayoutUnit>(yOffset, 0));
+ m_phase.setY(-std::min<LayoutUnit>(yOffset, 0));
+ m_destRect.setHeight(m_tileSize.height() + std::min<float>(yOffset, 0));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment(const IntPoint& attachmentPoint)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::useFixedAttachment(const LayoutPoint& attachmentPoint)
</ins><span class="cx"> {
</span><del>- IntPoint alignedPoint = attachmentPoint;
- m_phase.move(std::max(alignedPoint.x() - m_destRect.x(), 0), std::max(alignedPoint.y() - m_destRect.y(), 0));
</del><ins>+ FloatPoint alignedPoint = attachmentPoint;
+ m_phase.move(std::max<LayoutUnit>(alignedPoint.x() - m_destRect.x(), 0), std::max<LayoutUnit>(alignedPoint.y() - m_destRect.y(), 0));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderBoxModelObject::BackgroundImageGeometry::clip(const IntRect& clipRect)
</del><ins>+void RenderBoxModelObject::BackgroundImageGeometry::clip(const LayoutRect& clipRect)
</ins><span class="cx"> {
</span><span class="cx"> m_destRect.intersect(clipRect);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-IntPoint RenderBoxModelObject::BackgroundImageGeometry::relativePhase() const
</del><ins>+LayoutPoint RenderBoxModelObject::BackgroundImageGeometry::relativePhase() const
</ins><span class="cx"> {
</span><del>- IntPoint phase = m_phase;
</del><ins>+ LayoutPoint phase = m_phase;
</ins><span class="cx"> phase += m_destRect.location() - m_destOrigin;
</span><span class="cx"> return phase;
</span><span class="cx"> }
</span><span class="lines">@@ -1045,25 +1037,34 @@
</span><span class="cx"> return rootLayer->backing()->backgroundLayerPaintsFixedRootBackground();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-static inline int getSpace(int areaSize, int tileSize)
</del><ins>+static inline LayoutUnit getSpace(LayoutUnit areaSize, LayoutUnit tileSize)
</ins><span class="cx"> {
</span><span class="cx"> int numberOfTiles = areaSize / tileSize;
</span><del>- int space = -1;
</del><ins>+ LayoutUnit space = -1;
</ins><span class="cx">
</span><span class="cx"> if (numberOfTiles > 1)
</span><del>- space = roundedLayoutUnit((float)(areaSize - numberOfTiles * tileSize) / (numberOfTiles - 1));
</del><ins>+ space = (areaSize - numberOfTiles * tileSize) / (numberOfTiles - 1);
</ins><span class="cx">
</span><span class="cx"> return space;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderBoxModelObject::pixelSnapBackgroundImageGeometryForPainting(BackgroundImageGeometry& geometry) const
+{
+ float deviceScaleFactor = document().deviceScaleFactor();
+ // FIXME: We need a better rounding strategy to round/space out tiles.
+ geometry.setTileSize(LayoutSize(pixelSnappedForPainting(LayoutRect(geometry.destRect().location(), geometry.tileSize()), deviceScaleFactor).size()));
+ geometry.setSpaceSize(LayoutSize(pixelSnappedForPainting(LayoutRect(LayoutPoint(), geometry.spaceSize()), deviceScaleFactor).size()));
+ geometry.setDestOrigin(LayoutPoint(roundedForPainting(geometry.destOrigin(), deviceScaleFactor)));
+ geometry.setDestRect(LayoutRect(pixelSnappedForPainting(geometry.destRect(), deviceScaleFactor)));
+ geometry.setPhase(LayoutPoint(roundedForPainting(geometry.phase(), deviceScaleFactor)));
+}
+
</ins><span class="cx"> void RenderBoxModelObject::calculateBackgroundImageGeometry(const RenderLayerModelObject* paintContainer, const FillLayer* fillLayer, const LayoutRect& paintRect,
</span><span class="cx"> BackgroundImageGeometry& geometry, RenderElement* backgroundObject) const
</span><span class="cx"> {
</span><span class="cx"> LayoutUnit left = 0;
</span><span class="cx"> LayoutUnit top = 0;
</span><del>- IntSize positioningAreaSize;
- IntRect snappedPaintRect = pixelSnappedIntRect(paintRect);
-
</del><ins>+ LayoutSize positioningAreaSize;
</ins><span class="cx"> // Determine the background positioning area and set destRect to the background painting area.
</span><span class="cx"> // destRect will be adjusted later if the background is non-repeating.
</span><span class="cx"> // FIXME: transforms spec says that fixed backgrounds behave like scroll inside transforms. https://bugs.webkit.org/show_bug.cgi?id=15679
</span><span class="lines">@@ -1080,7 +1081,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (!fixedAttachment) {
</span><del>- geometry.setDestRect(snappedPaintRect);
</del><ins>+ geometry.setDestRect(paintRect);
</ins><span class="cx">
</span><span class="cx"> LayoutUnit right = 0;
</span><span class="cx"> LayoutUnit bottom = 0;
</span><span class="lines">@@ -1102,14 +1103,14 @@
</span><span class="cx"> // its margins. Since those were added in already, we have to factor them out when computing
</span><span class="cx"> // the background positioning area.
</span><span class="cx"> if (isRoot()) {
</span><del>- positioningAreaSize = pixelSnappedIntSize(toRenderBox(this)->size() - LayoutSize(left + right, top + bottom), toRenderBox(this)->location());
</del><ins>+ positioningAreaSize = toRenderBox(this)->size() - LayoutSize(left + right, top + bottom);
</ins><span class="cx"> if (view().frameView().hasExtendedBackgroundRectForPainting()) {
</span><del>- IntRect extendedBackgroundRect = view().frameView().extendedBackgroundRectForPainting();
</del><ins>+ LayoutRect extendedBackgroundRect = view().frameView().extendedBackgroundRectForPainting();
</ins><span class="cx"> left += (marginLeft() - extendedBackgroundRect.x());
</span><span class="cx"> top += (marginTop() - extendedBackgroundRect.y());
</span><span class="cx"> }
</span><span class="cx"> } else
</span><del>- positioningAreaSize = pixelSnappedIntSize(paintRect.size() - LayoutSize(left + right, top + bottom), paintRect.location());
</del><ins>+ positioningAreaSize = paintRect.size() - LayoutSize(left + right, top + bottom);
</ins><span class="cx"> } else {
</span><span class="cx"> geometry.setHasNonLocalGeometry();
</span><span class="cx">
</span><span class="lines">@@ -1119,107 +1120,102 @@
</span><span class="cx"> else
</span><span class="cx"> viewportRect.setLocation(toLayoutPoint(view().frameView().scrollOffsetForFixedPosition()));
</span><span class="cx">
</span><del>- if (paintContainer) {
- LayoutPoint absoluteContainerOffset = roundedLayoutPoint(paintContainer->localToAbsolute(FloatPoint()));
- viewportRect.moveBy(-absoluteContainerOffset);
- }
</del><ins>+ if (paintContainer)
+ viewportRect.moveBy(LayoutPoint(-paintContainer->localToAbsolute(FloatPoint())));
</ins><span class="cx">
</span><del>- geometry.setDestRect(pixelSnappedIntRect(viewportRect));
</del><ins>+ geometry.setDestRect(viewportRect);
</ins><span class="cx"> positioningAreaSize = geometry.destRect().size();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> auto clientForBackgroundImage = backgroundObject ? backgroundObject : this;
</span><del>- IntSize fillTileSize = calculateFillTileSize(fillLayer, positioningAreaSize);
</del><ins>+ LayoutSize fillTileSize = calculateFillTileSize(fillLayer, positioningAreaSize);
</ins><span class="cx"> fillLayer->image()->setContainerSizeForRenderer(clientForBackgroundImage, fillTileSize, style().effectiveZoom());
</span><span class="cx"> geometry.setTileSize(fillTileSize);
</span><span class="cx">
</span><span class="cx"> EFillRepeat backgroundRepeatX = fillLayer->repeatX();
</span><span class="cx"> EFillRepeat backgroundRepeatY = fillLayer->repeatY();
</span><del>- int availableWidth = positioningAreaSize.width() - geometry.tileSize().width();
- int availableHeight = positioningAreaSize.height() - geometry.tileSize().height();
</del><ins>+ LayoutUnit availableWidth = positioningAreaSize.width() - geometry.tileSize().width();
+ LayoutUnit availableHeight = positioningAreaSize.height() - geometry.tileSize().height();
</ins><span class="cx">
</span><span class="cx"> LayoutUnit computedXPosition = minimumValueForLength(fillLayer->xPosition(), availableWidth, true);
</span><span class="cx"> if (backgroundRepeatX == RoundFill && positioningAreaSize.width() > 0 && fillTileSize.width() > 0) {
</span><del>- long nrTiles = lroundf((float)positioningAreaSize.width() / fillTileSize.width());
- if (!nrTiles)
- nrTiles = 1;
-
</del><ins>+ int numTiles = std::max(1, roundToInt(positioningAreaSize.width() / fillTileSize.width()));
</ins><span class="cx"> if (fillLayer->size().size.height().isAuto() && backgroundRepeatY != RoundFill)
</span><del>- fillTileSize.setHeight(fillTileSize.height() * positioningAreaSize.width() / (nrTiles * fillTileSize.width()));
</del><ins>+ fillTileSize.setHeight(fillTileSize.height() * positioningAreaSize.width() / (numTiles * fillTileSize.width()));
</ins><span class="cx">
</span><del>- fillTileSize.setWidth(positioningAreaSize.width() / nrTiles);
</del><ins>+ fillTileSize.setWidth(positioningAreaSize.width() / numTiles);
</ins><span class="cx"> geometry.setTileSize(fillTileSize);
</span><del>- geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - roundToInt(computedXPosition + left) % geometry.tileSize().width() : 0);
- geometry.setSpaceSize(FloatSize());
</del><ins>+ geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - fmodf((computedXPosition + left), geometry.tileSize().width()) : 0);
+ geometry.setSpaceSize(LayoutSize());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> LayoutUnit computedYPosition = minimumValueForLength(fillLayer->yPosition(), availableHeight, true);
</span><span class="cx"> if (backgroundRepeatY == RoundFill && positioningAreaSize.height() > 0 && fillTileSize.height() > 0) {
</span><del>- long nrTiles = lroundf((float)positioningAreaSize.height() / fillTileSize.height());
- if (!nrTiles)
- nrTiles = 1;
-
</del><ins>+ int numTiles = std::max(1, roundToInt(positioningAreaSize.height() / fillTileSize.height()));
</ins><span class="cx"> if (fillLayer->size().size.width().isAuto() && backgroundRepeatX != RoundFill)
</span><del>- fillTileSize.setWidth(fillTileSize.width() * positioningAreaSize.height() / (nrTiles * fillTileSize.height()));
</del><ins>+ fillTileSize.setWidth(fillTileSize.width() * positioningAreaSize.height() / (numTiles * fillTileSize.height()));
</ins><span class="cx">
</span><del>- fillTileSize.setHeight(positioningAreaSize.height() / nrTiles);
</del><ins>+ fillTileSize.setHeight(positioningAreaSize.height() / numTiles);
</ins><span class="cx"> geometry.setTileSize(fillTileSize);
</span><del>- geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - roundToInt(computedYPosition + top) % geometry.tileSize().height() : 0);
- geometry.setSpaceSize(FloatSize());
</del><ins>+ geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - fmodf((computedYPosition + top), geometry.tileSize().height()) : 0);
+ geometry.setSpaceSize(LayoutSize());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (backgroundRepeatX == RepeatFill) {
</span><del>- geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - roundToInt(computedXPosition + left) % geometry.tileSize().width() : 0);
- geometry.setSpaceSize(FloatSize(0, geometry.spaceSize().height()));
</del><ins>+ geometry.setPhaseX(geometry.tileSize().width() ? geometry.tileSize().width() - fmodf(computedXPosition + left, geometry.tileSize().width()): 0);
+ geometry.setSpaceSize(LayoutSize(0, geometry.spaceSize().height()));
</ins><span class="cx"> } else if (backgroundRepeatX == SpaceFill && fillTileSize.width() > 0) {
</span><del>- int space = getSpace(positioningAreaSize.width(), geometry.tileSize().width());
- int actualWidth = geometry.tileSize().width() + space;
</del><ins>+ LayoutUnit space = getSpace(positioningAreaSize.width(), geometry.tileSize().width());
+ LayoutUnit actualWidth = geometry.tileSize().width() + space;
</ins><span class="cx">
</span><span class="cx"> if (space >= 0) {
</span><span class="cx"> computedXPosition = minimumValueForLength(Length(), availableWidth, true);
</span><del>- geometry.setSpaceSize(FloatSize(space, 0));
- geometry.setPhaseX(actualWidth ? actualWidth - roundToInt(computedXPosition + left) % actualWidth : 0);
</del><ins>+ geometry.setSpaceSize(LayoutSize(space, 0));
+ geometry.setPhaseX(actualWidth ? actualWidth - fmodf((computedXPosition + left), actualWidth) : 0);
</ins><span class="cx"> } else
</span><span class="cx"> backgroundRepeatX = NoRepeatFill;
</span><span class="cx"> }
</span><span class="cx"> if (backgroundRepeatX == NoRepeatFill) {
</span><del>- int xOffset = fillLayer->backgroundXOrigin() == RightEdge ? availableWidth - computedXPosition : computedXPosition;
</del><ins>+ LayoutUnit xOffset = fillLayer->backgroundXOrigin() == RightEdge ? availableWidth - computedXPosition : computedXPosition;
</ins><span class="cx"> geometry.setNoRepeatX(left + xOffset);
</span><del>- geometry.setSpaceSize(FloatSize(0, geometry.spaceSize().height()));
</del><ins>+ geometry.setSpaceSize(LayoutSize(0, geometry.spaceSize().height()));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (backgroundRepeatY == RepeatFill) {
</span><del>- geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - roundToInt(computedYPosition + top) % geometry.tileSize().height() : 0);
- geometry.setSpaceSize(FloatSize(geometry.spaceSize().width(), 0));
</del><ins>+ geometry.setPhaseY(geometry.tileSize().height() ? geometry.tileSize().height() - fmodf(computedYPosition + top, geometry.tileSize().height()) : 0);
+ geometry.setSpaceSize(LayoutSize(geometry.spaceSize().width(), 0));
</ins><span class="cx"> } else if (backgroundRepeatY == SpaceFill && fillTileSize.height() > 0) {
</span><del>- int space = getSpace(positioningAreaSize.height(), geometry.tileSize().height());
- int actualHeight = geometry.tileSize().height() + space;
</del><ins>+ LayoutUnit space = getSpace(positioningAreaSize.height(), geometry.tileSize().height());
+ LayoutUnit actualHeight = geometry.tileSize().height() + space;
</ins><span class="cx">
</span><span class="cx"> if (space >= 0) {
</span><span class="cx"> computedYPosition = minimumValueForLength(Length(), availableHeight, true);
</span><del>- geometry.setSpaceSize(FloatSize(geometry.spaceSize().width(), space));
- geometry.setPhaseY(actualHeight ? actualHeight - roundToInt(computedYPosition + top) % actualHeight : 0);
</del><ins>+ geometry.setSpaceSize(LayoutSize(geometry.spaceSize().width(), space));
+ geometry.setPhaseY(actualHeight ? actualHeight - fmodf((computedYPosition + top), actualHeight) : 0);
</ins><span class="cx"> } else
</span><span class="cx"> backgroundRepeatY = NoRepeatFill;
</span><span class="cx"> }
</span><span class="cx"> if (backgroundRepeatY == NoRepeatFill) {
</span><del>- int yOffset = fillLayer->backgroundYOrigin() == BottomEdge ? availableHeight - computedYPosition : computedYPosition;
</del><ins>+ LayoutUnit yOffset = fillLayer->backgroundYOrigin() == BottomEdge ? availableHeight - computedYPosition : computedYPosition;
</ins><span class="cx"> geometry.setNoRepeatY(top + yOffset);
</span><del>- geometry.setSpaceSize(FloatSize(geometry.spaceSize().width(), 0));
</del><ins>+ geometry.setSpaceSize(LayoutSize(geometry.spaceSize().width(), 0));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (fixedAttachment)
</span><del>- geometry.useFixedAttachment(snappedPaintRect.location());
</del><ins>+ geometry.useFixedAttachment(paintRect.location());
</ins><span class="cx">
</span><del>- geometry.clip(snappedPaintRect);
</del><ins>+ geometry.clip(paintRect);
</ins><span class="cx"> geometry.setDestOrigin(geometry.destRect().location());
</span><ins>+
+ pixelSnapBackgroundImageGeometryForPainting(geometry);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderBoxModelObject::getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, IntRect& destRect, IntPoint& phase, IntSize& tileSize) const
</del><ins>+void RenderBoxModelObject::getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, FloatRect& destRect, FloatPoint& phase, FloatSize& tileSize) const
</ins><span class="cx"> {
</span><span class="cx"> const FillLayer* backgroundLayer = style().backgroundLayers();
</span><span class="cx"> BackgroundImageGeometry geometry;
</span><del>- calculateBackgroundImageGeometry(paintContainer, backgroundLayer, destRect, geometry);
</del><ins>+ LayoutRect paintRect = LayoutRect(destRect);
+ calculateBackgroundImageGeometry(paintContainer, backgroundLayer, paintRect, geometry);
</ins><span class="cx"> phase = geometry.phase();
</span><span class="cx"> tileSize = geometry.tileSize();
</span><span class="cx"> destRect = geometry.destRect();
</span><span class="lines">@@ -1253,7 +1249,7 @@
</span><span class="cx"> rectWithOutsets.expand(style.imageOutsets(ninePieceImage));
</span><span class="cx"> IntRect borderImageRect = pixelSnappedIntRect(rectWithOutsets);
</span><span class="cx">
</span><del>- IntSize imageSize = calculateImageIntrinsicDimensions(styleImage, borderImageRect.size(), DoNotScaleByEffectiveZoom);
</del><ins>+ LayoutSize imageSize = calculateImageIntrinsicDimensions(styleImage, borderImageRect.size(), DoNotScaleByEffectiveZoom);
</ins><span class="cx">
</span><span class="cx"> // If both values are ‘auto’ then the intrinsic width and/or height of the image should be used, if any.
</span><span class="cx"> styleImage->setContainerSizeForRenderer(this, imageSize, style.effectiveZoom());
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBoxModelObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -183,7 +183,7 @@
</span><span class="cx">
</span><span class="cx"> bool canHaveBoxInfoInRegion() const { return !isFloating() && !isReplaced() && !isInline() && !hasColumns() && !isTableCell() && isRenderBlock() && !isRenderSVGBlock(); }
</span><span class="cx">
</span><del>- void getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, IntRect& destRect, IntPoint& phase, IntSize& tileSize) const;
</del><ins>+ void getGeometryForBackgroundImage(const RenderLayerModelObject* paintContainer, FloatRect& destRect, FloatPoint& phase, FloatSize& tileSize) const;
</ins><span class="cx"> void contentChanged(ContentChangeType);
</span><span class="cx"> bool hasAcceleratedCompositing() const;
</span><span class="cx">
</span><span class="lines">@@ -208,57 +208,43 @@
</span><span class="cx"> BackgroundImageGeometry()
</span><span class="cx"> : m_hasNonLocalGeometry(false)
</span><span class="cx"> { }
</span><del>- IntPoint destOrigin() const { return m_destOrigin; }
- void setDestOrigin(const IntPoint& destOrigin)
- {
- m_destOrigin = destOrigin;
- }
</del><ins>+ LayoutPoint destOrigin() const { return m_destOrigin; }
+ void setDestOrigin(const LayoutPoint& destOrigin) { m_destOrigin = destOrigin; }
</ins><span class="cx">
</span><del>- IntRect destRect() const { return m_destRect; }
- void setDestRect(const IntRect& destRect)
- {
- m_destRect = destRect;
- }
</del><ins>+ LayoutRect destRect() const { return m_destRect; }
+ void setDestRect(const LayoutRect& destRect) { m_destRect = destRect; }
</ins><span class="cx">
</span><span class="cx"> // Returns the phase relative to the destination rectangle.
</span><del>- IntPoint relativePhase() const;
</del><ins>+ LayoutPoint relativePhase() const;
</ins><span class="cx">
</span><del>- IntPoint phase() const { return m_phase; }
- void setPhase(const IntPoint& phase)
- {
- m_phase = phase;
- }
</del><ins>+ LayoutPoint phase() const { return m_phase; }
+ void setPhase(const LayoutPoint& phase) { m_phase = phase; }
</ins><span class="cx">
</span><del>- IntSize tileSize() const { return m_tileSize; }
- void setTileSize(const IntSize& tileSize)
- {
- m_tileSize = tileSize;
- }
- FloatSize spaceSize() const { return m_space; }
- void setSpaceSize(const FloatSize& space)
- {
- m_space = space;
- }
</del><ins>+ LayoutSize tileSize() const { return m_tileSize; }
+ void setTileSize(const LayoutSize& tileSize) { m_tileSize = tileSize; }
</ins><span class="cx">
</span><del>- void setPhaseX(int x) { m_phase.setX(x); }
- void setPhaseY(int y) { m_phase.setY(y); }
</del><ins>+ LayoutSize spaceSize() const { return m_space; }
+ void setSpaceSize(const LayoutSize& space) { m_space = space; }
+
+ void setPhaseX(LayoutUnit x) { m_phase.setX(x); }
+ void setPhaseY(LayoutUnit y) { m_phase.setY(y); }
</ins><span class="cx">
</span><del>- void setNoRepeatX(int xOffset);
- void setNoRepeatY(int yOffset);
</del><ins>+ void setNoRepeatX(LayoutUnit xOffset);
+ void setNoRepeatY(LayoutUnit yOffset);
</ins><span class="cx">
</span><del>- void useFixedAttachment(const IntPoint& attachmentPoint);
</del><ins>+ void useFixedAttachment(const LayoutPoint& attachmentPoint);
</ins><span class="cx">
</span><del>- void clip(const IntRect&);
</del><ins>+ void clip(const LayoutRect&);
</ins><span class="cx">
</span><span class="cx"> void setHasNonLocalGeometry(bool hasNonLocalGeometry = true) { m_hasNonLocalGeometry = hasNonLocalGeometry; }
</span><span class="cx"> bool hasNonLocalGeometry() const { return m_hasNonLocalGeometry; }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- IntRect m_destRect;
- IntPoint m_destOrigin;
- IntPoint m_phase;
- IntSize m_tileSize;
- FloatSize m_space;
</del><ins>+ LayoutRect m_destRect;
+ LayoutPoint m_destOrigin;
+ LayoutPoint m_phase;
+ LayoutSize m_tileSize;
+ LayoutSize m_space;
</ins><span class="cx"> bool m_hasNonLocalGeometry; // Has background-attachment: fixed. Implies that we can't always cheaply compute destRect.
</span><span class="cx"> };
</span><span class="cx">
</span><span class="lines">@@ -313,14 +299,14 @@
</span><span class="cx"> void moveChildrenTo(RenderBoxModelObject* toBoxModelObject, RenderObject* startChild, RenderObject* endChild, RenderObject* beforeChild, bool fullRemoveInsert = false);
</span><span class="cx">
</span><span class="cx"> enum ScaleByEffectiveZoomOrNot { ScaleByEffectiveZoom, DoNotScaleByEffectiveZoom };
</span><del>- IntSize calculateImageIntrinsicDimensions(StyleImage*, const IntSize& scaledPositioningAreaSize, ScaleByEffectiveZoomOrNot) const;
</del><ins>+ LayoutSize calculateImageIntrinsicDimensions(StyleImage*, const LayoutSize& scaledPositioningAreaSize, ScaleByEffectiveZoomOrNot) const;
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> LayoutUnit computedCSSPadding(const Length&) const;
</span><span class="cx">
</span><span class="cx"> virtual LayoutRect frameRectForStickyPositioning() const = 0;
</span><span class="cx">
</span><del>- IntSize calculateFillTileSize(const FillLayer*, const IntSize& scaledPositioningAreaSize) const;
</del><ins>+ LayoutSize calculateFillTileSize(const FillLayer*, const LayoutSize& scaledPositioningAreaSize) const;
</ins><span class="cx">
</span><span class="cx"> RoundedRect getBackgroundRoundedRect(const LayoutRect&, InlineFlowBox*, LayoutUnit inlineBoxWidth, LayoutUnit inlineBoxHeight,
</span><span class="cx"> bool includeLogicalLeftEdge, bool includeLogicalRightEdge) const;
</span><span class="lines">@@ -342,6 +328,8 @@
</span><span class="cx"> float thickness, float drawThickness, BoxSide, const RenderStyle&,
</span><span class="cx"> Color, EBorderStyle, BackgroundBleedAvoidance, bool includeLogicalLeftEdge, bool includeLogicalRightEdge);
</span><span class="cx"> void paintMaskForTextFillBox(ImageBuffer*, const IntRect&, InlineFlowBox*, const LayoutRect&, RenderNamedFlowFragment*);
</span><ins>+
+ void pixelSnapBackgroundImageGeometryForPainting(BackgroundImageGeometry&) const;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> RENDER_OBJECT_TYPE_CASTS(RenderBoxModelObject, isBoxModelObject())
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -1615,9 +1615,9 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- IntRect destRect = pixelSnappedIntRect(LayoutRect(backgroundBoxForPainting()));
- IntPoint phase;
- IntSize tileSize;
</del><ins>+ FloatRect destRect = backgroundBoxForPainting();
+ FloatPoint phase;
+ FloatSize tileSize;
</ins><span class="cx">
</span><span class="cx"> RefPtr<Image> image = style.backgroundLayers()->image()->cachedImage()->image();
</span><span class="cx"> toRenderBox(renderer()).getGeometryForBackgroundImage(&m_owningLayer.renderer(), destRect, phase, tileSize);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingshapesShapeOutsideInfocpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp (166783 => 166784)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp        2014-04-04 16:14:43 UTC (rev 166783)
+++ trunk/Source/WebCore/rendering/shapes/ShapeOutsideInfo.cpp        2014-04-04 16:30:18 UTC (rev 166784)
</span><span class="lines">@@ -137,7 +137,7 @@
</span><span class="cx"> ASSERT(shapeValue->isImageValid());
</span><span class="cx"> StyleImage* styleImage = shapeValue->image();
</span><span class="cx">
</span><del>- const IntSize& imageSize = renderBox->calculateImageIntrinsicDimensions(styleImage, roundedIntSize(referenceBoxSize), RenderImage::ScaleByEffectiveZoom);
</del><ins>+ const LayoutSize& imageSize = renderBox->calculateImageIntrinsicDimensions(styleImage, roundedIntSize(referenceBoxSize), RenderImage::ScaleByEffectiveZoom);
</ins><span class="cx"> styleImage->setContainerSizeForRenderer(renderBox, imageSize, renderBox->style().effectiveZoom());
</span><span class="cx">
</span><span class="cx"> image = styleImage->cachedImage()->imageForRenderer(renderBox);
</span></span></pre>
</div>
</div>
</body>
</html>