Changeset 82584 in webkit
- Timestamp:
- Mar 31, 2011 9:01:13 AM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r82583 r82584 1 2011-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 1 22 2011-03-30 Alexander Pavlov <apavlov@chromium.org> 2 23 -
trunk/Source/WebCore/dom/EventDispatcher.cpp
r82501 r82584 138 138 EventDispatcher dispatcher(node); 139 139 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 155 140 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(), 157 142 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey()); 158 159 wheelEvent->setAbsoluteLocation(position);160 143 161 144 if (!dispatcher.dispatchEvent(wheelEvent) || wheelEvent->defaultHandled()) … … 327 310 RefPtr<Node> relatedTarget = pullOutOfShadow(relatedTargetArg); 328 311 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); 345 313 346 314 bool swallowEvent = false; … … 356 324 // as a separate event in other DOM-compliant browsers like Firefox, and so we do the same. 357 325 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); 359 327 if (defaultHandled) 360 328 doubleClickEvent->setDefaultHandled(); -
trunk/Source/WebCore/dom/MouseEvent.cpp
r82501 r82584 31 31 namespace WebCore { 32 32 33 PassRefPtr<MouseEvent> MouseEvent::create(const AtomicString& eventType, PassRefPtr<AbstractView> view, const PlatformMouseEvent& event, const IntPoint& position,int detail, PassRefPtr<Node> relatedTarget)33 PassRefPtr<MouseEvent> MouseEvent::create(const AtomicString& eventType, PassRefPtr<AbstractView> view, const PlatformMouseEvent& event, int detail, PassRefPtr<Node> relatedTarget) 34 34 { 35 35 bool isCancelable = eventType != eventNames().mousemoveEvent; 36 36 37 37 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(), 39 39 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), event.button(), 40 40 relatedTarget, 0, false); -
trunk/Source/WebCore/dom/MouseEvent.h
r82501 r82584 47 47 ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget, clipboard, isSimulated)); 48 48 } 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); 50 50 51 51 virtual ~MouseEvent(); -
trunk/Source/WebCore/dom/MouseRelatedEvent.cpp
r82225 r82584 75 75 } 76 76 77 MouseRelatedEvent::MouseRelatedEvent(const AtomicString& eventType, bool canBubble, bool cancelable, PassRefPtr<AbstractView> viewArg,78 int detail, int screenX, int screenY, int pageX, int pageY,77 MouseRelatedEvent::MouseRelatedEvent(const AtomicString& eventType, bool canBubble, bool cancelable, PassRefPtr<AbstractView> abstractView, 78 int detail, int screenX, int screenY, int windowX, int windowY, 79 79 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) 81 81 , m_screenX(screenX) 82 82 , 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) 87 87 , m_isSimulated(isSimulated) 88 88 { 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 89 114 initCoordinates(); 90 115 } -
trunk/Source/WebCore/page/EventHandler.cpp
r82487 r82584 1689 1689 1690 1690 view->resetDeferredRepaintDelay(); 1691 IntPoint contentsPos = view->windowToContents(event.pos());1692 1693 1691 RefPtr<MouseEvent> me = MouseEvent::create(eventType, 1694 1692 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(), 1696 1694 event.ctrlKey(), event.altKey(), event.shiftKey(), event.metaKey(), 1697 1695 0, 0, clipboard);
Note: See TracChangeset
for help on using the changeset viewer.