Changeset 49490 in webkit


Ignore:
Timestamp:
Oct 12, 2009 9:59:36 PM (15 years ago)
Author:
eric@webkit.org
Message:

2009-10-12 Xiaomei Ji <xji@chromium.org>

Reviewed by Sam Weinig.

Fix issue caretRangeFromPoint() returns wrong result for a zoomed and
scrolled page.
https://bugs.webkit.org/show_bug.cgi?id=30034

  • fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport-expected.txt:
  • fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport.html:
  • fast/dom/elementFromPoint-relative-to-viewport-expected.txt:
  • fast/dom/elementFromPoint-relative-to-viewport.html:

2009-10-12 Xiaomei Ji <xji@chromium.org>

Reviewed by Sam Weinig.

Fix issue caretRangeFromPoint() returns wrong result for a zoomed and
scrolled page.
https://bugs.webkit.org/show_bug.cgi?id=30034

  • dom/Document.cpp: (WebCore::Document::elementFromPoint): calculate the correct point relative to document when the page is zoomed and scrolled. (WebCore::Document::caretRangeFromPoint): calculate the correct point relative to document when the page is zoomed and scrolled.
Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r49489 r49490  
     12009-10-12  Xiaomei Ji  <xji@chromium.org>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Fix issue caretRangeFromPoint() returns wrong result for a zoomed and
     6        scrolled page.
     7        https://bugs.webkit.org/show_bug.cgi?id=30034
     8
     9        * fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport-expected.txt:
     10        * fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport.html:
     11        * fast/dom/elementFromPoint-relative-to-viewport-expected.txt:
     12        * fast/dom/elementFromPoint-relative-to-viewport.html:
     13
    1142009-10-12  Fumitoshi Ukai  <ukai@chromium.org>
    215
  • trunk/LayoutTests/fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport-expected.txt

    r48398 r49490  
    2222PASS Range.startOffset check (got 14, expected 14)
    2323 
     24PASS Range.startContainer check (got [object Text], expected [object Text])
     25PASS Range.startOffset check (got 1, expected 1)
     26PASS Range.startContainer check (got [object Text], expected [object Text])
     27PASS Range.startOffset check (got 7, expected 7)
     28PASS Range.startContainer check (got [object Text], expected [object Text])
     29PASS Range.startOffset check (got 3, expected 3)
     30PASS Range.startContainer check (got [object Text], expected [object Text])
     31PASS Range.startOffset check (got 9, expected 9)
     32 
    2433PASS successfullyParsed is true
    2534
  • trunk/LayoutTests/fast/dom/Document/CaretRangeFromPoint/hittest-relative-to-viewport.html

    r48398 r49490  
    3232        elementBottom = document.getElementById('test-bottom');
    3333
    34     function testsWithBaseline(baselinePos, expectedContainer) {
     34    function testsWithBaseline(baselinePos, expectedContainer, zoomOrNot) {
    3535        function test(expectedOffset, scrollByX, scrollByY) {
    3636            var hitPosition = { x: 15, y: 15 },
     
    6565        }
    6666
    67         test(0, 0, 0);
    68         test(12, 0, 25);
    69         test(2, 25, 0);
    70         test(14, 25, 25);
     67        if (zoomOrNot == "zoom") {
     68            test(1, 0, 0);
     69            test(7, 0, 25);
     70            test(3, 50, 0);
     71            test(9, 50, 25);
     72        } else {
     73            test(0, 0, 0);
     74            test(12, 0, 25);
     75            test(2, 25, 0);
     76            test(14, 25, 25);
     77        }
     78
    7179        debug(" ");
    7280    }
     
    7987
    8088     // Testing inside initial containing block (top left)
    81     testsWithBaseline(topBaseline, elementTop.firstChild);
     89    testsWithBaseline(topBaseline, elementTop.firstChild, "none");
    8290
    8391    // Testing outside initial containing block (mid-page)
    84     testsWithBaseline(bottomBaseline, elementBottom.firstChild);
     92    testsWithBaseline(bottomBaseline, elementBottom.firstChild, "none");
     93
     94    eventSender.zoomPageOut();
     95    testsWithBaseline(topBaseline, elementTop.firstChild, "zoom");
    8596
    8697    if (window.layoutTestController) {
  • trunk/LayoutTests/fast/dom/elementFromPoint-relative-to-viewport-expected.txt

    r48398 r49490  
    55
    66PASS unscrolledBoxInitial is '0'
    7 PASS scrolledDownBoxInitial is '15'
     7PASS scrolledDownBoxInitial is '5'
    88PASS scrolledRightBoxInitial is '3'
    9 PASS scrolledDownAndRightBoxInitial is '18'
     9PASS scrolledDownAndRightBoxInitial is '8'
    1010PASS unscrolledBoxOffscreen is '0'
    11 PASS scrolledDownBoxOffscreen is '15'
     11PASS scrolledDownBoxOffscreen is '5'
    1212PASS scrolledRightBoxOffscreen is '3'
    13 PASS scrolledDownAndRightBoxOffscreen is '18'
     13PASS scrolledDownAndRightBoxOffscreen is '8'
     14PASS unscrolledBoxInitial is '0'
     15PASS scrolledDownBoxInitial is '5'
     16PASS scrolledRightBoxInitial is '2'
     17PASS scrolledDownAndRightBoxInitial is '7'
    1418PASS successfullyParsed is true
    1519
  • trunk/LayoutTests/fast/dom/elementFromPoint-relative-to-viewport.html

    r48398 r49490  
    4040    description('This test document.elementFromPoint is evaluated in with respect to the viewport, not the document.');
    4141
    42     function testElement(element, label, offsetX, offsetY) {
     42    function testElement(element, label, offsetX, offsetY, zoomOrNot) {
    4343        for (var i = 0; i < 25; ++i) {
    4444            var item = document.createElement("div");
     
    7272
    7373        // Test scrolling down
    74         window[scrolledDownBox] = getFromPoint(0, 50);
     74        window[scrolledDownBox] = getFromPoint(0, 20);
    7575
    7676        // Test scrolling right
     
    7878
    7979        // Test scrolling down and right
    80         window[scrolledDownAndRightBox] = getFromPoint(50, 50);
     80        window[scrolledDownAndRightBox] = getFromPoint(50, 20);
    8181
    8282        shouldBe(unscrolledBox, "'0'");
    83         shouldBe(scrolledDownBox, "'15'");
    84         shouldBe(scrolledRightBox, "'3'");
    85         shouldBe(scrolledDownAndRightBox, "'18'");
     83        shouldBe(scrolledDownBox, "'5'");
     84        if (zoomOrNot == "zoom") {
     85            shouldBe(scrolledRightBox, "'2'");
     86            shouldBe(scrolledDownAndRightBox, "'7'");
     87        } else {
     88            shouldBe(scrolledRightBox, "'3'");
     89            shouldBe(scrolledDownAndRightBox, "'8'");
     90        }
    8691    }
    8792
     
    8994    var elementOffscreen = document.getElementById('test-offscreen');
    9095    var offset = elementInitial.getBoundingClientRect();
    91     testElement(elementInitial, "Initial", offset.left, offset.top);
    92     testElement(elementOffscreen, "Offscreen", offset.left, offset.top + 1100);
     96    testElement(elementInitial, "Initial", offset.left, offset.top, "none");
     97    testElement(elementOffscreen, "Offscreen", offset.left, offset.top + 1100, "none");
     98   
     99    eventSender.zoomPageOut();
     100    testElement(elementInitial, "Initial", offset.left, offset.top, "zoom");
     101   
    93102   
    94103    if (window.layoutTestController) {
  • trunk/WebCore/ChangeLog

    r49488 r49490  
     12009-10-12  Xiaomei Ji  <xji@chromium.org>
     2
     3        Reviewed by Sam Weinig.
     4
     5        Fix issue caretRangeFromPoint() returns wrong result for a zoomed and
     6        scrolled page.
     7        https://bugs.webkit.org/show_bug.cgi?id=30034
     8
     9        * dom/Document.cpp:
     10        (WebCore::Document::elementFromPoint): calculate the correct point
     11        relative to document when the page is zoomed and scrolled.
     12        (WebCore::Document::caretRangeFromPoint): calculate the correct point
     13        relative to document when the page is zoomed and scrolled.
     14
    1152009-10-12  Fumitoshi Ukai  <ukai@chromium.org>
    216
  • trunk/WebCore/dom/Document.cpp

    r49428 r49490  
    944944
    945945    float zoomFactor = frame->pageZoomFactor();
    946     IntPoint point = roundedIntPoint(FloatPoint(x * zoomFactor, y * zoomFactor)) + view()->scrollOffset();
     946    IntPoint point = roundedIntPoint(FloatPoint((x + view()->scrollX()) * zoomFactor, (y + view()->scrollY()) * zoomFactor));
    947947
    948948    if (!frameView->visibleContentRect().contains(point))
     
    974974
    975975    float zoomFactor = frame->pageZoomFactor();
    976     IntPoint point = roundedIntPoint(FloatPoint(x * zoomFactor, y * zoomFactor)) + view()->scrollOffset();
     976    IntPoint point = roundedIntPoint(FloatPoint((x + view()->scrollX()) * zoomFactor, (y + view()->scrollY()) * zoomFactor));
    977977
    978978    if (!frameView->visibleContentRect().contains(point))
Note: See TracChangeset for help on using the changeset viewer.