2011-01-19 Levi Weintraub <leviw@google.com>
authorleviw@chromium.org <leviw@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Jan 2011 02:03:28 +0000 (02:03 +0000)
committerleviw@chromium.org <leviw@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 20 Jan 2011 02:03:28 +0000 (02:03 +0000)
        Reviewed by Darin Adler.

        Re-committing this with the proper expected results.

        Changing RenderText::localCaretRect to clip to its containing block's logicalLeft and
        logicalRightLayoutOverflow instead of simply using logicalLeft and logicalRight, as this
        resulted in the caret being placed incorrectly in overflowing editable IFrame content.

        Long lines in non-white-space-pre editable documents show cursor in wrong place
        https://bugs.webkit.org/show_bug.cgi?id=48132

        * editing/selection/caret-painting-in-overflowing-autowrap-content.html: Added.
        * editing/selection/resources/iframe-positioning-caret-at-end.html: Added.
        * platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.checksum: Added.
        * platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.png: Added.
        * platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.txt: Added.
2011-01-19  Levi Weintraub  <leviw@google.com>

        Reviewed by Darin Adler.

        Re-committing this with the proper expected results.

        Changing RenderText::localCaretRect to clip to its containing block's logicalLeft and
        logicalRightLayoutOverflow instead of simply using logicalLeft and logicalRight, as this
        resulted in the caret being placed incorrectly in overflowing editable IFrame content.

        Long lines in non-white-space-pre editable documents show cursor in wrong place
        https://bugs.webkit.org/show_bug.cgi?id=48132

        Test: editing/selection/caret-painting-in-overflowing-autowrap-content.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

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

LayoutTests/ChangeLog
LayoutTests/editing/selection/caret-painting-in-overflowing-autowrap-content.html [new file with mode: 0644]
LayoutTests/editing/selection/resources/iframe-positioning-caret-at-end.html [new file with mode: 0644]
LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.checksum [new file with mode: 0644]
LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.png [new file with mode: 0644]
LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.txt [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/rendering/RenderText.cpp

index b327f1c..31e2e69 100644 (file)
@@ -1,3 +1,22 @@
+2011-01-19  Levi Weintraub  <leviw@google.com>
+
+        Reviewed by Darin Adler.
+
+        Re-committing this with the proper expected results.
+
+        Changing RenderText::localCaretRect to clip to its containing block's logicalLeft and
+        logicalRightLayoutOverflow instead of simply using logicalLeft and logicalRight, as this
+        resulted in the caret being placed incorrectly in overflowing editable IFrame content.
+
+        Long lines in non-white-space-pre editable documents show cursor in wrong place
+        https://bugs.webkit.org/show_bug.cgi?id=48132
+
+        * editing/selection/caret-painting-in-overflowing-autowrap-content.html: Added.
+        * editing/selection/resources/iframe-positioning-caret-at-end.html: Added.
+        * platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.checksum: Added.
+        * platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.png: Added.
+        * platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.txt: Added.
+
 2011-01-18  Darin Adler  <darin@apple.com>
 
         Reviewed by Geoffrey Garen.
diff --git a/LayoutTests/editing/selection/caret-painting-in-overflowing-autowrap-content.html b/LayoutTests/editing/selection/caret-painting-in-overflowing-autowrap-content.html
new file mode 100644 (file)
index 0000000..2c8a157
--- /dev/null
@@ -0,0 +1,6 @@
+<html>
+<body>
+
+<iframe src="resources/iframe-positioning-caret-at-end.html" style="border:1px solid black; width:300px; height:100px" id="iframe" onLoad="this.focus()"></iframe>
+<p>The caret should be able to be positioned at the end of the editable content in the IFrame.</p>
+</body></html>
\ No newline at end of file
diff --git a/LayoutTests/editing/selection/resources/iframe-positioning-caret-at-end.html b/LayoutTests/editing/selection/resources/iframe-positioning-caret-at-end.html
new file mode 100644 (file)
index 0000000..172bb5d
--- /dev/null
@@ -0,0 +1,11 @@
+<html><head></head>
+<script>
+  function runTest() {
+    document.designMode = 'on';
+    var selection = window.getSelection();
+    selection.setPosition(document.body, 1);
+    window.scrollTo(1000, 0);
+  };
+</script>
+<body onLoad="runTest();">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXXX</body>
+</html>
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.checksum b/LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.checksum
new file mode 100644 (file)
index 0000000..5095432
--- /dev/null
@@ -0,0 +1 @@
+49ab6961807b5cfbcb441bdf6ee124a4
\ No newline at end of file
diff --git a/LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.png b/LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.png
new file mode 100644 (file)
index 0000000..d6c5411
Binary files /dev/null and b/LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.png differ
diff --git a/LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.txt b/LayoutTests/platform/mac/editing/selection/caret-painting-in-overflowing-autowrap-content-expected.txt
new file mode 100644 (file)
index 0000000..4a2c622
--- /dev/null
@@ -0,0 +1,18 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x576
+      RenderBlock (anonymous) at (0,0) size 784x102
+        RenderPartObject {IFRAME} at (0,0) size 302x102 [border: (1px solid #000000)]
+          layer at (0,0) size 569x85
+            RenderView at (0,0) size 300x85
+          layer at (0,0) size 300x85
+            RenderBlock {HTML} at (0,0) size 300x85
+              RenderBody {BODY} at (8,8) size 284x69
+                RenderText {#text} at (0,0) size 561x18
+                  text run at (0,0) width 561: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXXX"
+        RenderText {#text} at (0,0) size 0x0
+      RenderBlock {P} at (0,118) size 784x18
+        RenderText {#text} at (0,0) size 558x18
+          text run at (0,0) width 558: "The caret should be able to be positioned at the end of the editable content in the IFrame."
index bd91d1a..646f412 100644 (file)
@@ -1,3 +1,21 @@
+2011-01-19  Levi Weintraub  <leviw@google.com>
+
+        Reviewed by Darin Adler.
+
+        Re-committing this with the proper expected results.
+
+        Changing RenderText::localCaretRect to clip to its containing block's logicalLeft and
+        logicalRightLayoutOverflow instead of simply using logicalLeft and logicalRight, as this
+        resulted in the caret being placed incorrectly in overflowing editable IFrame content.
+
+        Long lines in non-white-space-pre editable documents show cursor in wrong place
+        https://bugs.webkit.org/show_bug.cgi?id=48132
+
+        Test: editing/selection/caret-painting-in-overflowing-autowrap-content.html
+
+        * rendering/RenderText.cpp:
+        (WebCore::RenderText::localCaretRect):
+
 2011-01-18 MORITA Hajime <morrita@google.com>
 
         Reviewed by David Levin.
index 58c41ab..ae155ee 100644 (file)
@@ -510,11 +510,11 @@ IntRect RenderText::localCaretRect(InlineBox* inlineBox, int caretOffset, int* e
     int leftEdge;
     int rightEdge;
     if (style()->autoWrap()) {
-        leftEdge = cb->logicalLeft();
-        rightEdge = cb->logicalRight();
+        leftEdge = cb->logicalLeftLayoutOverflow();
+        rightEdge = cb->logicalRightLayoutOverflow();
     } else {
-        leftEdge = min(cb->logicalLeft(), rootLeft);
-        rightEdge = max(cb->logicalRight(), rootRight);
+        leftEdge = min(cb->logicalLeftLayoutOverflow(), rootLeft);
+        rightEdge = max(cb->logicalRightLayoutOverflow(), rootRight);
     }
 
     bool rightAligned = false;