<!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" /><style type="text/css"><!--
#msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer { 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 #fc0 solid; padding: 6px; }
#msg ul, pre { overflow: auto; }
#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>
<title>[19997] trunk</title>
</head>
<body>

<div id="msg">
<dl>
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/19997">19997</a></dd>
<dt>Author</dt> <dd>bdash</dd>
<dt>Date</dt> <dd>2007-03-06 19:35:03 -0800 (Tue, 06 Mar 2007)</dd>
</dl>

<h3>Log Message</h3>
<pre>2007-03-06  Mitz Pettel  &lt;mitz@webkit.org&gt;

        Reviewed by Dave Hyatt.

        - fix http://bugs.webkit.org/show_bug.cgi?id=12885
          REGRESSION (r19696): Incomplete background repaint

        Tests: fast/repaint/content-into-overflow.html
               fast/repaint/overflow-into-content.html

        Changed repaintAfterLayoutIfNeeded() to take, in addition to the clipped overflow
        rect, the unclipped border box plus outline, and to repaint any areas that
        were added or removed from that box, in addition to any areas added or removed
        from the clipped overflow rect.

        * platform/graphics/svg/SVGResourceMarker.cpp:
        (WebCore::SVGResourceMarker::draw):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::absoluteClippedOverflowRect): Renamed getAbsoluteRepaintRect() to
        this.
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderFlow.cpp:
        (WebCore::RenderFlow::absoluteClippedOverflowRect):
        * rendering/RenderFlow.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::layout):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::checkForRepaintOnResize):
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaint):
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
        (WebCore::RenderObject::absoluteClippedOverflowRect):
        (WebCore::RenderObject::absoluteOutlineBox):
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::absoluteClippedOverflowRect):
        (WebCore::RenderPath::absoluteRects):
        (WebCore::RenderPath::drawMarkersIfNeeded):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::absoluteClippedOverflowRect):
        (WebCore::RenderSVGContainer::absoluteRects):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::absoluteClippedOverflowRect):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        (WebCore::RenderSVGImage::absoluteClippedOverflowRect):
        (WebCore::RenderSVGImage::absoluteRects):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::absoluteClippedOverflowRect):
        (WebCore::RenderSVGText::layout):
        (WebCore::RenderSVGText::absoluteRects):
        * rendering/RenderSVGText.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::absoluteClippedOverflowRect):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::absoluteClippedOverflowRect):
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::absoluteClippedOverflowRect):
        * rendering/RenderTableRow.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteClippedOverflowRect):
        * rendering/RenderText.h:

2007-03-06  Mitz Pettel  &lt;mitz@webkit.org&gt;

        Reviewed by Dave Hyatt.

        - repaint tests and updated result for http://bugs.webkit.org/show_bug.cgi?id=12885
          REGRESSION (r19696): Incomplete background repaint

        * fast/repaint/bugzilla-6278-expected.checksum:
        * fast/repaint/bugzilla-6278-expected.png:
        * fast/repaint/content-into-overflow-expected.checksum: Added.
        * fast/repaint/content-into-overflow-expected.png: Added.
        * fast/repaint/content-into-overflow-expected.txt: Added.
        * fast/repaint/content-into-overflow.html: Added.
        * fast/repaint/overflow-into-content-expected.checksum: Added.
        * fast/repaint/overflow-into-content-expected.png: Added.
        * fast/repaint/overflow-into-content-expected.txt: Added.
        * fast/repaint/overflow-into-content.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastrepaintbugzilla6278expectedchecksum">trunk/LayoutTests/fast/repaint/bugzilla-6278-expected.checksum</a></li>
