Fix for 3785211. Make sure to do a layout with the old position before doing a layou...
authorhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Dec 2004 01:13:40 +0000 (01:13 +0000)
committerhyatt <hyatt@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Dec 2004 01:13:40 +0000 (01:13 +0000)
This is actually a regression from my positioned object DHTML optimization.

        Reviewed by kocienda

        * khtml/rendering/render_object.cpp:
        (RenderObject::setStyle):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8211 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/fast/dynamic/012-expected.txt [new file with mode: 0644]
LayoutTests/fast/dynamic/012.html [new file with mode: 0644]
LayoutTests/fast/dynamic/resources/closed.png [new file with mode: 0644]
LayoutTests/fast/dynamic/resources/open.png [new file with mode: 0644]
WebCore/ChangeLog-2005-08-23
WebCore/khtml/rendering/render_object.cpp

diff --git a/LayoutTests/fast/dynamic/012-expected.txt b/LayoutTests/fast/dynamic/012-expected.txt
new file mode 100644 (file)
index 0000000..12ec83b
--- /dev/null
@@ -0,0 +1,58 @@
+layer at (0,0) size 800x600
+  RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderBlock {H2} at (0,0) size 784x28
+        RenderText {TEXT} at (0,0) size 220x28
+          text run at (0,0) width 220: "Block Collapse Demo"
+      RenderBlock {P} at (0,47) size 784x18
+        RenderText {TEXT} at (0,0) size 687x18
+          text run at (0,0) width 304: "This table below has three hierarchical sections. "
+          text run at (304,0) width 383: "Collapsing a section should cause those below it to move up."
+      RenderBlock {P} at (0,81) size 784x18
+        RenderText {TEXT} at (0,0) size 765x18
+          text run at (0,0) width 765: "This works on the latest Windows IE and Mozilla Firefox (Win and Mac) but not on Safari 1.2.3 (v125.9) {or 2.0 (146)}."
+      RenderBlock {P} at (0,115) size 784x18
+        RenderText {TEXT} at (0,0) size 747x18
+          text run at (0,0) width 579: "Note that the second section is collapsed when the page opens and expanding it works fine. "
+          text run at (579,0) width 168: "Just the collapse is broken."
+      RenderBlock {DIV} at (0,149) size 784x148
+        RenderBlock {HR} at (0,0) size 784x2 [border: (1px inset #000000)]
+        RenderBlock {DIV} at (0,10) size 784x20
+          RenderImage {IMG} at (0,0) size 16x16
+          RenderText {TEXT} at (16,2) size 75x18
+            text run at (16,2) width 75: " Block One"
+        RenderBlock {DIV} at (0,30) size 784x20
+          RenderImage {IMG} at (0,0) size 16x16
+          RenderText {TEXT} at (16,2) size 78x18
+            text run at (16,2) width 78: " Block Two"
+        RenderBlock {DIV} at (0,50) size 784x20
+          RenderImage {IMG} at (0,0) size 16x16
+          RenderText {TEXT} at (16,2) size 88x18
+            text run at (16,2) width 88: " Block Three"
+        RenderBlock {DIV} at (0,70) size 784x68
+          RenderTable {TABLE} at (0,0) size 784x68
+            RenderTableSection {TBODY} at (0,0) size 0x68
+              RenderTableRow {TR} at (0,0) size 0x0
+                RenderTableCell {TD} at (2,2) size 32x20 [r=0 c=0 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 4x18
+                    text run at (1,1) width 4: " "
+                RenderTableCell {TD} at (36,2) size 746x20 [r=0 c=1 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 65x18
+                    text run at (1,1) width 65: "This is the"
+              RenderTableRow {TR} at (0,0) size 0x0
+                RenderTableCell {TD} at (2,24) size 32x20 [r=1 c=0 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 4x18
+                    text run at (1,1) width 4: " "
+                RenderTableCell {TD} at (36,24) size 746x20 [r=1 c=1 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 69x18
+                    text run at (1,1) width 69: "contents of"
+              RenderTableRow {TR} at (0,0) size 0x0
+                RenderTableCell {TD} at (2,46) size 32x20 [r=2 c=0 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 4x18
+                    text run at (1,1) width 4: " "
+                RenderTableCell {TD} at (36,46) size 746x20 [r=2 c=1 rs=1 cs=1]
+                  RenderText {TEXT} at (1,1) size 74x18
+                    text run at (1,1) width 74: "block three."
+        RenderBlock {HR} at (0,146) size 784x2 [border: (1px inset #000000)]
diff --git a/LayoutTests/fast/dynamic/012.html b/LayoutTests/fast/dynamic/012.html
new file mode 100644 (file)
index 0000000..74772b4
--- /dev/null
@@ -0,0 +1,68 @@
+<html>
+  <head>
+    <title>Block Collapse Demo</title>
+    <script>
+      function toggleBlock( pBlockName )
+      {
+        var theImage = document.getElementById( "I-" + pBlockName )
+        var theBlock = document.getElementById( "T-" + pBlockName )
+        
+        if (theImage.alt == "shown")
+        {
+          theImage.src   = "resources/closed.png"
+          theImage.alt   = "hidden"
+          theBlock.style.visibility = "hidden"
+          theBlock.style.position   = "absolute"
+        }
+        else
+        {
+          theImage.src   = "resources/open.png"
+          theImage.alt   = "shown"
+          theBlock.style.position   = "static"
+          theBlock.style.visibility = "visible"
+        }
+      }
+    </script>
+  </head>
+  <body onload="document.body.offsetTop; toggleBlock('Alpha')">
+    <h2>Block Collapse Demo</h2>
+    <p>This table below has three hierarchical sections.  Collapsing a section should cause those below it to move up.</p>
+    <p>This works on the latest Windows IE and Mozilla Firefox (Win and Mac) but not on Safari 1.2.3 (v125.9) {or 2.0 (146)}.</p>
+    <p>Note that the second section is collapsed when the page opens and expanding it works fine.  Just the collapse is broken.</p>
+
+
+    <div>
+      <hr>
+      <div onclick="toggleBlock('Alpha')" style="font-weight:bold;cursor:pointer;"><img src="resources/open.png" alt="shown" id="I-Alpha">&nbsp;Block One</div>
+      <div id="T-Alpha">
+        <table width="100%">
+          <tr><td width=30>&nbsp;</td><td>This is the</td></tr>
+          <tr><td width=30>&nbsp;</td><td>contents of</td></tr>
+          <tr><td width=30>&nbsp;</td><td>block one.</td></tr>
+        </table>
+      </div>
+      
+      <div onclick="toggleBlock('Beta')" style="font-weight:bold;cursor:pointer;"><img src="resources/closed.png" alt="hidden" id="I-Beta">&nbsp;Block Two</div>
+      
+      <div id="T-Beta" style="visibility:hidden;position:absolute;">
+        <table width="100%">
+          <tr><td width=30>&nbsp;</td><td>This is the</td></tr>
+          <tr><td width=30>&nbsp;</td><td>contents of</td></tr>
+          <tr><td width=30>&nbsp;</td><td>block two.</td></tr>
+        </table>
+      </div>
+      
+      <div onclick="toggleBlock('Gamma')" style="font-weight:bold;cursor:pointer;"><img src="resources/open.png" alt="shown" id="I-Gamma">&nbsp;Block Three</div>
+      
+      <div id="T-Gamma">
+        <table width="100%">
+          <tr><td width=30>&nbsp;</td><td>This is the</td></tr>
+          <tr><td width=30>&nbsp;</td><td>contents of</td></tr>
+          <tr><td width=30>&nbsp;</td><td>block three.</td></tr>
+        </table>
+      </div>
+      <hr>
+    </div>
+  </body>
+</html>
+
diff --git a/LayoutTests/fast/dynamic/resources/closed.png b/LayoutTests/fast/dynamic/resources/closed.png
new file mode 100644 (file)
index 0000000..4fdba37
Binary files /dev/null and b/LayoutTests/fast/dynamic/resources/closed.png differ
diff --git a/LayoutTests/fast/dynamic/resources/open.png b/LayoutTests/fast/dynamic/resources/open.png
new file mode 100644 (file)
index 0000000..7889e1e
Binary files /dev/null and b/LayoutTests/fast/dynamic/resources/open.png differ
index dcf754f..ea9dfbe 100644 (file)
@@ -1,5 +1,15 @@
 2004-12-14  David Hyatt  <hyatt@apple.com>
 
+       Fix for 3785211. Make sure to do a layout with the old position before doing a layout after changing to the new position.
+       This is actually a regression from my positioned object DHTML optimization.
+       
+        Reviewed by kocienda
+
+        * khtml/rendering/render_object.cpp:
+        (RenderObject::setStyle):
+
+2004-12-14  David Hyatt  <hyatt@apple.com>
+
        Make sure the class attribute works when newlines are present in the attribute.
 
         Reviewed by kocienda
index 74ba9be..c5963aa 100644 (file)
@@ -1561,6 +1561,11 @@ void RenderObject::setStyle(RenderStyle *style)
              m_style->opacity() != style->opacity()))
             layer()->repaintIncludingDescendants();
 
+        // When a layout hint happens and an object's position style changes, we have to do a layout
+        // to dirty the render tree using the old position value now.
+        if (d == RenderStyle::Layout && m_parent && m_style->position() != style->position())
+            setNeedsLayoutAndMinMaxRecalc();
+        
         if (isFloating() && (m_style->floating() != style->floating()))
             // For changes in float styles, we need to conceivably remove ourselves
             // from the floating objects list.