Changeset 48334 in webkit


Ignore:
Timestamp:
Sep 12, 2009 12:11:55 PM (15 years ago)
Author:
weinig@apple.com
Message:

WebCore: Fix for https://bugs.webkit.org/show_bug.cgi?id=29219
Document.elementFromPoint() should take page scroll into consideration

Reviewed by Anders Carlsson.

Test: fast/dom/elementFromPoint-relative-to-viewport.html

  • dom/Document.cpp:

(WebCore::Document::elementFromPoint):
(WebCore::Document::caretRangeFromPoint):

LayoutTests: Test for https://bugs.webkit.org/show_bug.cgi?id=29219
Document.elementFromPoint() should take page scroll into consideration

Reviewed by Anders Carlsson.

  • fast/dom/elementFromPoint-relative-to-viewport-expected.txt: Added.
  • fast/dom/elementFromPoint-relative-to-viewport.html: Added.
  • fast/events/offsetX-offsetY.html: Change to use clientX/Y instead of pageX/Y.
  • fast/forms/slider-transformed.html: Ditto.
  • fast/forms/slider-zoomed.html: Ditto.
Location:
trunk
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r48333 r48334  
     12009-09-12  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        Test for https://bugs.webkit.org/show_bug.cgi?id=29219
     6        Document.elementFromPoint() should take page scroll into consideration
     7
     8        * fast/dom/elementFromPoint-relative-to-viewport-expected.txt: Added.
     9        * fast/dom/elementFromPoint-relative-to-viewport.html: Added.
     10        * fast/events/offsetX-offsetY.html: Change to use clientX/Y instead of pageX/Y.
     11        * fast/forms/slider-transformed.html: Ditto.
     12        * fast/forms/slider-zoomed.html: Ditto.
     13
    1142009-09-12  Sam Weinig  <sam@webkit.org>
    215
  • trunk/LayoutTests/fast/events/offsetX-offsetY.html

    r41189 r48334  
    5353      ev.expectedOffsetX = expectedOffsetX;
    5454      ev.expectedOffsetY = expectedOffsetY;
    55       var target = document.elementFromPoint(ev.pageX, ev.pageY);
     55      var target = document.elementFromPoint(ev.clientX, ev.clientY);
    5656      target.dispatchEvent(ev);
    5757    }
  • trunk/LayoutTests/fast/forms/slider-transformed.html

    r38193 r48334  
    2222      var ev = document.createEvent("MouseEvent");
    2323      ev.initMouseEvent(eventType, true, true, window, 1, 1, 1, clientX, clientY, false, false, false, false, 0, document);
    24       var target = document.elementFromPoint(ev.pageX, ev.pageY);
     24      var target = document.elementFromPoint(ev.clientX, ev.clientY);
    2525      target.dispatchEvent(ev);
    2626    }
  • trunk/LayoutTests/fast/forms/slider-zoomed.html

    r41914 r48334  
    2323      var ev = document.createEvent("MouseEvent");
    2424      ev.initMouseEvent(eventType, true, true, window, 1, 1, 1, clientX, clientY, false, false, false, false, 0, document);
    25       var target = document.elementFromPoint(ev.pageX, ev.pageY);
     25      var target = document.elementFromPoint(ev.clientX, ev.clientY);
    2626      target.dispatchEvent(ev);
    2727    }
  • trunk/WebCore/ChangeLog

    r48333 r48334  
     12009-09-12  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Anders Carlsson.
     4
     5        Fix for https://bugs.webkit.org/show_bug.cgi?id=29219
     6        Document.elementFromPoint() should take page scroll into consideration
     7
     8        Test: fast/dom/elementFromPoint-relative-to-viewport.html
     9
     10        * dom/Document.cpp:
     11        (WebCore::Document::elementFromPoint):
     12        (WebCore::Document::caretRangeFromPoint):
     13
    1142009-09-12  Sam Weinig  <sam@webkit.org>
    215
  • trunk/WebCore/dom/Document.cpp

    r48333 r48334  
    928928Element* Document::elementFromPoint(int x, int y) const
    929929{
     930    // FIXME: Share code between this and caretRangeFromPoint.
    930931    if (!renderer())
    931932        return 0;
    932 
    933     HitTestRequest request(HitTestRequest::ReadOnly |
    934                            HitTestRequest::Active);
    935 
    936     float zoomFactor = frame() ? frame()->pageZoomFactor() : 1.0f;
    937 
    938     HitTestResult result(roundedIntPoint(FloatPoint(x * zoomFactor, y * zoomFactor)));
    939     renderView()->layer()->hitTest(request, result);
     933    Frame* frame = this->frame();
     934    if (!frame)
     935        return 0;
     936    FrameView* frameView = frame->view();
     937    if (!frameView)
     938        return 0;
     939
     940    float zoomFactor = frame->pageZoomFactor();
     941    IntPoint point = roundedIntPoint(FloatPoint(x * zoomFactor, y * zoomFactor)) + view()->scrollOffset();
     942
     943    if (!frameView->boundsRect().contains(point))
     944        return 0;
     945
     946    HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active);
     947    HitTestResult result(point);
     948    renderView()->layer()->hitTest(request, result);
    940949
    941950    Node* n = result.innerNode();
     
    949958PassRefPtr<Range> Document::caretRangeFromPoint(int x, int y)
    950959{
     960    // FIXME: Share code between this and elementFromPoint.
    951961    if (!renderer())
    952962        return 0;
Note: See TracChangeset for help on using the changeset viewer.