<li><a href="#trunkLayoutTestsfastrepaintbugzilla6278expectedpng">trunk/LayoutTests/fast/repaint/bugzilla-6278-expected.png</a></li>
<li><a href="#trunkWebCoreChangeLog">trunk/WebCore/ChangeLog</a></li>
<li><a href="#trunkWebCoreplatformgraphicssvgSVGResourceMarkercpp">trunk/WebCore/platform/graphics/svg/SVGResourceMarker.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderBlockcpp">trunk/WebCore/rendering/RenderBlock.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderBoxcpp">trunk/WebCore/rendering/RenderBox.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderBoxh">trunk/WebCore/rendering/RenderBox.h</a></li>
<li><a href="#trunkWebCorerenderingRenderFlexibleBoxcpp">trunk/WebCore/rendering/RenderFlexibleBox.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderFlowcpp">trunk/WebCore/rendering/RenderFlow.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderFlowh">trunk/WebCore/rendering/RenderFlow.h</a></li>
<li><a href="#trunkWebCorerenderingRenderForeignObjectcpp">trunk/WebCore/rendering/RenderForeignObject.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderHTMLCanvascpp">trunk/WebCore/rendering/RenderHTMLCanvas.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderImagecpp">trunk/WebCore/rendering/RenderImage.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderLayercpp">trunk/WebCore/rendering/RenderLayer.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderLayerh">trunk/WebCore/rendering/RenderLayer.h</a></li>
<li><a href="#trunkWebCorerenderingRenderObjectcpp">trunk/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderObjecth">trunk/WebCore/rendering/RenderObject.h</a></li>
<li><a href="#trunkWebCorerenderingRenderPathcpp">trunk/WebCore/rendering/RenderPath.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderPathh">trunk/WebCore/rendering/RenderPath.h</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGContainercpp">trunk/WebCore/rendering/RenderSVGContainer.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGContainerh">trunk/WebCore/rendering/RenderSVGContainer.h</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGHiddenContainercpp">trunk/WebCore/rendering/RenderSVGHiddenContainer.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGHiddenContainerh">trunk/WebCore/rendering/RenderSVGHiddenContainer.h</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGImagecpp">trunk/WebCore/rendering/RenderSVGImage.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGImageh">trunk/WebCore/rendering/RenderSVGImage.h</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGTextcpp">trunk/WebCore/rendering/RenderSVGText.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderSVGTexth">trunk/WebCore/rendering/RenderSVGText.h</a></li>
<li><a href="#trunkWebCorerenderingRenderTablecpp">trunk/WebCore/rendering/RenderTable.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderTableCellcpp">trunk/WebCore/rendering/RenderTableCell.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderTableCellh">trunk/WebCore/rendering/RenderTableCell.h</a></li>
<li><a href="#trunkWebCorerenderingRenderTableColcpp">trunk/WebCore/rendering/RenderTableCol.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderTableColh">trunk/WebCore/rendering/RenderTableCol.h</a></li>
<li><a href="#trunkWebCorerenderingRenderTableRowcpp">trunk/WebCore/rendering/RenderTableRow.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderTableRowh">trunk/WebCore/rendering/RenderTableRow.h</a></li>
<li><a href="#trunkWebCorerenderingRenderTextcpp">trunk/WebCore/rendering/RenderText.cpp</a></li>
<li><a href="#trunkWebCorerenderingRenderTexth">trunk/WebCore/rendering/RenderText.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastrepaintcontentintooverflowexpectedchecksum">trunk/LayoutTests/fast/repaint/content-into-overflow-expected.checksum</a></li>
<li><a href="#trunkLayoutTestsfastrepaintcontentintooverflowexpectedpng">trunk/LayoutTests/fast/repaint/content-into-overflow-expected.png</a></li>
<li><a href="#trunkLayoutTestsfastrepaintcontentintooverflowexpectedtxt">trunk/LayoutTests/fast/repaint/content-into-overflow-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastrepaintcontentintooverflowhtml">trunk/LayoutTests/fast/repaint/content-into-overflow.html</a></li>
<li><a href="#trunkLayoutTestsfastrepaintoverflowintocontentexpectedchecksum">trunk/LayoutTests/fast/repaint/overflow-into-content-expected.checksum</a></li>
<li><a href="#trunkLayoutTestsfastrepaintoverflowintocontentexpectedpng">trunk/LayoutTests/fast/repaint/overflow-into-content-expected.png</a></li>
<li><a href="#trunkLayoutTestsfastrepaintoverflowintocontentexpectedtxt">trunk/LayoutTests/fast/repaint/overflow-into-content-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastrepaintoverflowintocontenthtml">trunk/LayoutTests/fast/repaint/overflow-into-content.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/LayoutTests/ChangeLog        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2007-03-06  Mitz Pettel  &lt;mitz@webkit.org&gt;
+
+        Reviewed by Dave Hyatt.
+
+        - repaint tests and updated result for http://bugs.webkit.org/show_bug.cgi?id=12885
+          REGRESSION (r19696): Incomplete background repaint
+
+        * fast/repaint/bugzilla-6278-expected.checksum:
+        * fast/repaint/bugzilla-6278-expected.png:
+        * fast/repaint/content-into-overflow-expected.checksum: Added.
+        * fast/repaint/content-into-overflow-expected.png: Added.
+        * fast/repaint/content-into-overflow-expected.txt: Added.
+        * fast/repaint/content-into-overflow.html: Added.
+        * fast/repaint/overflow-into-content-expected.checksum: Added.
+        * fast/repaint/overflow-into-content-expected.png: Added.
+        * fast/repaint/overflow-into-content-expected.txt: Added.
+        * fast/repaint/overflow-into-content.html: Added.
+
</ins><span class="cx"> 2007-03-06  Ian Eng &lt;ian.eng.webkit@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Maciej.
</span></span></pre></div>
<a id="trunkLayoutTestsfastrepaintbugzilla6278expectedchecksum"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/repaint/bugzilla-6278-expected.checksum (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/bugzilla-6278-expected.checksum        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/LayoutTests/fast/repaint/bugzilla-6278-expected.checksum        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -1 +1 @@
</span><del>-4714b953a386182e80f2e91dc04a3c11
</del><span class="cx">\ No newline at end of file
</span><ins>+a24bffc93b7808612570cdfd65d3dcfe
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastrepaintbugzilla6278expectedpng"></a>
<div class="binary"><h4>Modified: trunk/LayoutTests/fast/repaint/bugzilla-6278-expected.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<a id="trunkLayoutTestsfastrepaintcontentintooverflowexpectedchecksum"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/content-into-overflow-expected.checksum (0 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/content-into-overflow-expected.checksum                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/content-into-overflow-expected.checksum        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+19ab59be1ec32bb7f038058df323213f
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastrepaintcontentintooverflowexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/fast/repaint/content-into-overflow-expected.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/repaint/content-into-overflow-expected.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="trunkLayoutTestsfastrepaintcontentintooverflowexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/content-into-overflow-expected.txt (0 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/content-into-overflow-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/content-into-overflow-expected.txt        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -0,0 +1,20 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x8
+  RenderBlock {HTML} at (0,0) size 800x8
+    RenderBody {BODY} at (8,8) size 784x0
+layer at (8,8) size 106x106
+  RenderBlock (positioned) {DIV} at (8,8) size 106x106 [border: (3px solid #008000)]
+    RenderBlock {DIV} at (3,3) size 100x50
+      RenderBlock {DIV} at (0,0) size 100x50
+layer at (8,158) size 106x106
+  RenderBlock (positioned) {DIV} at (8,158) size 106x106 [border: (3px solid #008000)]
+    RenderBlock {DIV} at (3,3) size 50x100
+      RenderBlock {DIV} at (0,0) size 50x100
+layer at (8,308) size 100x100
+  RenderBlock (positioned) {DIV} at (8,308) size 100x100
+    RenderBlock {DIV} at (0,0) size 100x100 [bgcolor=#008000]
+      RenderBlock {DIV} at (0,80) size 100x20
+layer at (8,308) size 100x80
+  RenderBlock (relative positioned) {DIV} at (0,0) size 100x0
+    RenderBlock (floating) {DIV} at (0,0) size 100x80
</ins></span></pre></div>
<a id="trunkLayoutTestsfastrepaintcontentintooverflowhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/content-into-overflow.html (0 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/content-into-overflow.html                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/content-into-overflow.html        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
+&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
+&lt;head&gt;
+    &lt;title&gt;Test for http://bugs.webkit.org/show_bug.cgi?id=12885&lt;/title&gt;
+    &lt;style type=&quot;text/css&quot;&gt;
+        div.wide { width: 100px; height: 50px; }
+        div.narrow { width: 50px; }
+        div.tall { width: 50px; height: 100px; }
+        div.short { height: 50px; width: 50px; }
+        #main-content { float: left; width: 100px; height: 80px; }
+        #target3 { display: none; clear: both; height: 20px; background: green; }
+    &lt;/style&gt;
+    &lt;script src=&quot;repaint.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+    &lt;script&gt;
+        function repaintTest()
+        {
+            document.getElementById('target1').style.width = 'auto';
+            document.getElementById('target2').style.height = 'auto';
+            document.getElementById('target3').style.display = 'block';
+        }
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;runRepaintTest();&quot;&gt;
+    &lt;div style=&quot;position: absolute; border: medium solid green; top: 8px; height: 100px;&quot;&gt;
+        &lt;div class=&quot;narrow&quot; id=&quot;target1&quot;&gt;
+            &lt;div class=&quot;wide&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+
+    &lt;div style=&quot;position: absolute; border: medium solid green; top: 158px; width: 100px;&quot;&gt;
+        &lt;div class=&quot;short&quot; id=&quot;target2&quot;&gt;
+            &lt;div class=&quot;tall&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+
+    &lt;div style=&quot;position: absolute; top: 308px;&quot;&gt;
+        &lt;div style=&quot;background: green;&quot;&gt;
+            &lt;div style=&quot;position: relative;&quot;&gt;
+                &lt;div id=&quot;main-content&quot;&gt;
+                &lt;/div&gt;
+            &lt;/div&gt;
+            &lt;div id=&quot;target3&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastrepaintoverflowintocontentexpectedchecksum"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/overflow-into-content-expected.checksum (0 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/overflow-into-content-expected.checksum                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/overflow-into-content-expected.checksum        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+26f639fa09db1c9363960e2decf3470c
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkLayoutTestsfastrepaintoverflowintocontentexpectedpng"></a>
<div class="binary"><h4>Added: trunk/LayoutTests/fast/repaint/overflow-into-content-expected.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/repaint/overflow-into-content-expected.png
</span><span class="cx">___________________________________________________________________
</span><span class="cx">Name: svn:mime-type
</span><span class="cx">   + application/octet-stream
</span><a id="trunkLayoutTestsfastrepaintoverflowintocontentexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/overflow-into-content-expected.txt (0 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/overflow-into-content-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/overflow-into-content-expected.txt        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x8
+  RenderBlock {HTML} at (0,0) size 800x8
+    RenderBody {BODY} at (8,8) size 784x0
+layer at (8,8) size 103x106
+  RenderBlock (positioned) {DIV} at (8,8) size 56x106 [border: (3px solid #008000)]
+    RenderBlock {DIV} at (3,3) size 50x50
+      RenderBlock {DIV} at (0,0) size 100x50
+layer at (8,158) size 106x103
+  RenderBlock (positioned) {DIV} at (8,158) size 106x56 [border: (3px solid #008000)]
+    RenderBlock {DIV} at (3,3) size 50x50
+      RenderBlock {DIV} at (0,0) size 50x100
+layer at (8,308) size 100x80
+  RenderBlock (positioned) {DIV} at (8,308) size 100x80
+    RenderBlock {DIV} at (0,0) size 100x0 [bgcolor=#008000]
+layer at (8,308) size 100x80
+  RenderBlock (relative positioned) {DIV} at (0,0) size 100x0
+    RenderBlock (floating) {DIV} at (0,0) size 100x80
</ins></span></pre></div>
<a id="trunkLayoutTestsfastrepaintoverflowintocontenthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/repaint/overflow-into-content.html (0 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/repaint/overflow-into-content.html                                (rev 0)
+++ trunk/LayoutTests/fast/repaint/overflow-into-content.html        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -0,0 +1,46 @@
</span><ins>+&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
+&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;en&quot; lang=&quot;en&quot;&gt;
+&lt;head&gt;
+    &lt;title&gt;Test for http://bugs.webkit.org/show_bug.cgi?id=12885&lt;/title&gt;
+    &lt;style type=&quot;text/css&quot;&gt;
+        div.wide { width: 100px; height: 50px; }
+        div.narrow { width: 50px; }
+        div.tall { width: 50px; height: 100px; }
+        div.short { height: 50px; width: 50px; }
+        #main-content { float: left; width: 100px; height: 80px; }
+        #target3 { display: none; clear: both; height: 20px; background: green; }
+    &lt;/style&gt;
+    &lt;script src=&quot;repaint.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
+    &lt;script&gt;
+        function repaintTest()
+        {
+            document.getElementById('target1').style.width = '';
+            document.getElementById('target2').style.height = '';
+            document.getElementById('target3').style.display = '';
+        }
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body onload=&quot;runRepaintTest();&quot;&gt;
+    &lt;div style=&quot;position: absolute; border: medium solid green; top: 8px; height: 100px;&quot;&gt;
+        &lt;div class=&quot;narrow&quot; id=&quot;target1&quot; style=&quot;width: auto;&quot;&gt;
+            &lt;div class=&quot;wide&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+
+    &lt;div style=&quot;position: absolute; border: medium solid green; top: 158px; width: 100px;&quot;&gt;
+        &lt;div class=&quot;short&quot; id=&quot;target2&quot; style=&quot;height: auto;&quot;&gt;
+            &lt;div class=&quot;tall&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+
+    &lt;div style=&quot;position: absolute; top: 308px;&quot;&gt;
+        &lt;div style=&quot;background: green;&quot;&gt;
+            &lt;div style=&quot;position: relative;&quot;&gt;
+                &lt;div id=&quot;main-content&quot;&gt;
+                &lt;/div&gt;
+            &lt;/div&gt;
+            &lt;div id=&quot;target3&quot; style=&quot;display: block;&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/ChangeLog (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/ChangeLog        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/ChangeLog        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -1,3 +1,88 @@
</span><ins>+2007-03-06  Mitz Pettel  &lt;mitz@webkit.org&gt;
+
+        Reviewed by Dave Hyatt.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=12885
+          REGRESSION (r19696): Incomplete background repaint
+
+        Tests: fast/repaint/content-into-overflow.html
+               fast/repaint/overflow-into-content.html
+
+        Changed repaintAfterLayoutIfNeeded() to take, in addition to the clipped overflow
+        rect, the unclipped border box plus outline, and to repaint any areas that
+        were added or removed from that box, in addition to any areas added or removed
+        from the clipped overflow rect.
+
+        * platform/graphics/svg/SVGResourceMarker.cpp:
+        (WebCore::SVGResourceMarker::draw):
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::layoutBlock):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::absoluteClippedOverflowRect): Renamed getAbsoluteRepaintRect() to
+        this.
+        * rendering/RenderBox.h:
+        * rendering/RenderFlexibleBox.cpp:
+        (WebCore::RenderFlexibleBox::layoutBlock):
+        * rendering/RenderFlow.cpp:
+        (WebCore::RenderFlow::absoluteClippedOverflowRect):
+        * rendering/RenderFlow.h:
+        * rendering/RenderForeignObject.cpp:
+        (WebCore::RenderForeignObject::layout):
+        * rendering/RenderHTMLCanvas.cpp:
+        (WebCore::RenderHTMLCanvas::layout):
+        * rendering/RenderImage.cpp:
+        (WebCore::RenderImage::layout):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::RenderLayer):
+        (WebCore::RenderLayer::checkForRepaintOnResize):
+        (WebCore::RenderLayer::updateLayerPositions):
+        * rendering/RenderLayer.h:
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::repaint):
+        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
+        (WebCore::RenderObject::getAbsoluteRepaintRectWithOutline):
+        (WebCore::RenderObject::absoluteClippedOverflowRect):
+        (WebCore::RenderObject::absoluteOutlineBox):
+        * rendering/RenderObject.h:
+        * rendering/RenderPath.cpp:
+        (WebCore::RenderPath::layout):
+        (WebCore::RenderPath::absoluteClippedOverflowRect):
+        (WebCore::RenderPath::absoluteRects):
+        (WebCore::RenderPath::drawMarkersIfNeeded):
+        * rendering/RenderPath.h:
+        * rendering/RenderSVGContainer.cpp:
+        (WebCore::RenderSVGContainer::layout):
+        (WebCore::RenderSVGContainer::absoluteClippedOverflowRect):
+        (WebCore::RenderSVGContainer::absoluteRects):
+        * rendering/RenderSVGContainer.h:
+        * rendering/RenderSVGHiddenContainer.cpp:
+        (WebCore::RenderSVGHiddenContainer::absoluteClippedOverflowRect):
+        * rendering/RenderSVGHiddenContainer.h:
+        * rendering/RenderSVGImage.cpp:
+        (WebCore::RenderSVGImage::imageChanged):
+        (WebCore::RenderSVGImage::absoluteClippedOverflowRect):
+        (WebCore::RenderSVGImage::absoluteRects):
+        * rendering/RenderSVGImage.h:
+        * rendering/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::absoluteClippedOverflowRect):
+        (WebCore::RenderSVGText::layout):
+        (WebCore::RenderSVGText::absoluteRects):
+        * rendering/RenderSVGText.h:
+        * rendering/RenderTable.cpp:
+        (WebCore::RenderTable::layout):
+        * rendering/RenderTableCell.cpp:
+        (WebCore::RenderTableCell::absoluteClippedOverflowRect):
+        * rendering/RenderTableCell.h:
+        * rendering/RenderTableCol.cpp:
+        (WebCore::RenderTableCol::absoluteClippedOverflowRect):
+        * rendering/RenderTableCol.h:
+        * rendering/RenderTableRow.cpp:
+        (WebCore::RenderTableRow::absoluteClippedOverflowRect):
+        * rendering/RenderTableRow.h:
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::absoluteClippedOverflowRect):
+        * rendering/RenderText.h:
+
</ins><span class="cx"> 2007-03-06  Ian Eng &lt;ian.eng.webkit@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Maciej.
</span></span></pre></div>
<a id="trunkWebCoreplatformgraphicssvgSVGResourceMarkercpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/platform/graphics/svg/SVGResourceMarker.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/platform/graphics/svg/SVGResourceMarker.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/platform/graphics/svg/SVGResourceMarker.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx">     m_marker-&gt;setDrawsContents(false);
</span><span class="cx">     context-&gt;restore();
</span><span class="cx"> 
</span><del>-    m_cachedBounds = transform.mapRect(m_marker-&gt;getAbsoluteRepaintRect());
</del><ins>+    m_cachedBounds = transform.mapRect(m_marker-&gt;absoluteClippedOverflowRect());
</ins><span class="cx"> 
</span><span class="cx">     currentlyDrawingMarkers.remove(this);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderBlock.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderBlock.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderBlock.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -467,10 +467,13 @@
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     IntRect oldBounds;
</span><ins>+    IntRect oldOutlineBox;
</ins><span class="cx">     bool checkForRepaint = checkForRepaintDuringLayout();
</span><span class="cx">     if (checkForRepaint) {
</span><del>-        oldBounds = getAbsoluteRepaintRect();
</del><ins>+        oldBounds = absoluteClippedOverflowRect();
</ins><span class="cx">         oldBounds.move(view()-&gt;layoutDelta());
</span><ins>+        oldOutlineBox = absoluteOutlineBox();
+        oldOutlineBox.move(view()-&gt;layoutDelta());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     int oldWidth = m_width;
</span><span class="lines">@@ -580,7 +583,7 @@
</span><span class="cx">     // Repaint with our new bounds if they are different from our old bounds.
</span><span class="cx">     bool didFullRepaint = false;
</span><span class="cx">     if (checkForRepaint)
</span><del>-        didFullRepaint = repaintAfterLayoutIfNeeded(oldBounds);
</del><ins>+        didFullRepaint = repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
</ins><span class="cx">     if (!didFullRepaint &amp;&amp; !repaintRect.isEmpty()) {
</span><span class="cx">         // FIXME: Deal with multiple column repainting.  We have to split the repaint
</span><span class="cx">         // rect up into multiple rects if it spans columns.
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderBox.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderBox.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderBox.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -865,7 +865,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntRect RenderBox::getAbsoluteRepaintRect()
</del><ins>+IntRect RenderBox::absoluteClippedOverflowRect()
</ins><span class="cx"> {
</span><span class="cx">     IntRect r = overflowRect(false);
</span><span class="cx">     if (style()) {
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderBoxh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderBox.h (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderBox.h        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderBox.h        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">     virtual int rightmostPosition(bool includeOverflowInterior = true, bool includeSelf = true) const;
</span><span class="cx">     virtual int leftmostPosition(bool includeOverflowInterior = true, bool includeSelf = true) const;
</span><span class="cx"> 
</span><del>-    virtual IntRect getAbsoluteRepaintRect();
</del><ins>+    virtual IntRect absoluteClippedOverflowRect();
</ins><span class="cx">     virtual void computeAbsoluteRepaintRect(IntRect&amp;, bool fixed = false);
</span><span class="cx"> 
</span><span class="cx">     virtual void repaintDuringLayoutIfMoved(const IntRect&amp;);
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderFlexibleBoxcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderFlexibleBox.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderFlexibleBox.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderFlexibleBox.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -252,10 +252,13 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     IntRect oldBounds;
</span><ins>+    IntRect oldOutlineBox;
</ins><span class="cx">     bool checkForRepaint = checkForRepaintDuringLayout();
</span><span class="cx">     if (checkForRepaint) {
</span><del>-        oldBounds = getAbsoluteRepaintRect();
</del><ins>+        oldBounds = absoluteClippedOverflowRect();
</ins><span class="cx">         oldBounds.move(view()-&gt;layoutDelta());
</span><ins>+        oldOutlineBox = absoluteOutlineBox();
+        oldOutlineBox.move(view()-&gt;layoutDelta());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     int previousWidth = m_width;
</span><span class="lines">@@ -329,7 +332,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Repaint with our new bounds if they are different from our old bounds.
</span><span class="cx">     if (checkForRepaint)
</span><del>-        repaintAfterLayoutIfNeeded(oldBounds);
</del><ins>+        repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
</ins><span class="cx">     
</span><span class="cx">     setNeedsLayout(false);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderFlowcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderFlow.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderFlow.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderFlow.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -442,7 +442,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntRect RenderFlow::getAbsoluteRepaintRect()
</del><ins>+IntRect RenderFlow::absoluteClippedOverflowRect()
</ins><span class="cx"> {
</span><span class="cx">     if (isInlineFlow()) {
</span><span class="cx">         // Find our leftmost position.
</span><span class="lines">@@ -501,7 +501,7 @@
</span><span class="cx">         return r;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return RenderContainer::getAbsoluteRepaintRect();
</del><ins>+    return RenderContainer::absoluteClippedOverflowRect();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> int RenderFlow::lowestPosition(bool includeOverflowInterior, bool includeSelf) const
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderFlowh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderFlow.h (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderFlow.h        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderFlow.h        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx">     void paintLines(PaintInfo&amp;, int tx, int ty);
</span><span class="cx">     bool hitTestLines(const HitTestRequest&amp;, HitTestResult&amp;, int x, int y, int tx, int ty, HitTestAction);
</span><span class="cx"> 
</span><del>-    virtual IntRect getAbsoluteRepaintRect();
</del><ins>+    virtual IntRect absoluteClippedOverflowRect();
</ins><span class="cx"> 
</span><span class="cx">     virtual int lowestPosition(bool includeOverflowInterior = true, bool includeSelf = true) const;
</span><span class="cx">     virtual int rightmostPosition(bool includeOverflowInterior = true, bool includeSelf = true) const;
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderForeignObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderForeignObject.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderForeignObject.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderForeignObject.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -88,16 +88,19 @@
</span><span class="cx">     ASSERT(minMaxKnown());
</span><span class="cx"> 
</span><span class="cx">     IntRect oldBounds;
</span><ins>+    IntRect oldOutlineBox;
</ins><span class="cx">     bool checkForRepaint = checkForRepaintDuringLayout();
</span><del>-    if (checkForRepaint)
</del><ins>+    if (checkForRepaint) {
</ins><span class="cx">         oldBounds = m_absoluteBounds;
</span><ins>+        oldOutlineBox = absoluteOutlineBox();
+    }
</ins><span class="cx"> 
</span><span class="cx">     RenderBlock::layout();
</span><span class="cx"> 
</span><del>-    m_absoluteBounds = getAbsoluteRepaintRect();
</del><ins>+    m_absoluteBounds = absoluteClippedOverflowRect();
</ins><span class="cx"> 
</span><span class="cx">     if (checkForRepaint)
</span><del>-        repaintAfterLayoutIfNeeded(oldBounds);
</del><ins>+        repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
</ins><span class="cx"> 
</span><span class="cx">     setNeedsLayout(false);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderHTMLCanvascpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderHTMLCanvas.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderHTMLCanvas.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderHTMLCanvas.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -82,15 +82,18 @@
</span><span class="cx">     ASSERT(minMaxKnown());
</span><span class="cx"> 
</span><span class="cx">     IntRect oldBounds;
</span><ins>+    IntRect oldOutlineBox;
</ins><span class="cx">     bool checkForRepaint = checkForRepaintDuringLayout();
</span><span class="cx">     if (checkForRepaint) {
</span><del>-        oldBounds = getAbsoluteRepaintRect();
</del><ins>+        oldBounds = absoluteClippedOverflowRect();
</ins><span class="cx">         oldBounds.move(view()-&gt;layoutDelta());
</span><ins>+        oldOutlineBox = absoluteOutlineBox();
+        oldOutlineBox.move(view()-&gt;layoutDelta());
</ins><span class="cx">     }
</span><span class="cx">     calcWidth();
</span><span class="cx">     calcHeight();
</span><span class="cx">     if (checkForRepaint)
</span><del>-        repaintAfterLayoutIfNeeded(oldBounds);
</del><ins>+        repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
</ins><span class="cx"> 
</span><span class="cx">     setNeedsLayout(false);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderImagecpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderImage.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderImage.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderImage.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -303,10 +303,13 @@
</span><span class="cx">     ASSERT(minMaxKnown());
</span><span class="cx"> 
</span><span class="cx">     IntRect oldBounds;
</span><ins>+    IntRect oldOutlineBox;
</ins><span class="cx">     bool checkForRepaint = checkForRepaintDuringLayout();
</span><span class="cx">     if (checkForRepaint) {
</span><del>-        oldBounds = getAbsoluteRepaintRect();
</del><ins>+        oldBounds = absoluteClippedOverflowRect();
</ins><span class="cx">         oldBounds.move(view()-&gt;layoutDelta());
</span><ins>+        oldOutlineBox = absoluteOutlineBox();
+        oldOutlineBox.move(view()-&gt;layoutDelta());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // minimum height
</span><span class="lines">@@ -316,7 +319,7 @@
</span><span class="cx">     calcHeight();
</span><span class="cx"> 
</span><span class="cx">     if (checkForRepaint)
</span><del>-        repaintAfterLayoutIfNeeded(oldBounds);
</del><ins>+        repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
</ins><span class="cx">     
</span><span class="cx">     setNeedsLayout(false);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderLayer.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderLayer.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderLayer.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -112,44 +112,42 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RenderLayer::RenderLayer(RenderObject* object)
</span><del>-: m_object(object),
-m_parent(0),
-m_previous(0),
-m_next(0),
-m_first(0),
-m_last(0),
-m_repaintX(0),
-m_repaintY(0),
-m_relX(0),
-m_relY(0),
-m_x(0),
-m_y(0),
-m_width(0),
-m_height(0),
-m_scrollX(0),
-m_scrollY(0),
-m_scrollOriginX(0),
-m_scrollLeftOverflow(0),
-m_scrollWidth(0),
-m_scrollHeight(0),
-m_inResizeMode(false),
-m_posZOrderList(0),
-m_negZOrderList(0),
-m_overflowList(0),
-m_clipRects(0) ,
-m_scrollDimensionsDirty(true),
-m_zOrderListsDirty(true),
-m_overflowListDirty(true),
-m_isOverflowOnly(shouldBeOverflowOnly()),
-m_usedTransparency(false),
-m_inOverflowRelayout(false),
-m_repaintOverflowOnResize(false),
-m_overflowStatusDirty(true),
-m_visibleContentStatusDirty( true ),
-m_hasVisibleContent( false ),
-m_visibleDescendantStatusDirty( false ),
-m_hasVisibleDescendant( false ),
-m_marquee(0)
</del><ins>+    : m_object(object)
+    , m_parent(0)
+    , m_previous(0)
+    , m_next(0)
+    , m_first(0)
+    , m_last(0)
+    , m_relX(0)
+    , m_relY(0)
+    , m_x(0)
+    , m_y(0)
+    , m_width(0)
+    , m_height(0)
+    , m_scrollX(0)
+    , m_scrollY(0)
+    , m_scrollOriginX(0)
+    , m_scrollLeftOverflow(0)
+    , m_scrollWidth(0)
+    , m_scrollHeight(0)
+    , m_inResizeMode(false)
+    , m_posZOrderList(0)
+    , m_negZOrderList(0)
+    , m_overflowList(0)
+    , m_clipRects(0) 
+    , m_scrollDimensionsDirty(true)
+    , m_zOrderListsDirty(true)
+    , m_overflowListDirty(true)
+    , m_isOverflowOnly(shouldBeOverflowOnly())
+    , m_usedTransparency(false)
+    , m_inOverflowRelayout(false)
+    , m_repaintOverflowOnResize(false)
+    , m_overflowStatusDirty(true)
+    , m_visibleContentStatusDirty(true)
+    , m_hasVisibleContent(false)
+    , m_visibleDescendantStatusDirty(false)
+    , m_hasVisibleDescendant(false)
+    , m_marquee(0)
</ins><span class="cx"> {
</span><span class="cx">     if (!object-&gt;firstChild() &amp;&amp; object-&gt;style()) {
</span><span class="cx">         m_visibleContentStatusDirty = false;
</span><span class="lines">@@ -176,6 +174,8 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderLayer::checkForRepaintOnResize()
</span><span class="cx"> {
</span><ins>+    // FIXME: The second part of the condition is probably no longer needed. The first part can be
+    // done when the object is marked for layout instead of walking the tree here.
</ins><span class="cx">     m_repaintOverflowOnResize = m_object-&gt;selfNeedsLayout() || m_object-&gt;hasOverflowClip() &amp;&amp; m_object-&gt;normalChildNeedsLayout();
</span><span class="cx">     for (RenderLayer* child = firstChild(); child; child = child-&gt;nextSibling())
</span><span class="cx">         child-&gt;checkForRepaintOnResize();
</span><span class="lines">@@ -197,27 +197,26 @@
</span><span class="cx">     updateVisibilityStatus();
</span><span class="cx">         
</span><span class="cx">     if (m_hasVisibleContent) {
</span><del>-        int x, y;
-        m_object-&gt;absolutePosition(x, y);
-        IntRect newRect = m_object-&gt;getAbsoluteRepaintRect();
</del><ins>+        IntRect newRect = m_object-&gt;absoluteClippedOverflowRect();
+        IntRect newOutlineBox = m_object-&gt;absoluteOutlineBox();
</ins><span class="cx">         if (checkForRepaint) {
</span><del>-            RenderView* c = m_object-&gt;view();
-            ASSERT(c);
-            if (c &amp;&amp; !c-&gt;printing()) {
-                bool didMove = x != m_repaintX || y != m_repaintY;
</del><ins>+            RenderView* view = m_object-&gt;view();
+            ASSERT(view);
+            if (view &amp;&amp; !view-&gt;printing()) {
+                bool didMove = newOutlineBox.location() != m_outlineBox.location();
</ins><span class="cx">                 if (!didMove &amp;&amp; !m_repaintOverflowOnResize)
</span><del>-                    m_object-&gt;repaintAfterLayoutIfNeeded(m_repaintRect);
</del><ins>+                    m_object-&gt;repaintAfterLayoutIfNeeded(m_repaintRect, m_outlineBox);
</ins><span class="cx">                 else if (didMove || newRect != m_repaintRect) {
</span><del>-                    c-&gt;repaintViewRectangle(m_repaintRect);
-                    c-&gt;repaintViewRectangle(newRect);
</del><ins>+                    view-&gt;repaintViewRectangle(m_repaintRect);
+                    view-&gt;repaintViewRectangle(newRect);
</ins><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx">         m_repaintRect = newRect;
</span><del>-        m_repaintX = x;
-        m_repaintY = y;
</del><ins>+        m_outlineBox = newOutlineBox;
</ins><span class="cx">     } else {
</span><span class="cx">         m_repaintRect = IntRect();
</span><ins>+        m_outlineBox = IntRect();
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     for (RenderLayer* child = firstChild(); child; child = child-&gt;nextSibling())
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderLayerh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderLayer.h (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderLayer.h        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderLayer.h        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -387,8 +387,7 @@
</span><span class="cx">     RenderLayer* m_last;
</span><span class="cx"> 
</span><span class="cx">     IntRect m_repaintRect; // Cached repaint rects. Used by layout.
</span><del>-    int m_repaintX;
-    int m_repaintY;
</del><ins>+    IntRect m_outlineBox;
</ins><span class="cx"> 
</span><span class="cx">     // Our current relative position offset.
</span><span class="cx">     int m_relX;
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderObject.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderObject.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderObject.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -1715,7 +1715,7 @@
</span><span class="cx">     RenderView* view = static_cast&lt;RenderView*&gt;(o);
</span><span class="cx">     if (view-&gt;printing())
</span><span class="cx">         return; // Don't repaint if we're printing.
</span><del>-    view-&gt;repaintViewRectangle(getAbsoluteRepaintRect(), immediate);
</del><ins>+    view-&gt;repaintViewRectangle(absoluteClippedOverflowRect(), immediate);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderObject::repaintRectangle(const IntRect&amp; r, bool immediate)
</span><span class="lines">@@ -1734,17 +1734,21 @@
</span><span class="cx">     view-&gt;repaintViewRectangle(absRect, immediate);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool RenderObject::repaintAfterLayoutIfNeeded(const IntRect&amp; oldBounds)
</del><ins>+bool RenderObject::repaintAfterLayoutIfNeeded(const IntRect&amp; oldBounds, const IntRect&amp; oldOutlineBox)
</ins><span class="cx"> {
</span><span class="cx">     RenderView* v = view();
</span><span class="cx">     if (v-&gt;printing())
</span><span class="cx">         return false; // Don't repaint if we're printing.
</span><span class="cx"> 
</span><del>-    IntRect newBounds = getAbsoluteRepaintRect();
-    if (newBounds == oldBounds &amp;&amp; !selfNeedsLayout())
-        return false;
</del><ins>+    IntRect newBounds = absoluteClippedOverflowRect();
+    IntRect newOutlineBox;
</ins><span class="cx"> 
</span><del>-    bool fullRepaint = selfNeedsLayout() || newBounds.location() != oldBounds.location() || mustRepaintBackgroundOrBorder();
</del><ins>+    bool fullRepaint = selfNeedsLayout() || mustRepaintBackgroundOrBorder();
+    if (!fullRepaint) {
+        newOutlineBox = absoluteOutlineBox();
+        if (newOutlineBox.location() != oldOutlineBox.location())
+            fullRepaint = true;
+    }
</ins><span class="cx">     if (fullRepaint) {
</span><span class="cx">         v-&gt;repaintViewRectangle(oldBounds);
</span><span class="cx">         if (newBounds != oldBounds)
</span><span class="lines">@@ -1752,24 +1756,64 @@
</span><span class="cx">         return true;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    if (newBounds == oldBounds &amp;&amp; newOutlineBox == oldOutlineBox)
+        return false;
+
+    int deltaLeft = newBounds.x() - oldBounds.x();
+    if (deltaLeft &gt; 0)
+        v-&gt;repaintViewRectangle(IntRect(oldBounds.x(), oldBounds.y(), deltaLeft, oldBounds.height()));
+    else if (deltaLeft &lt; 0)
+        v-&gt;repaintViewRectangle(IntRect(newBounds.x(), newBounds.y(), -deltaLeft, newBounds.height()));
+
+    int deltaRight = newBounds.right() - oldBounds.right();
+    if (deltaRight &gt; 0)
+        v-&gt;repaintViewRectangle(IntRect(oldBounds.right(), newBounds.y(), deltaRight, newBounds.height()));
+    else if (deltaRight &lt; 0)
+        v-&gt;repaintViewRectangle(IntRect(newBounds.right(), oldBounds.y(), -deltaRight, oldBounds.height()));
+
+    int deltaTop = newBounds.y() - oldBounds.y();
+    if (deltaTop &gt; 0)
+        v-&gt;repaintViewRectangle(IntRect(oldBounds.x(), oldBounds.y(), oldBounds.width(), deltaTop));
+    else if (deltaTop &lt; 0)
+        v-&gt;repaintViewRectangle(IntRect(newBounds.x(), newBounds.y(), newBounds.width(), -deltaTop));
+
+    int deltaBottom = newBounds.bottom() - oldBounds.bottom();
+    if (deltaBottom &gt; 0)
+        v-&gt;repaintViewRectangle(IntRect(newBounds.x(), oldBounds.bottom(), newBounds.width(), deltaBottom));
+    else if (deltaBottom &lt; 0)
+        v-&gt;repaintViewRectangle(IntRect(oldBounds.x(), newBounds.bottom(), oldBounds.width(), -deltaBottom));
+
+    if (newOutlineBox == oldOutlineBox)
+        return false;
+
</ins><span class="cx">     // We didn't move, but we did change size.  Invalidate the delta, which will consist of possibly
</span><span class="cx">     // two rectangles (but typically only one).
</span><span class="cx">     int ow = style() ? style()-&gt;outlineSize() : 0;
</span><del>-    int width = abs(newBounds.width() - oldBounds.width());
</del><ins>+    int width = abs(newOutlineBox.width() - oldOutlineBox.width());
</ins><span class="cx">     if (width) {
</span><span class="cx">         int borderWidth = max(borderRight(), max(style()-&gt;borderTopRightRadius().width(), style()-&gt;borderBottomRightRadius().width())) + ow;
</span><del>-        v-&gt;repaintViewRectangle(IntRect(newBounds.x() + min(newBounds.width(), oldBounds.width()) - borderWidth,
-            newBounds.y(),
</del><ins>+        IntRect rightRect(newOutlineBox.x() + min(newOutlineBox.width(), oldOutlineBox.width()) - borderWidth,
+            newOutlineBox.y(),
</ins><span class="cx">             width + borderWidth,
</span><del>-            max(newBounds.height(), oldBounds.height())));
</del><ins>+            max(newOutlineBox.height(), oldOutlineBox.height()));
+        int right = min(newBounds.right(), oldBounds.right());
+        if (rightRect.x() &lt; right) {
+            rightRect.setWidth(min(rightRect.width(), right - rightRect.x()));
+            v-&gt;repaintViewRectangle(rightRect);
+        }
</ins><span class="cx">     }
</span><del>-    int height = abs(newBounds.height() - oldBounds.height());
</del><ins>+    int height = abs(newOutlineBox.height() - oldOutlineBox.height());
</ins><span class="cx">     if (height) {
</span><span class="cx">         int borderHeight = max(borderBottom(), max(style()-&gt;borderBottomLeftRadius().height(), style()-&gt;borderBottomRightRadius().height())) + ow;
</span><del>-        v-&gt;repaintViewRectangle(IntRect(newBounds.x(),
-            min(newBounds.bottom(), oldBounds.bottom()) - borderHeight,
-            max(newBounds.width(), oldBounds.width()),
-            height + borderHeight));
</del><ins>+        IntRect bottomRect(newOutlineBox.x(),
+            min(newOutlineBox.bottom(), oldOutlineBox.bottom()) - borderHeight,
+            max(newOutlineBox.width(), oldOutlineBox.width()),
+            height + borderHeight);
+        int bottom = min(newBounds.bottom(), oldBounds.bottom());
+        if (bottomRect.y() &lt; bottom) {
+            bottomRect.setHeight(min(bottomRect.height(), bottom - bottomRect.y()));
+            v-&gt;repaintViewRectangle(bottomRect);
+        }
</ins><span class="cx">     }
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="lines">@@ -1807,7 +1851,7 @@
</span><span class="cx"> 
</span><span class="cx"> IntRect RenderObject::getAbsoluteRepaintRectWithOutline(int ow)
</span><span class="cx"> {
</span><del>-    IntRect r(getAbsoluteRepaintRect());
</del><ins>+    IntRect r(absoluteClippedOverflowRect());
</ins><span class="cx">     r.inflate(ow);
</span><span class="cx"> 
</span><span class="cx">     if (continuation() &amp;&amp; !isInline())
</span><span class="lines">@@ -1823,10 +1867,10 @@
</span><span class="cx">     return r;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntRect RenderObject::getAbsoluteRepaintRect()
</del><ins>+IntRect RenderObject::absoluteClippedOverflowRect()
</ins><span class="cx"> {
</span><span class="cx">     if (parent())
</span><del>-        return parent()-&gt;getAbsoluteRepaintRect();
</del><ins>+        return parent()-&gt;absoluteClippedOverflowRect();
</ins><span class="cx">     return IntRect();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -3001,6 +3045,16 @@
</span><span class="cx">     return rect;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+IntRect RenderObject::absoluteOutlineBox() const
+{
+    IntRect box = borderBox();
+    int x, y;
+    absolutePosition(x, y);
+    box.move(x, y);
+    box.inflate(style()-&gt;outlineSize());
+    return box;
+}
+
</ins><span class="cx"> #if ENABLE(SVG)
</span><span class="cx"> 
</span><span class="cx"> FloatRect RenderObject::relativeBBox(bool) const
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderObject.h (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderObject.h        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderObject.h        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -593,6 +593,7 @@
</span><span class="cx">     virtual int height() const { return 0; }
</span><span class="cx"> 
</span><span class="cx">     virtual IntRect borderBox() const { return IntRect(0, 0, width(), height()); }
</span><ins>+    IntRect absoluteOutlineBox() const;
</ins><span class="cx"> 
</span><span class="cx">     // The height of a block when you include normal flow overflow spillage out of the bottom
</span><span class="cx">     // of the block (e.g., a &lt;div style=&quot;height:25px&quot;&gt; that has a 100px tall image inside
</span><span class="lines">@@ -717,7 +718,7 @@
</span><span class="cx">     void repaintRectangle(const IntRect&amp;, bool immediate = false);
</span><span class="cx"> 
</span><span class="cx">     // Repaint only if our old bounds and new bounds are different.
</span><del>-    bool repaintAfterLayoutIfNeeded(const IntRect&amp; oldBounds);
</del><ins>+    bool repaintAfterLayoutIfNeeded(const IntRect&amp; oldBounds, const IntRect&amp; oldOutlineBox);
</ins><span class="cx"> 
</span><span class="cx">     // Repaint only if the object moved.
</span><span class="cx">     virtual void repaintDuringLayoutIfMoved(const IntRect&amp; rect);
</span><span class="lines">@@ -732,7 +733,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Returns the rect that should be repainted whenever this object changes.  The rect is in the view's
</span><span class="cx">     // coordinate space.  This method deals with outlines and overflow.
</span><del>-    virtual IntRect getAbsoluteRepaintRect();
</del><ins>+    virtual IntRect absoluteClippedOverflowRect();
</ins><span class="cx"> 
</span><span class="cx">     IntRect getAbsoluteRepaintRectWithOutline(int ow);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderPathcpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderPath.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderPath.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderPath.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -119,24 +119,27 @@
</span><span class="cx"> void RenderPath::layout()
</span><span class="cx"> {
</span><span class="cx">     IntRect oldBounds;
</span><ins>+    IntRect oldOutlineBox;
</ins><span class="cx">     bool checkForRepaint = checkForRepaintDuringLayout();
</span><del>-    if (selfNeedsLayout() &amp;&amp; checkForRepaint)
</del><ins>+    if (selfNeedsLayout() &amp;&amp; checkForRepaint) {
</ins><span class="cx">         oldBounds = m_absoluteBounds;
</span><ins>+        oldOutlineBox = absoluteOutlineBox();
+    }
</ins><span class="cx"> 
</span><span class="cx">     setPath(static_cast&lt;SVGStyledElement*&gt;(element())-&gt;toPathData());
</span><span class="cx"> 
</span><del>-    m_absoluteBounds = getAbsoluteRepaintRect();
</del><ins>+    m_absoluteBounds = absoluteClippedOverflowRect();
</ins><span class="cx"> 
</span><span class="cx">     setWidth(m_absoluteBounds.width());
</span><span class="cx">     setHeight(m_absoluteBounds.height());
</span><span class="cx"> 
</span><span class="cx">     if (selfNeedsLayout() &amp;&amp; checkForRepaint)
</span><del>-        repaintAfterLayoutIfNeeded(oldBounds);
</del><ins>+        repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
</ins><span class="cx"> 
</span><span class="cx">     setNeedsLayout(false);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntRect RenderPath::getAbsoluteRepaintRect()
</del><ins>+IntRect RenderPath::absoluteClippedOverflowRect()
</ins><span class="cx"> {
</span><span class="cx">     FloatRect repaintRect = absoluteTransform().mapRect(relativeBBox(true));
</span><span class="cx"> 
</span><span class="lines">@@ -244,7 +247,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderPath::absoluteRects(Vector&lt;IntRect&gt;&amp; rects, int _tx, int _ty)
</span><span class="cx"> {
</span><del>-    rects.append(getAbsoluteRepaintRect());
</del><ins>+    rects.append(absoluteClippedOverflowRect());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool RenderPath::nodeAtPoint(const HitTestRequest&amp; request, HitTestResult&amp; result, int _x, int _y, int _tx, int _ty, HitTestAction hitTestAction)
</span><span class="lines">@@ -436,7 +439,7 @@
</span><span class="cx"> 
</span><span class="cx">     // We know the marker boundaries, only after they're drawn!
</span><span class="cx">     // Otherwhise we'd need to do all the marker calculation twice
</span><del>-    // once here (through paint()) and once in getAbsoluteRepaintRect().
</del><ins>+    // once here (through paint()) and once in absoluteClippedOverflowRect().
</ins><span class="cx">     FloatRect bounds;
</span><span class="cx"> 
</span><span class="cx">     if (startMarker)
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderPathh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderPath.h (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderPath.h        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderPath.h        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -62,7 +62,7 @@
</span><span class="cx">     virtual void setLocalTransform(const AffineTransform&amp; matrix);
</span><span class="cx">     
</span><span class="cx">     virtual void layout();
</span><del>-    virtual IntRect getAbsoluteRepaintRect();
</del><ins>+    virtual IntRect absoluteClippedOverflowRect();
</ins><span class="cx">     virtual bool requiresLayer();
</span><span class="cx">     virtual short lineHeight(bool b, bool isRootLineBox = false) const;
</span><span class="cx">     virtual short baselinePosition(bool b, bool isRootLineBox = false) const;
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderSVGContainercpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderSVGContainer.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderSVGContainer.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderSVGContainer.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -100,9 +100,12 @@
</span><span class="cx">     calcViewport();
</span><span class="cx"> 
</span><span class="cx">     IntRect oldBounds;
</span><ins>+    IntRect oldOutlineBox;
</ins><span class="cx">     bool checkForRepaint = checkForRepaintDuringLayout();
</span><del>-    if (selfNeedsLayout() &amp;&amp; checkForRepaint)
</del><ins>+    if (selfNeedsLayout() &amp;&amp; checkForRepaint) {
</ins><span class="cx">         oldBounds = m_absoluteBounds;
</span><ins>+        oldOutlineBox = absoluteOutlineBox();
+    }
</ins><span class="cx"> 
</span><span class="cx">     RenderObject* child = firstChild();
</span><span class="cx">     while (child) {
</span><span class="lines">@@ -117,10 +120,10 @@
</span><span class="cx">     calcWidth();
</span><span class="cx">     calcHeight();
</span><span class="cx"> 
</span><del>-    m_absoluteBounds = getAbsoluteRepaintRect();
</del><ins>+    m_absoluteBounds = absoluteClippedOverflowRect();
</ins><span class="cx"> 
</span><span class="cx">     if (selfNeedsLayout() &amp;&amp; checkForRepaint)
</span><del>-        repaintAfterLayoutIfNeeded(oldBounds);
</del><ins>+        repaintAfterLayoutIfNeeded(oldBounds, oldOutlineBox);
</ins><span class="cx"> 
</span><span class="cx">     setNeedsLayout(false);
</span><span class="cx"> }
</span><span class="lines">@@ -310,12 +313,12 @@
</span><span class="cx">     return AffineTransform();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IntRect RenderSVGContainer::getAbsoluteRepaintRect()
</del><ins>+IntRect RenderSVGContainer::absoluteClippedOverflowRect()
</ins><span class="cx"> {
</span><span class="cx">     IntRect repaintRect;
</span><span class="cx"> 
</span><span class="cx">     for (RenderObject* current = firstChild(); current != 0; current = current-&gt;nextSibling())
</span><del>-        repaintRect.unite(current-&gt;getAbsoluteRepaintRect());
</del><ins>+        repaintRect.unite(current-&gt;absoluteClippedOverflowRect());
</ins><span class="cx"> 
</span><span class="cx"> #if ENABLE(SVG_EXPERIMENTAL_FEATURES)
</span><span class="cx">     // Filters can expand the bounding box
</span><span class="lines">@@ -329,7 +332,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderSVGContainer::absoluteRects(Vector&lt;IntRect&gt;&amp; rects, int, int)
</span><span class="cx"> {
</span><del>-    rects.append(getAbsoluteRepaintRect());
</del><ins>+    rects.append(absoluteClippedOverflowRect());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> AffineTransform RenderSVGContainer::absoluteTransform() const
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderSVGContainerh"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderSVGContainer.h (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderSVGContainer.h        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderSVGContainer.h        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -67,7 +67,7 @@
</span><span class="cx">     virtual void layout();
</span><span class="cx">     virtual void paint(PaintInfo&amp;, int parentX, int parentY);
</span><span class="cx">     
</span><del>-    virtual IntRect getAbsoluteRepaintRect();
</del><ins>+    virtual IntRect absoluteClippedOverflowRect();
</ins><span class="cx">     virtual void absoluteRects(Vector&lt;IntRect&gt;&amp; rects, int tx, int ty);
</span><span class="cx"> 
</span><span class="cx">     virtual AffineTransform absoluteTransform() const;
</span></span></pre></div>
<a id="trunkWebCorerenderingRenderSVGHiddenContainercpp"></a>
<div class="modfile"><h4>Modified: trunk/WebCore/rendering/RenderSVGHiddenContainer.cpp (19996 => 19997)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/WebCore/rendering/RenderSVGHiddenContainer.cpp        2007-03-07 03:30:37 UTC (rev 19996)
+++ trunk/WebCore/rendering/RenderSVGHiddenContainer.cpp        2007-03-07 03:35:03 UTC (rev 19997)
</span><span class="lines">@@ -85,7 +85