LayoutTests:
authorjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Jun 2007 18:10:26 +0000 (18:10 +0000)
committerjusting <justing@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 8 Jun 2007 18:10:26 +0000 (18:10 +0000)
        Reviewed by John.

        <rdar://problem/5232159> REGRESSION: Cannot select text in RSS view

        * editing/selection/5232159-expected.checksum: Added.
        * editing/selection/5232159-expected.png: Added.
        * editing/selection/5232159-expected.txt: Added.
        * editing/selection/5232159.html: Added.

WebCore:

        Reviewed by John.

        <rdar://problem/5232159> REGRESSION: Cannot select text in RSS view

        The selection is updated both on mouse movement and
        when the autoscroll timer fires.  The autoscroll
        code wasn't converting mouse coordinates to layer
        coordinates correctly, and was then using those
        coordinates to create a bad selection.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::autoscroll): Use convertToLayerCoordinates.

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

LayoutTests/ChangeLog
LayoutTests/editing/selection/5232159-expected.checksum [new file with mode: 0644]
LayoutTests/editing/selection/5232159-expected.png [new file with mode: 0644]
LayoutTests/editing/selection/5232159-expected.txt [new file with mode: 0644]
LayoutTests/editing/selection/5232159.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/rendering/RenderLayer.cpp

index 3892cd0ac74bebcb7c0429d483853830eea7e08a..b4541218207ce7926bc07501efa966437a7ed444 100644 (file)
@@ -1,3 +1,14 @@
+2007-06-08  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by John.
+        
+        <rdar://problem/5232159> REGRESSION: Cannot select text in RSS view
+
+        * editing/selection/5232159-expected.checksum: Added.
+        * editing/selection/5232159-expected.png: Added.
+        * editing/selection/5232159-expected.txt: Added.
+        * editing/selection/5232159.html: Added.
+
 2007-06-07  Justin Garcia  <justin.garcia@apple.com>
 
         Reviewed by John.
