Changeset 82584 in webkit


Ignore:
Timestamp:
Mar 31, 2011 9:01:13 AM (13 years ago)
Author:
Dimitri Glazkov
Message:

2011-03-31 Dimitri Glazkov <Dimitri Glazkov>

Reviewed by Darin Adler.

Move coordinate-computing logic into MouseRelatedEvent.
https://bugs.webkit.org/show_bug.cgi?id=57521

Refactoring, covered by existing tests.

  • dom/EventDispatcher.cpp: (WebCore::EventDispatcher::dispatchWheelEvent): Yank calculation of

coordinates out.

(WebCore::EventDispatcher::dispatchMouseEvent): Ditto.

  • dom/MouseEvent.cpp: (WebCore::MouseEvent::create): Add coordinate-computing logic.
  • dom/MouseEvent.h: Adjust decl to reflect new meaning of params.
  • dom/MouseRelatedEvent.cpp: (WebCore::MouseRelatedEvent::MouseRelatedEvent): Ditto.
  • page/EventHandler.cpp: (WebCore::EventHandler::dispatchDragEvent): Ditto.
Location:
trunk/Source/WebCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r82583 r82584  
     12011-03-31  Dimitri Glazkov  <dglazkov@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        Move coordinate-computing logic into MouseRelatedEvent.
     6        https://bugs.webkit.org/show_bug.cgi?id=57521
     7
     8        Refactoring, covered by existing tests.
     9
     10        * dom/EventDispatcher.cpp:
     11        (WebCore::EventDispatcher::dispatchWheelEvent): Yank calculation of
     12            coordinates out.
     13        (WebCore::EventDispatcher::dispatchMouseEvent): Ditto.
     14        * dom/MouseEvent.cpp:
     15        (WebCore::MouseEvent::create): Add coordinate-computing logic.
     16        * dom/MouseEvent.h: Adjust decl to reflect new meaning of params.
     17        * dom/MouseRelatedEvent.cpp:
     18        (WebCore::MouseRelatedEvent::MouseRelatedEvent): Ditto.
     19        * page/EventHandler.cpp:
     20        (WebCore::EventHandler::dispatchDragEvent): Ditto.
     21
    1222011-03-30  Alexander Pavlov  <apavlov@chromium.org>
    223
  • trunk/Source/WebCore/dom/EventDispatcher.cpp

    r82501 r82584  
    138138    EventDispatcher dispatcher(node);
    139139
    140     if (!dispatcher.m_view)
    141         return;
    142 
    143     IntPoint position = dispatcher.m_view->windowToContents(event.pos());
    144 
    145     int adjustedPageX = position.x();
    146     int adjustedPageY = position.y();
    147     if (Frame* frame = node->document()->frame()) {
    148         float pageZoom = frame->pageZoomFactor();
    149         if (pageZoom != 1.0f) {
    150             adjustedPageX = lroundf(position.x() / pageZoom);
    151             adjustedPageY = lroundf(position.y() / pageZoom);
    152         }
    153     }
    154 
    155140    RefPtr<WheelEvent> wheelEvent = WheelEvent::create(event.wheelTicksX(), event.wheelTicksY(), event.deltaX(), event.deltaY(), granularity(event),
    156         node->document()->defaultView(), event.globalX(), event.globalY(), adjustedPageX, adjustedPageY,
     141        node->document()->defaultView(), event.globalX(), event.globalY(), event.x(), event.y(),
    157142        event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey());
    158 
    159     wheelEvent->setAbsoluteLocation(position);
    160143
    161144    if (!dispatcher.dispatchEvent(wheelEvent) || wheelEvent->defaultHandled())
     
    327310    RefPtr<Node> relatedTarget = pullOutOfShadow(relatedTargetArg);
    328311
    329     IntPoint contentsPosition;
    330     if (FrameView* view = node->document()->view())
    331         contentsPosition = view->windowToContents(event.pos());
    332 
    333     IntPoint adjustedPagePosition = contentsPosition;
    334     if (Frame* frame = node->document()->frame()) {
    335         float pageZoom = frame->pageZoomFactor();
    336         if (pageZoom != 1.0f) {
    337             // Adjust our pageX and pageY to account for the page zoom.
    338             adjustedPagePosition.setX(lroundf(contentsPosition.x() / pageZoom));
    339             adjustedPagePosition.setY(lroundf(contentsPosition.y() / pageZoom));
    340         }
    341     }
    342 
    343     RefPtr<MouseEvent> mouseEvent = MouseEvent::create(eventType, node->document()->defaultView(), event, adjustedPagePosition, detail, relatedTarget);
    344     mouseEvent->setAbsoluteLocation(contentsPosition);
     312    RefPtr<MouseEvent> mouseEvent = MouseEvent::create(eventType, node->document()->defaultView(), event, detail, relatedTarget);
    345313
    346314    bool swallowEvent = false;
     
    356324    // as a separate event in other DOM-compliant browsers like Firefox, and so we do the same.
    357325    if (eventType == eventNames().clickEvent && detail == 2) {
    358         RefPtr<Event> doubleClickEvent = MouseEvent::create(eventNames().dblclickEvent, node->document()->defaultView(), event, adjustedPagePosition, detail, relatedTarget);
     326        RefPtr<Event> doubleClickEvent = MouseEvent::create(eventNames().dblclickEvent, node->document()->defaultView(), event, detail, relatedTarget);
    359327        if (defaultHandled)
    360328            doubleClickEvent->setDefaultHandled();
  • trunk/Source/WebCore/dom/MouseEvent.cpp

    r82501 r82584  
    3131namespace WebCore {
    3232
    33 PassRefPtr<MouseEvent> MouseEvent::create(const AtomicString& eventType, PassRefPtr<AbstractView> view, const PlatformMouseEvent& event, const IntPoint& position, int detail, PassRefPtr<Node> relatedTarget)
     33PassRefPtr<MouseEvent> MouseEvent::create(const AtomicString& eventType, PassRefPtr<AbstractView> view, const PlatformMouseEvent& event, int detail, PassRefPtr<Node> relatedTarget)
    3434{
    3535    bool isCancelable = eventType != eventNames().mousemoveEvent;
    3636
    3737    return MouseEvent::create(eventType, true, isCancelable, view,
    38         detail, event.globalX(), event.globalY(), position.x(), position.y(),
     38        detail, event.globalX(), event.globalY(), event.x(), event.y(),
    3939        event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), event.button(),
    4040        relatedTarget, 0, false);
  • trunk/Source/WebCore/dom/MouseEvent.h

    r82501 r82584  
    4747                ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, clipboard, isSimulated));
    4848        }
    49         static PassRefPtr<MouseEvent> create(const AtomicString& eventType, PassRefPtr<AbstractView>, const PlatformMouseEvent&, const IntPoint&, int detail, PassRefPtr<Node> relatedTarget);
     49        static PassRefPtr<MouseEvent> create(const AtomicString& eventType, PassRefPtr<AbstractView>, const PlatformMouseEvent&, int detail, PassRefPtr<Node> relatedTarget);
    5050
    5151        virtual ~MouseEvent();
  • trunk/Source/WebCore/dom/MouseRelatedEvent.cpp

    r82225 r82584  
    7575}
    7676
    77 MouseRelatedEvent::MouseRelatedEvent(const AtomicString& eventType, bool canBubble, bool cancelable, PassRefPtr<AbstractView> viewArg,
    78                                      int detail, int screenX, int screenY, int pageX, int pageY,
     77MouseRelatedEvent::MouseRelatedEvent(const AtomicString& eventType, bool canBubble, bool cancelable, PassRefPtr<AbstractView> abstractView,
     78                                     int detail, int screenX, int screenY, int windowX, int windowY,
    7979                                     bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool isSimulated)
    80     : UIEventWithKeyState(eventType, canBubble, cancelable, viewArg, detail, ctrlKey, altKey, shiftKey, metaKey)
     80    : UIEventWithKeyState(eventType, canBubble, cancelable, abstractView, detail, ctrlKey, altKey, shiftKey, metaKey)
    8181    , m_screenX(screenX)
    8282    , m_screenY(screenY)
    83     , m_clientX(pageX - contentsX(view()))
    84     , m_clientY(pageY - contentsY(view()))
    85     , m_pageX(pageX)
    86     , m_pageY(pageY)
     83    , m_clientX(0)
     84    , m_clientY(0)
     85    , m_pageX(0)
     86    , m_pageY(0)
    8787    , m_isSimulated(isSimulated)
    8888{
     89    IntPoint adjustedPageLocation;
     90    IntPoint scrollPosition;
     91
     92    Frame* frame = view() ? view()->frame() : 0;
     93    if (frame && !isSimulated) {
     94        if (FrameView* frameView = frame->view()) {
     95            scrollPosition = frameView->scrollPosition();
     96            adjustedPageLocation = frameView->windowToContents(IntPoint(windowX, windowY));
     97            float pageZoom = frame->pageZoomFactor();
     98            if (pageZoom != 1.0f) {
     99                // Adjust our pageX and pageY to account for the page zoom.
     100                adjustedPageLocation.setX(lroundf(adjustedPageLocation.x() / pageZoom));
     101                adjustedPageLocation.setY(lroundf(adjustedPageLocation.y() / pageZoom));
     102                scrollPosition.setX(scrollPosition.x() / pageZoom);
     103                scrollPosition.setY(scrollPosition.y() / pageZoom);
     104            }
     105        }
     106    }
     107
     108    IntPoint clientLocation(adjustedPageLocation - scrollPosition);
     109    m_clientX = clientLocation.x();
     110    m_clientY = clientLocation.y();
     111    m_pageX = adjustedPageLocation.x();
     112    m_pageY = adjustedPageLocation.y();
     113
    89114    initCoordinates();
    90115}
  • trunk/Source/WebCore/page/EventHandler.cpp

    r82487 r82584  
    16891689
    16901690    view->resetDeferredRepaintDelay();
    1691     IntPoint contentsPos = view->windowToContents(event.pos());
    1692 
    16931691    RefPtr<MouseEvent> me = MouseEvent::create(eventType,
    16941692        true, true, m_frame->document()->defaultView(),
    1695         0, event.globalX(), event.globalY(), contentsPos.x(), contentsPos.y(),
     1693        0, event.globalX(), event.globalY(), event.x(), event.y(),
    16961694        event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(),
    16971695        0, 0, clipboard);
Note: See TracChangeset for help on using the changeset viewer.