Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(458)

Unified Diff: sky/engine/core/page/EventHandler.cpp

Issue 646273006: Get rid of ScrollView. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: merge to ToT Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sky/engine/core/page/EventHandler.cpp
diff --git a/sky/engine/core/page/EventHandler.cpp b/sky/engine/core/page/EventHandler.cpp
index 4710a6f7c875cf598f2ed7aa4667638738ae200c..cd3f8c79704e9debb2d52aed1acd96b08384c28e 100644
--- a/sky/engine/core/page/EventHandler.cpp
+++ b/sky/engine/core/page/EventHandler.cpp
@@ -443,12 +443,10 @@ bool EventHandler::handleMousePressEventSingleClick(const MouseEventWithHitTestR
// Don't restart the selection when the mouse is pressed on an
// existing selection so we can allow for text dragging.
- if (FrameView* view = m_frame->view()) {
- LayoutPoint vPoint = view->windowToContents(event.event().position());
- if (!extendSelection && m_frame->selection().contains(vPoint)) {
- m_mouseDownWasSingleClickInSelection = true;
- return false;
- }
+ LayoutPoint vPoint = event.event().position();
+ if (!extendSelection && m_frame->selection().contains(vPoint)) {
+ m_mouseDownWasSingleClickInSelection = true;
+ return false;
}
VisiblePosition visiblePos(innerNode->renderer()->positionForPoint(event.localPoint()));
@@ -516,11 +514,6 @@ bool EventHandler::handleMousePressEvent(const MouseEventWithHitTestResults& eve
m_frame->document()->updateLayoutIgnorePendingStylesheets();
- if (ScrollView* scrollView = m_frame->view()) {
- if (scrollView->isPointInScrollbarCorner(event.event().position()))
- return false;
- }
-
bool singleClick = event.event().clickCount() <= 1;
// If we got the event back, that must mean it wasn't prevented,
@@ -615,7 +608,7 @@ void EventHandler::updateSelectionForMouseDrag()
return;
HitTestRequest request(HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::Move);
- HitTestResult result(view->windowToContents(m_lastKnownMousePosition));
+ HitTestResult result(m_lastKnownMousePosition);
renderer->hitTest(request, result);
updateSelectionForMouseDrag(result);
}
@@ -810,10 +803,6 @@ bool EventHandler::bubblingScroll(ScrollDirection direction, ScrollGranularity g
m_frame->document()->updateLayoutIgnorePendingStylesheets();
if (scroll(direction, granularity, startingNode))
return true;
- LocalFrame* frame = m_frame;
- FrameView* view = frame->view();
- if (view && view->scroll(direction, granularity))
- return true;
return false;
}
@@ -854,7 +843,7 @@ void EventHandler::updateCursor()
m_frame->document()->updateLayout();
HitTestRequest request(HitTestRequest::ReadOnly);
- HitTestResult result(view->windowToContents(m_lastKnownMousePosition));
+ HitTestResult result(m_lastKnownMousePosition);
renderView->hitTest(request, result);
OptionalCursor optionalCursor = selectCursor(result);
@@ -1032,10 +1021,8 @@ OptionalCursor EventHandler::selectAutoCursor(const HitTestResult& result, Node*
static LayoutPoint documentPointForWindowPoint(LocalFrame* frame, const IntPoint& windowPoint)
{
- FrameView* view = frame->view();
- // FIXME: Is it really OK to use the wrong coordinates here when view is 0?
- // Historically the code would just crash; this is clearly no worse than that.
- return view ? view->windowToContents(windowPoint) : windowPoint;
+ // FIXME(sky): remove
+ return windowPoint;
}
bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent)
@@ -1057,9 +1044,10 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent)
m_mouseDownMayStartDrag = false;
m_mouseDownMayStartSelect = false;
m_mouseDownMayStartAutoscroll = false;
- if (FrameView* view = m_frame->view())
- m_mouseDownPos = view->windowToContents(mouseEvent.position());
+ if (m_frame->view())
+ m_mouseDownPos = mouseEvent.position();
else {
+ // FIXME(sky): Why do we have this else block at all?
invalidateClick();
return false;
}
@@ -1083,16 +1071,14 @@ bool EventHandler::handleMousePressEvent(const PlatformMouseEvent& mouseEvent)
m_clickCount = mouseEvent.clickCount();
m_clickNode = mev.targetNode()->isTextNode() ? NodeRenderingTraversal::parent(mev.targetNode()) : mev.targetNode();
- if (FrameView* view = m_frame->view()) {
- RenderLayer* layer = mev.targetNode()->renderer() ? mev.targetNode()->renderer()->enclosingLayer() : 0;
- IntPoint p = view->windowToContents(mouseEvent.position());
- if (layer && layer->scrollableArea() && layer->scrollableArea()->isPointInResizeControl(p, ResizerForPointer)) {
- m_resizeScrollableArea = layer->scrollableArea();
- m_resizeScrollableArea->setInResizeMode(true);
- m_offsetFromResizeCorner = m_resizeScrollableArea->offsetFromResizeCorner(p);
- invalidateClick();
- return true;
- }
+ RenderLayer* layer = mev.targetNode()->renderer() ? mev.targetNode()->renderer()->enclosingLayer() : 0;
+ IntPoint p = mouseEvent.position();
+ if (layer && layer->scrollableArea() && layer->scrollableArea()->isPointInResizeControl(p, ResizerForPointer)) {
+ m_resizeScrollableArea = layer->scrollableArea();
+ m_resizeScrollableArea->setInResizeMode(true);
+ m_offsetFromResizeCorner = m_resizeScrollableArea->offsetFromResizeCorner(p);
+ invalidateClick();
+ return true;
}
m_frame->selection().setCaretBlinkingSuspended(true);
@@ -1169,9 +1155,6 @@ bool EventHandler::handleMouseMoveEvent(const PlatformMouseEvent& event)
layerScrollableArea->mouseMovedInContentArea();
}
- if (FrameView* frameView = m_frame->view())
- frameView->mouseMovedInContentArea();
-
page->chrome().mouseDidMoveOverElement(hoveredNode, event.modifierFlags());
page->chrome().setToolTip(hoveredNode);
@@ -1233,12 +1216,7 @@ bool EventHandler::handleMouseMoveOrLeaveEvent(const PlatformMouseEvent& mouseEv
if (m_resizeScrollableArea && m_resizeScrollableArea->inResizeMode())
m_resizeScrollableArea->resize(mouseEvent, m_offsetFromResizeCorner);
else {
- if (FrameView* view = m_frame->view())
- scrollbar = view->scrollbarAtPoint(mouseEvent.position());
-
- if (!scrollbar)
- scrollbar = mev.scrollbar();
-
+ scrollbar = mev.scrollbar();
updateLastScrollbarUnderMouse(scrollbar, !m_mousePressed);
if (onlyUpdateScrollbars)
return true;
@@ -1402,25 +1380,13 @@ void EventHandler::updateMouseEventTargetNode(Node* targetNode, const PlatformMo
RenderLayer* layerForNodeUnderMouse = layerForNode(m_nodeUnderMouse.get());
Page* page = m_frame->page();
- if (m_lastNodeUnderMouse && (!m_nodeUnderMouse || m_nodeUnderMouse->document() != m_frame->document())) {
- // The mouse has moved between frames.
- if (LocalFrame* frame = m_lastNodeUnderMouse->document().frame()) {
- if (FrameView* frameView = frame->view())
- frameView->mouseExitedContentArea();
- }
- } else if (page && (layerForLastNode && (!layerForNodeUnderMouse || layerForNodeUnderMouse != layerForLastNode))) {
+ if (page && (layerForLastNode && (!layerForNodeUnderMouse || layerForNodeUnderMouse != layerForLastNode))) {
// The mouse has moved between layers.
if (ScrollableArea* scrollableAreaForLastNode = associatedScrollableArea(layerForLastNode))
scrollableAreaForLastNode->mouseExitedContentArea();
}
- if (m_nodeUnderMouse && (!m_lastNodeUnderMouse || m_lastNodeUnderMouse->document() != m_frame->document())) {
- // The mouse has moved between frames.
- if (LocalFrame* frame = m_nodeUnderMouse->document().frame()) {
- if (FrameView* frameView = frame->view())
- frameView->mouseEnteredContentArea();
- }
- } else if (page && (layerForNodeUnderMouse && (!layerForLastNode || layerForNodeUnderMouse != layerForLastNode))) {
+ if (page && (layerForNodeUnderMouse && (!layerForLastNode || layerForNodeUnderMouse != layerForLastNode))) {
// The mouse has moved between layers.
if (ScrollableArea* scrollableAreaForNodeUnderMouse = associatedScrollableArea(layerForNodeUnderMouse))
scrollableAreaForNodeUnderMouse->mouseEnteredContentArea();
@@ -1453,12 +1419,6 @@ bool EventHandler::dispatchMouseEvent(const AtomicString& eventType, Node* targe
// The return value means 'swallow event' (was handled), as for other handle* functions.
bool EventHandler::handleMouseFocus(const PlatformMouseEvent& mouseEvent)
{
- // If clicking on a frame scrollbar, do not mess up with content focus.
- if (FrameView* view = m_frame->view()) {
- if (view->scrollbarAtPoint(mouseEvent.position()))
- return false;
- }
-
// The layout needs to be up to date to determine if an element is focusable.
m_frame->document()->updateLayoutIgnorePendingStylesheets();
@@ -1540,7 +1500,7 @@ bool EventHandler::handleWheelEvent(const PlatformWheelEvent& event)
if (!view)
return false;
- LayoutPoint vPoint = view->windowToContents(event.position());
+ LayoutPoint vPoint = event.position();
HitTestRequest request(HitTestRequest::ReadOnly);
HitTestResult result(vPoint);
@@ -1624,8 +1584,6 @@ bool EventHandler::handleGestureShowPress()
FrameView* view = m_frame->view();
if (!view)
return false;
- if (ScrollAnimator* scrollAnimator = view->existingScrollAnimator())
- scrollAnimator->cancelAnimations();
const FrameView::ScrollableAreaSet* areas = view->scrollableAreas();
if (!areas)
return false;
@@ -1720,8 +1678,7 @@ bool EventHandler::handleGestureScrollEvent(const PlatformGestureEvent& gestureE
if (!document->renderView())
return false;
- FrameView* view = m_frame->view();
- LayoutPoint viewPoint = view->windowToContents(gestureEvent.position());
+ LayoutPoint viewPoint = gestureEvent.position();
HitTestRequest request(HitTestRequest::ReadOnly);
HitTestResult result(viewPoint);
document->renderView()->hitTest(request, result);
@@ -1733,8 +1690,6 @@ bool EventHandler::handleGestureScrollEvent(const PlatformGestureEvent& gestureE
m_previousGestureScrolledNode = nullptr;
if (!scrollbar)
- scrollbar = view->scrollbarAtPoint(gestureEvent.position());
- if (!scrollbar)
scrollbar = result.scrollbar();
}
@@ -1798,7 +1753,7 @@ bool EventHandler::handleGestureTap(const GestureEventWithHitTestResults& target
// We use the adjusted position so the application isn't surprised to see a event with
// co-ordinates outside the target's bounds.
- IntPoint adjustedPoint = m_frame->view()->windowToContents(gestureEvent.position());
+ IntPoint adjustedPoint = gestureEvent.position();
PlatformMouseEvent fakeMouseMove(adjustedPoint, gestureEvent.globalPosition(),
NoButton, PlatformEvent::MouseMoved, /* clickCount */ 0,
@@ -1862,7 +1817,7 @@ bool EventHandler::handleGestureLongPress(const GestureEventWithHitTestResults&
bool shouldLongPressSelectWord = m_frame->settings() && m_frame->settings()->touchEditingEnabled();
#endif
if (shouldLongPressSelectWord) {
- IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.position());
+ IntPoint hitTestPoint = gestureEvent.position();
HitTestResult result = hitTestResultAtPoint(hitTestPoint);
Node* innerNode = result.targetNode();
if (!result.isLiveLink() && innerNode && (innerNode->isContentEditable() || innerNode->isTextNode())) {
@@ -1884,7 +1839,7 @@ bool EventHandler::handleGestureLongTap(const GestureEventWithHitTestResults& ta
bool EventHandler::handleScrollGestureOnResizer(Node* eventTarget, const PlatformGestureEvent& gestureEvent) {
if (gestureEvent.type() == PlatformEvent::GestureScrollBegin) {
RenderLayer* layer = eventTarget->renderer() ? eventTarget->renderer()->enclosingLayer() : 0;
- IntPoint p = m_frame->view()->windowToContents(gestureEvent.position());
+ IntPoint p = gestureEvent.position();
if (layer && layer->scrollableArea() && layer->scrollableArea()->isPointInResizeControl(p, ResizerForTouch)) {
m_resizeScrollableArea = layer->scrollableArea();
m_resizeScrollableArea->setInResizeMode(true);
@@ -2076,8 +2031,7 @@ bool EventHandler::bestClickableNodeForHitTestResult(const HitTestResult& result
bool EventHandler::bestZoomableAreaForTouchPoint(const IntPoint& touchCenter, const IntSize& touchRadius, IntRect& targetArea, Node*& targetNode)
{
- IntPoint hitTestPoint = m_frame->view()->windowToContents(touchCenter);
- HitTestResult result = hitTestResultAtPoint(hitTestPoint, HitTestRequest::ReadOnly | HitTestRequest::Active, touchRadius);
+ HitTestResult result = hitTestResultAtPoint(touchCenter, HitTestRequest::ReadOnly | HitTestRequest::Active, touchRadius);
IntRect touchRect(touchCenter - touchRadius, touchRadius + touchRadius);
WillBeHeapVector<RefPtrWillBeMember<Node>, 11> nodes;
@@ -2110,20 +2064,12 @@ GestureEventWithHitTestResults EventHandler::targetGestureEvent(const PlatformGe
// Perform the rect-based hit-test. Note that we don't yet apply hover/active state here
// because we need to resolve touch adjustment first so that we apply hover/active it to
// the final adjusted node.
- IntPoint hitTestPoint = m_frame->view()->windowToContents(gestureEvent.position());
+ IntPoint hitTestPoint = gestureEvent.position();
IntSize touchRadius = gestureEvent.area();
touchRadius.scale(1.f / 2);
// FIXME: We should not do a rect-based hit-test if touch adjustment is disabled.
HitTestResult hitTestResult = hitTestResultAtPoint(hitTestPoint, hitType | HitTestRequest::ReadOnly, touchRadius);
- // Hit-test the main frame scrollbars (in addition to the child-frame and RenderLayer
- // scroll bars checked by the hit-test code.
- if (!hitTestResult.scrollbar()) {
- if (FrameView* view = m_frame->view()) {
- hitTestResult.setScrollbar(view->scrollbarAtPoint(gestureEvent.position()));
- }
- }
-
// Adjust the location of the gesture to the most likely nearby node, as appropriate for the
// type of event.
PlatformGestureEvent adjustedEvent = gestureEvent;
@@ -2137,13 +2083,7 @@ GestureEventWithHitTestResults EventHandler::targetGestureEvent(const PlatformGe
LocalFrame* hitFrame = hitTestResult.innerNodeFrame();
if (!hitFrame)
hitFrame = m_frame;
- hitTestResult = hitTestResultInFrame(hitFrame, hitFrame->view()->windowToContents(adjustedEvent.position()), hitType | HitTestRequest::ReadOnly);
- // FIXME: HitTest entry points should really check for main frame scrollbars themselves.
- if (!hitTestResult.scrollbar()) {
- if (FrameView* view = m_frame->view()) {
- hitTestResult.setScrollbar(view->scrollbarAtPoint(gestureEvent.position()));
- }
- }
+ hitTestResult = hitTestResultInFrame(hitFrame, adjustedEvent.position(), hitType | HitTestRequest::ReadOnly);
}
// Now apply hover/active state to the final target.
@@ -2214,7 +2154,7 @@ void EventHandler::applyTouchAdjustment(PlatformGestureEvent* gestureEvent, HitT
// Update the hit-test result to be a point-based result instead of a rect-based result.
// FIXME: We should do this even when no candidate matches the node filter. crbug.com/398914
if (adjusted) {
- hitTestResult->resolveRectBasedTest(adjustedNode, m_frame->view()->windowToContents(adjustedPoint));
+ hitTestResult->resolveRectBasedTest(adjustedNode, adjustedPoint);
gestureEvent->applyTouchAdjustment(adjustedPoint);
}
}
@@ -2263,7 +2203,7 @@ void EventHandler::dispatchFakeMouseMoveEventSoonInQuad(const FloatQuad& quad)
if (!view)
return;
- if (!quad.containsPoint(view->windowToContents(m_lastKnownMousePosition)))
+ if (!quad.containsPoint(m_lastKnownMousePosition))
return;
dispatchFakeMouseMoveEventSoon();
@@ -2322,12 +2262,10 @@ void EventHandler::hoverTimerFired(Timer<EventHandler>*)
ASSERT(m_frame->document());
if (RenderView* renderer = m_frame->contentRenderer()) {
- if (FrameView* view = m_frame->view()) {
- HitTestRequest request(HitTestRequest::Move);
- HitTestResult result(view->windowToContents(m_lastKnownMousePosition));
- renderer->hitTest(request, result);
- m_frame->document()->updateHoverActiveState(request, result.innerElement());
- }
+ HitTestRequest request(HitTestRequest::Move);
+ HitTestResult result(m_lastKnownMousePosition);
+ renderer->hitTest(request, result);
+ m_frame->document()->updateHoverActiveState(request, result.innerElement());
}
}
@@ -2471,7 +2409,7 @@ bool EventHandler::dragHysteresisExceeded(const IntPoint& dragViewportLocation)
FrameView* view = m_frame->view();
if (!view)
return false;
- IntPoint dragLocation = view->windowToContents(dragViewportLocation);
+ IntPoint dragLocation = dragViewportLocation;
IntSize delta = dragLocation - m_mouseDownPos;
int threshold = 3;
@@ -2541,21 +2479,8 @@ void EventHandler::setFrameWasScrolledByUser()
bool EventHandler::passMousePressEventToScrollbar(MouseEventWithHitTestResults& mev)
{
- // First try to use the frame scrollbar.
- FrameView* view = m_frame->view();
- Scrollbar* scrollbar = view ? view->scrollbarAtPoint(mev.event().position()) : 0;
-
- // Then try the scrollbar in the hit test.
- if (!scrollbar)
- scrollbar = mev.scrollbar();
-
- updateLastScrollbarUnderMouse(scrollbar, true);
-
- if (!scrollbar || !scrollbar->enabled())
- return false;
- setFrameWasScrolledByUser();
- scrollbar->mouseDown(mev.event());
- return true;
+ // FIXME(sky): Remove
+ return false;
}
// If scrollbar (under mouse) is different from last, send a mouse exited. Set
@@ -2660,12 +2585,12 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
// to hit-test on touchstart, and it can be read-only.
if (point.state() == PlatformTouchPoint::TouchPressed) {
HitTestRequest::HitTestRequestType hitType = HitTestRequest::TouchEvent | HitTestRequest::ReadOnly | HitTestRequest::Active;
- LayoutPoint pagePoint = roundedLayoutPoint(m_frame->view()->windowToContents(point.pos()));
+ LayoutPoint pagePoint = roundedLayoutPoint(point.pos());
HitTestResult result;
if (!m_touchSequenceDocument) {
result = hitTestResultAtPoint(pagePoint, hitType);
} else if (m_touchSequenceDocument->frame()) {
- LayoutPoint framePoint = roundedLayoutPoint(m_touchSequenceDocument->frame()->view()->windowToContents(point.pos()));
+ LayoutPoint framePoint = roundedLayoutPoint(point.pos());
result = hitTestResultInFrame(m_touchSequenceDocument->frame(), framePoint, hitType);
} else
continue;
@@ -2783,9 +2708,7 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event)
}
ASSERT(targetFrame);
- // pagePoint should always be relative to the target elements
- // containing frame.
- FloatPoint pagePoint = targetFrame->view()->windowToContents(point.pos());
+ FloatPoint pagePoint = point.pos();
float scaleFactor = 1.0f / targetFrame->pageZoomFactor();

Powered by Google App Engine
This is Rietveld 408576698