diff --git a/LayoutTests/editing/selection/5232159-expected.checksum b/LayoutTests/editing/selection/5232159-expected.checksum
new file mode 100644 (file)
index 0000000..d9398ab
--- /dev/null
@@ -0,0 +1 @@
+7b186b813fab07e13ba30c40181bddf2
\ No newline at end of file
diff --git a/LayoutTests/editing/selection/5232159-expected.png b/LayoutTests/editing/selection/5232159-expected.png
new file mode 100644 (file)
index 0000000..278f693
Binary files /dev/null and b/LayoutTests/editing/selection/5232159-expected.png differ
diff --git a/LayoutTests/editing/selection/5232159-expected.txt b/LayoutTests/editing/selection/5232159-expected.txt
new file mode 100644 (file)
index 0000000..6cd3213
--- /dev/null
@@ -0,0 +1,27 @@
+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 {P} at (0,0) size 784x36
+        RenderText {#text} at (0,0) size 755x36
+          text run at (0,0) width 755: "This tests for a bug where autoscroll code would prevent text from being selected. To run manually create a selection by"
+          text run at (0,18) width 564: "clicking somewhere in the first sentence of the paragraph below and dragging downward."
+layer at (0,60) size 800x540
+  RenderBlock (positioned) {DIV} at (0,60) size 800x540
+layer at (0,60) size 800x90
+  RenderBlock (positioned) {DIV} at (0,0) size 800x90
+    RenderBlock {DIV} at (11,0) size 778x90
+      RenderText {#text} at (0,0) size 46x18
+        text run at (0,0) width 46: "Lorem "
+      RenderInline {SPAN} at (0,0) size 38x18
+        RenderText {#text} at (46,0) size 38x18
+          text run at (46,0) width 38: "ipsum"
+      RenderText {#text} at (84,0) size 754x90
+        text run at (84,0) width 670: " dolor sit amet, consectetuer adipiscing elit. Integer vehicula accumsan massa. Quisque elementum. Cras id"
+        text run at (0,18) width 724: "neque a mi rutrum scelerisque. Nulla sed dui a massa sodales posuere. Nulla libero. Nulla posuere, felis id tincidunt"
+        text run at (0,36) width 740: "tincidunt, ipsum metus tristique risus, et convallis turpis elit eget massa. Nunc consectetuer dolor vel nunc. Cum sociis"
+        text run at (0,54) width 753: "natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque dapibus ante et nulla. Cras nec velit."
+        text run at (0,72) width 645: "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer ut tortor."
+selection start: position 3 of child 0 {#text} of child 1 {SPAN} of child 1 {DIV} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
+selection end:   position 236 of child 2 {#text} of child 1 {DIV} of child 1 {DIV} of child 3 {DIV} of child 1 {BODY} of child 0 {HTML} of document
diff --git a/LayoutTests/editing/selection/5232159.html b/LayoutTests/editing/selection/5232159.html
new file mode 100644 (file)
index 0000000..d95c120
--- /dev/null
@@ -0,0 +1,71 @@
+<html>
+<head>
+<script>
+var x, y;
+function getXY(e)
+{
+    x = e.offsetLeft + e.offsetWidth / 2;
+    y = e.offsetTop + e.offsetHeight / 2 - 5;
+    o = e.offsetParent;
+    while (o) {
+        x += o.offsetLeft;
+        y += o.offsetTop;
+        o = o.offsetParent;
+    }
+}
+function runTest()
+{
+    if (!window.layoutTestController)
+        return;
+        
+    layoutTestController.waitUntilDone();
+    setTimeout(stepOne, 0);
+}
+function stepOne()
+{
+    var start = document.getElementById("start");
+    getXY(start);
+    eventSender.dragMode = false;
+    eventSender.mouseMoveTo(x, y);
+    eventSender.mouseDown();
+    eventSender.mouseMoveTo(x, y + 10);
+    eventSender.mouseMoveTo(x, y + 15);
+    eventSender.mouseMoveTo(x, y + 20);
+    eventSender.mouseMoveTo(x, y + 25);
+    eventSender.mouseMoveTo(x, y + 30);
+    eventSender.mouseMoveTo(x, y + 35);
+    setTimeout(stepTwo, 100);
+}
+function stepTwo()
+{
+    eventSender.mouseUp();
+    layoutTestController.notifyDone();
+}
+</script>
+<style type="text/css">
+#scroller {
+    position: absolute;
+    top: 60px;
+    bottom: 0px;
+    left: 0px;
+    right: 0px;
+    overflow: overlay;
+}
+#contentarea {
+    position: absolute;
+    padding-right: 11px;
+    padding-left: 11px;
+}
+</style>
+<title>Test for REGRESSION: Cannot select text in RSS view</title>
+</head>
+<body>
+<p>This tests for a bug where autoscroll code would prevent text from being selected. To run manually create a selection by clicking somewhere in the first sentence of the paragraph below and dragging downward.</p>
+<div id="scroller">
+<div id="contentarea">
+<div>Lorem <span id="start">ipsum</span> dolor sit amet, consectetuer adipiscing elit. Integer vehicula accumsan massa. Quisque elementum. Cras id neque a mi rutrum scelerisque. Nulla sed dui a massa sodales posuere. Nulla libero. Nulla posuere, felis id tincidunt tincidunt, ipsum metus tristique risus, et convallis turpis elit eget massa. Nunc consectetuer dolor vel nunc. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Quisque dapibus ante et nulla. Cras nec velit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Integer ut tortor.</div>
+</div>
+</div>
+<script>runTest();</script>
+</body>
+</html>
\ No newline at end of file
index 1c0237fb008d9e4d27070ff10cf4d69effbdc793..ee7079c9bf399a382f5375d357074f47671bae88 100644 (file)
@@ -1,3 +1,18 @@
+2007-06-08  Justin Garcia  <justin.garcia@apple.com>
+
+        Reviewed by John.
+        
+        <rdar://problem/5232159> REGRESSION: Cannot select text in RSS view
+
+        The selection is updated both on mouse movement and
+        when the autoscroll timer fires.  The autoscroll
+        code wasn't converting mouse coordinates to layer
+        coordinates correctly, and was then using those
+        coordinates to create a bad selection.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::autoscroll): Use convertToLayerCoordinates.
+
 2007-06-08  Anders Carlsson  <andersca@apple.com>
 
         Reviewed by Geoff.
index f6fb0d4669e5601d3832f1a4e9a2f871ec58532b..31f606942eeb95b064d0809133b6d758d4ff499e 100644 (file)
@@ -848,10 +848,10 @@ void RenderLayer::autoscroll()
     
     if (currentFrame->eventHandler()->mouseDownMayStartSelect()) {
         // Convert the mouse position to local layer space.
-        int objectX, objectY;
-        renderer()->absolutePosition(objectX, objectY);
+        int x, y;
+        convertToLayerCoords(root(), x, y);
         HitTestRequest request(true, false, true);
-        HitTestResult result(currentPos - IntSize(objectX, objectY));
+        HitTestResult result(currentPos - IntSize(x, y));
         if (hitTest(request, result) && result.innerNode()->renderer() && result.innerNode()->renderer()->shouldSelect()) {
             VisiblePosition pos(result.innerNode()->renderer()->positionForPoint(result.localPoint()));
             currentFrame->eventHandler()->updateSelectionForMouseDragOverPosition(pos);