Title: [124502] branches/chromium/1180
Revision
124502
Author
[email protected]
Date
2012-08-02 14:36:16 -0700 (Thu, 02 Aug 2012)

Log Message

Merge 124295 - Float imprecision causes incorrect wrapping in LineLayout with subpixel layout
https://bugs.webkit.org/show_bug.cgi?id=92778

Reviewed by Eric Seidel.

Source/WebCore:

Due to float imprecision an incorrect wrapping decision is made in
certain cases where the values being compare are close but not exactly
the same. This can happen as the size of blocks is represented in layout
units while line layout uses floats.

Test: fast/sub-pixel/inline-block-should-not-wrap.html

* rendering/RenderBlockLineLayout.cpp:
(WebCore::LineWidth::fitsOnLine):
Use LayoutUnit::epsilon when comparing values as that is the maximum
precision we support.

LayoutTests:

Add test ensuring that an inline block isn't wrapped incorrectly.

* fast/sub-pixel/inline-block-should-not-wrap-expected.html: Added.
* fast/sub-pixel/inline-block-should-not-wrap.html: Added.
* platform/mac-lion/Skipped:
* platform/mac-snowleopard/Skipped:
* platform/mac-wk2/Skipped:
* platform/mac/Skipped:
* platform/qt-4.8/Skipped:
* platform/qt/Skipped:
* platform/win-wk2/Skipped:
* platform/win-xp/Skipped:
* platform/win/Skipped:
* platform/wincairo/Skipped:
* platform/wk2/Skipped:


[email protected]
Review URL: https://chromiumcodereview.appspot.com/10829151

Modified Paths

Added Paths

Diff

Copied: branches/chromium/1180/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap-expected.html (from rev 124295, trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap-expected.html) (0 => 124502)


--- branches/chromium/1180/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap-expected.html	                        (rev 0)
+++ branches/chromium/1180/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap-expected.html	2012-08-02 21:36:16 UTC (rev 124502)
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <style>
+            body {
+                font-size: 0.8em;
+            }
+           
+            ul {
+                display: inline;
+                margin: 0;
+                padding: 0;
+                list-style: none;
+            }
+            
+            li {
+                display: inline-block;
+                border-left: 1px solid silver;
+                padding-left: 0.5em;
+                white-space: nowrap;
+            }
+
+        </style>
+    </head>
+
+    <body>
+        <ul>
+            <li><a href="" of North America</a></li>
+            <li><a href="" French loanwords</a></li>
+        </ul>
+        <p>
+            The two links above should not wrap.
+        </p>
+    </body>
+</html>

Copied: branches/chromium/1180/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap.html (from rev 124295, trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap.html) (0 => 124502)


--- branches/chromium/1180/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap.html	                        (rev 0)
+++ branches/chromium/1180/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap.html	2012-08-02 21:36:16 UTC (rev 124502)
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+    <head>
+        <style>
+            body {
+                font-size: 0.8em;
+            }
+           
+            ul {
+                display: inline;
+                margin: 0;
+                padding: 0;
+                list-style: none;
+            }
+            
+            li {
+                display: inline-block;
+                border-left: 1px solid silver;
+                padding-left: 0.5em;
+            }
+
+        </style>
+    </head>
+
+    <body>
+        <ul>
+            <li><a href="" of North America</a></li>
+            <li><a href="" French loanwords</a></li>
+        </ul>
+        <p>
+            The two links above should not wrap.
+        </p>
+    </body>
+</html>

Modified: branches/chromium/1180/LayoutTests/platform/mac/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/mac/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/mac/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -809,6 +809,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/mac-lion/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/mac-lion/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/mac-lion/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -108,6 +108,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/mac-snowleopard/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/mac-snowleopard/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/mac-snowleopard/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -202,6 +202,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/mac-wk2/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/mac-wk2/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/mac-wk2/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -208,6 +208,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/qt/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/qt/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/qt/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -228,6 +228,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/qt-4.8/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/qt-4.8/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/qt-4.8/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -95,6 +95,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/win/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/win/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/win/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -1747,6 +1747,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/win-wk2/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/win-wk2/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/win-wk2/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -941,6 +941,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/win-xp/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/win-xp/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/win-xp/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -41,6 +41,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/wincairo/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/wincairo/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/wincairo/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -2096,6 +2096,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/LayoutTests/platform/wk2/Skipped (124501 => 124502)


--- branches/chromium/1180/LayoutTests/platform/wk2/Skipped	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/LayoutTests/platform/wk2/Skipped	2012-08-02 21:36:16 UTC (rev 124502)
@@ -91,6 +91,7 @@
 fast/sub-pixel/float-containing-block-with-margin.html
 fast/sub-pixel/float-with-right-margin-zoom.html
 fast/sub-pixel/float-wrap-with-subpixel-top.html
+fast/sub-pixel/inline-block-should-not-wrap.html
 fast/sub-pixel/inline-block-with-margin.html
 fast/sub-pixel/inline-block-with-padding.html
 fast/sub-pixel/layout-boxes-with-zoom.html

Modified: branches/chromium/1180/Source/WebCore/rendering/RenderBlockLineLayout.cpp (124501 => 124502)


--- branches/chromium/1180/Source/WebCore/rendering/RenderBlockLineLayout.cpp	2012-08-02 21:35:34 UTC (rev 124501)
+++ branches/chromium/1180/Source/WebCore/rendering/RenderBlockLineLayout.cpp	2012-08-02 21:36:16 UTC (rev 124502)
@@ -75,8 +75,13 @@
         ASSERT(block);
         updateAvailableWidth();
     }
+#if ENABLE(SUBPIXEL_LAYOUT)
+    bool fitsOnLine() const { return currentWidth() <= m_availableWidth + LayoutUnit::epsilon(); }
+    bool fitsOnLine(float extra) const { return currentWidth() + extra <= m_availableWidth + LayoutUnit::epsilon(); }
+#else
     bool fitsOnLine() const { return currentWidth() <= m_availableWidth; }
     bool fitsOnLine(float extra) const { return currentWidth() + extra <= m_availableWidth; }
+#endif
     float currentWidth() const { return m_committedWidth + m_uncommittedWidth; }
 
     // FIXME: We should eventually replace these three functions by ones that work on a higher abstraction.
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to