Title: [124295] trunk
Revision
124295
Author
[email protected]
Date
2012-07-31 21:03:52 -0700 (Tue, 31 Jul 2012)

Log Message

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:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (124294 => 124295)


--- trunk/LayoutTests/ChangeLog	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/ChangeLog	2012-08-01 04:03:52 UTC (rev 124295)
@@ -1,3 +1,26 @@
+2012-07-31  Emil A Eklund  <[email protected]>
+
+        Float imprecision causes incorrect wrapping in LineLayout with subpixel layout
+        https://bugs.webkit.org/show_bug.cgi?id=92778
+
+        Reviewed by Eric Seidel.
+
+        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:
+
 2012-08-01  Joone Hur  <[email protected]>
 
         Unreviewed EFL gardening.

Added: trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap-expected.html (0 => 124295)


--- trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap-expected.html	                        (rev 0)
+++ trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap-expected.html	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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>

Added: trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap.html (0 => 124295)


--- trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap.html	                        (rev 0)
+++ trunk/LayoutTests/fast/sub-pixel/inline-block-should-not-wrap.html	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/LayoutTests/platform/mac/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/mac/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/mac/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -816,6 +816,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: trunk/LayoutTests/platform/mac-lion/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/mac-lion/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/mac-lion/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/LayoutTests/platform/mac-snowleopard/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/mac-snowleopard/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/mac-snowleopard/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/LayoutTests/platform/mac-wk2/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/mac-wk2/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/mac-wk2/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/LayoutTests/platform/qt/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/qt/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/qt/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -269,6 +269,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: trunk/LayoutTests/platform/qt-4.8/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/qt-4.8/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/qt-4.8/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/LayoutTests/platform/win/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/win/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/win/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -1733,6 +1733,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: trunk/LayoutTests/platform/win-wk2/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/win-wk2/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/win-wk2/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/LayoutTests/platform/win-xp/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/win-xp/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/win-xp/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/LayoutTests/platform/wincairo/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/wincairo/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/wincairo/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -2122,6 +2122,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: trunk/LayoutTests/platform/wk2/Skipped (124294 => 124295)


--- trunk/LayoutTests/platform/wk2/Skipped	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/LayoutTests/platform/wk2/Skipped	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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: trunk/Source/WebCore/ChangeLog (124294 => 124295)


--- trunk/Source/WebCore/ChangeLog	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/Source/WebCore/ChangeLog	2012-08-01 04:03:52 UTC (rev 124295)
@@ -1,3 +1,22 @@
+2012-07-31  Emil A Eklund  <[email protected]>
+
+        Float imprecision causes incorrect wrapping in LineLayout with subpixel layout
+        https://bugs.webkit.org/show_bug.cgi?id=92778
+
+        Reviewed by Eric Seidel.
+
+        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.
+
 2012-07-31  Hayato Ito  <[email protected]>
 
         Refactor EventDispatcher::dispatchEvent() so that we can call each phase (Caputure, Target and Bubbling) of event dispatching separately.

Modified: trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp (124294 => 124295)


--- trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp	2012-08-01 03:56:02 UTC (rev 124294)
+++ trunk/Source/WebCore/rendering/RenderBlockLineLayout.cpp	2012-08-01 04:03:52 UTC (rev 124295)
@@ -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