Simple line layout: Text jumps sometimes on naughty strings page
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Aug 2015 21:39:20 +0000 (21:39 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 27 Aug 2015 21:39:20 +0000 (21:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=148399
rdar://problem/22212568

Reviewed by Antti Koivisto.

The x position we set for tab characters during painting should
be the same as if it was set by the inline box tree painting.

Inline box tree computes the distance from the rootbox for each line
and sets this value as the xPos for the TextRun.
Currently simple line layout does not support cases where a line
would have an offset, so this value is always 0.

Source/WebCore:

Test: fast/text/whitespace/simple-line-layout-tab-position.html

* rendering/SimpleLineLayoutFunctions.cpp:
(WebCore::SimpleLineLayout::paintFlow):

LayoutTests:

* fast/text/whitespace/simple-line-layout-tab-position-expected.html: Added.
* fast/text/whitespace/simple-line-layout-tab-position.html: Added.

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

LayoutTests/ChangeLog
LayoutTests/fast/text/whitespace/simple-line-layout-tab-position-expected.html [new file with mode: 0644]
LayoutTests/fast/text/whitespace/simple-line-layout-tab-position.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/rendering/SimpleLineLayoutFunctions.cpp

index 179de1d..b30a873 100644 (file)
@@ -1,3 +1,22 @@
+2015-08-27  Zalan Bujtas  <zalan@apple.com>
+
+        Simple line layout: Text jumps sometimes on naughty strings page
+        https://bugs.webkit.org/show_bug.cgi?id=148399
+        rdar://problem/22212568
+
+        Reviewed by Antti Koivisto.
+
+        The x position we set for tab characters during painting should
+        be the same as if it was set by the inline box tree painting.
+
+        Inline box tree computes the distance from the rootbox for each line
+        and sets this value as the xPos for the TextRun.
+        Currently simple line layout does not support cases where a line
+        would have an offset, so this value is always 0.
+
+        * fast/text/whitespace/simple-line-layout-tab-position-expected.html: Added.
+        * fast/text/whitespace/simple-line-layout-tab-position.html: Added.
+
 2015-08-27  Anders Carlsson  <andersca@apple.com>
 
         REGRESSION (r188987): imported/mozilla/svg/filters/feConvolveMatrix-1.svg fails
diff --git a/LayoutTests/fast/text/whitespace/simple-line-layout-tab-position-expected.html b/LayoutTests/fast/text/whitespace/simple-line-layout-tab-position-expected.html
new file mode 100644 (file)
index 0000000..257239b
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that simple line layout renderes tab positions properly</title>
+<script>
+  if (window.internals)
+    internals.settings.setSimpleLineLayoutEnabled(false);
+</script>
+<style>
+  body { 
+    margin: 0px; 
+  }
+
+  div {
+    padding-left: 10px;
+    font-size: 22px;
+    white-space: pre;
+  }
+</style>
+</head>
+<body>
+<div>  a       b       c       e       f       g       h       i       j       k</div>
+<div style="text-align: center">       a       b       c       e       f       g       h       i       j       k</div>
+<div style="text-align: right">        a       b       c       e       f       g       h       i       j       k</div>
+</body>
+</html>
diff --git a/LayoutTests/fast/text/whitespace/simple-line-layout-tab-position.html b/LayoutTests/fast/text/whitespace/simple-line-layout-tab-position.html
new file mode 100644 (file)
index 0000000..b15d4d9
--- /dev/null
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that simple line layout renderes tab positions properly</title>
+<style>
+  body { 
+    margin: 0px; 
+  }
+
+  div {
+    padding-left: 10px;
+    font-size: 22px;
+    white-space: pre;
+  }
+</style>
+</head>
+<body>
+<div>  a       b       c       e       f       g       h       i       j       k</div>
+<div style="text-align: center">       a       b       c       e       f       g       h       i       j       k</div>
+<div style="text-align: right">        a       b       c       e       f       g       h       i       j       k</div>
+</body>
+</html>
index 7e3f96f..8235128 100644 (file)
@@ -1,3 +1,24 @@
+2015-08-27  Zalan Bujtas  <zalan@apple.com>
+
+        Simple line layout: Text jumps sometimes on naughty strings page
+        https://bugs.webkit.org/show_bug.cgi?id=148399
+        rdar://problem/22212568
+
+        Reviewed by Antti Koivisto.
+
+        The x position we set for tab characters during painting should
+        be the same as if it was set by the inline box tree painting.
+
+        Inline box tree computes the distance from the rootbox for each line
+        and sets this value as the xPos for the TextRun.
+        Currently simple line layout does not support cases where a line
+        would have an offset, so this value is always 0.
+
+        Test: fast/text/whitespace/simple-line-layout-tab-position.html
+
+        * rendering/SimpleLineLayoutFunctions.cpp:
+        (WebCore::SimpleLineLayout::paintFlow):
+
 2015-08-27  Alex Christensen  <achristensen@webkit.org>
 
         Isolate Source directories in CMake build
index ddb0adb..59d1a7d 100644 (file)
@@ -88,7 +88,8 @@ void paintFlow(const RenderBlockFlow& flow, const Layout& layout, PaintInfo& pai
             continue;
         TextRun textRun(run.text());
         textRun.setTabSize(!style.collapseWhiteSpace(), style.tabSize());
-        textRun.setXPos(run.rect().x());
+        // x position indicates the line offset from the rootbox. It's always 0 in case of simple line layout.
+        textRun.setXPos(0);
         FloatPoint textOrigin = FloatPoint(rect.x() + paintOffset.x(), roundToDevicePixel(run.baselinePosition() + paintOffset.y(), deviceScaleFactor));
         context.drawText(font, textRun, textOrigin);
         if (debugBordersEnabled)