| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserv
ed. |
| 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 3 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) | 4 * Copyright (C) 2012 Digia Plc. and/or its subsidiary(-ies) |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "sky/engine/core/editing/htmlediting.h" | 41 #include "sky/engine/core/editing/htmlediting.h" |
| 42 #include "sky/engine/core/events/DOMWindowEventQueue.h" | 42 #include "sky/engine/core/events/DOMWindowEventQueue.h" |
| 43 #include "sky/engine/core/events/EventPath.h" | 43 #include "sky/engine/core/events/EventPath.h" |
| 44 #include "sky/engine/core/events/KeyboardEvent.h" | 44 #include "sky/engine/core/events/KeyboardEvent.h" |
| 45 #include "sky/engine/core/events/TextEvent.h" | 45 #include "sky/engine/core/events/TextEvent.h" |
| 46 #include "sky/engine/core/fetch/ImageResource.h" | 46 #include "sky/engine/core/fetch/ImageResource.h" |
| 47 #include "sky/engine/core/frame/FrameView.h" | 47 #include "sky/engine/core/frame/FrameView.h" |
| 48 #include "sky/engine/core/frame/LocalFrame.h" | 48 #include "sky/engine/core/frame/LocalFrame.h" |
| 49 #include "sky/engine/core/frame/Settings.h" | 49 #include "sky/engine/core/frame/Settings.h" |
| 50 #include "sky/engine/core/loader/FrameLoaderClient.h" | 50 #include "sky/engine/core/loader/FrameLoaderClient.h" |
| 51 #include "sky/engine/core/page/AutoscrollController.h" | |
| 52 #include "sky/engine/core/page/ChromeClient.h" | 51 #include "sky/engine/core/page/ChromeClient.h" |
| 53 #include "sky/engine/core/page/EditorClient.h" | 52 #include "sky/engine/core/page/EditorClient.h" |
| 54 #include "sky/engine/core/page/FocusController.h" | 53 #include "sky/engine/core/page/FocusController.h" |
| 55 #include "sky/engine/core/page/Page.h" | 54 #include "sky/engine/core/page/Page.h" |
| 56 #include "sky/engine/core/rendering/HitTestRequest.h" | 55 #include "sky/engine/core/rendering/HitTestRequest.h" |
| 57 #include "sky/engine/core/rendering/HitTestResult.h" | 56 #include "sky/engine/core/rendering/HitTestResult.h" |
| 58 #include "sky/engine/core/rendering/RenderLayer.h" | 57 #include "sky/engine/core/rendering/RenderLayer.h" |
| 59 #include "sky/engine/core/rendering/RenderView.h" | 58 #include "sky/engine/core/rendering/RenderView.h" |
| 60 #include "sky/engine/core/rendering/style/RenderStyle.h" | 59 #include "sky/engine/core/rendering/style/RenderStyle.h" |
| 61 #include "sky/engine/platform/TraceEvent.h" | 60 #include "sky/engine/platform/TraceEvent.h" |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 end.moveToOffset(markers[0]->endOffset()); | 190 end.moveToOffset(markers[0]->endOffset()); |
| 192 newSelection = VisibleSelection(start, end); | 191 newSelection = VisibleSelection(start, end); |
| 193 } | 192 } |
| 194 } | 193 } |
| 195 | 194 |
| 196 if (appendTrailingWhitespace == ShouldAppendTrailingWhitespace && newSel
ection.isRange()) | 195 if (appendTrailingWhitespace == ShouldAppendTrailingWhitespace && newSel
ection.isRange()) |
| 197 newSelection.appendTrailingWhitespace(); | 196 newSelection.appendTrailingWhitespace(); |
| 198 } | 197 } |
| 199 } | 198 } |
| 200 | 199 |
| 201 AutoscrollController* EventHandler::autoscrollController() const | |
| 202 { | |
| 203 if (Page* page = m_frame->page()) | |
| 204 return &page->autoscrollController(); | |
| 205 return 0; | |
| 206 } | |
| 207 | |
| 208 HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTe
stRequest::HitTestRequestType hitType, const LayoutSize& padding) | 200 HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, HitTe
stRequest::HitTestRequestType hitType, const LayoutSize& padding) |
| 209 { | 201 { |
| 210 TRACE_EVENT0("blink", "EventHandler::hitTestResultAtPoint"); | 202 TRACE_EVENT0("blink", "EventHandler::hitTestResultAtPoint"); |
| 211 | 203 |
| 212 HitTestResult result(point, padding.height(), padding.width(), padding.heigh
t(), padding.width()); | 204 HitTestResult result(point, padding.height(), padding.width(), padding.heigh
t(), padding.width()); |
| 213 | 205 |
| 214 // RenderView::hitTest causes a layout, and we don't want to hit that until
the first | 206 // RenderView::hitTest causes a layout, and we don't want to hit that until
the first |
| 215 // layout because until then, there is nothing shown on the screen - the use
r can't | 207 // layout because until then, there is nothing shown on the screen - the use
r can't |
| 216 // have intentionally clicked on something belonging to this page. Furthermo
re, | 208 // have intentionally clicked on something belonging to this page. Furthermo
re, |
| 217 // mousemove events before the first layout should not lead to a premature l
ayout() | 209 // mousemove events before the first layout should not lead to a premature l
ayout() |
| 218 // happening, which could show a flash of white. | 210 // happening, which could show a flash of white. |
| 219 // See also the similar code in Document::prepareMouseEvent. | 211 // See also the similar code in Document::prepareMouseEvent. |
| 220 if (!m_frame->contentRenderer() || !m_frame->view() || !m_frame->view()->did
FirstLayout()) | 212 if (!m_frame->contentRenderer() || !m_frame->view() || !m_frame->view()->did
FirstLayout()) |
| 221 return result; | 213 return result; |
| 222 | 214 |
| 223 // hitTestResultAtPoint is specifically used to hitTest into all frames, thu
s it always allows child frame content. | 215 // hitTestResultAtPoint is specifically used to hitTest into all frames, thu
s it always allows child frame content. |
| 224 HitTestRequest request(hitType); | 216 HitTestRequest request(hitType); |
| 225 m_frame->contentRenderer()->hitTest(request, result); | 217 m_frame->contentRenderer()->hitTest(request, result); |
| 226 | 218 |
| 227 return result; | 219 return result; |
| 228 } | 220 } |
| 229 | 221 |
| 230 void EventHandler::stopAutoscroll() | |
| 231 { | |
| 232 if (AutoscrollController* controller = autoscrollController()) | |
| 233 controller->stopAutoscroll(); | |
| 234 } | |
| 235 | |
| 236 bool EventHandler::scroll(ScrollDirection direction, ScrollGranularity granulari
ty, Node* startNode, Node** stopNode, float delta, IntPoint absolutePoint) | |
| 237 { | |
| 238 if (!delta) | |
| 239 return false; | |
| 240 | |
| 241 Node* node = startNode; | |
| 242 | |
| 243 if (!node) | |
| 244 node = m_frame->document()->focusedElement(); | |
| 245 | |
| 246 if (!node || !node->renderer()) | |
| 247 return false; | |
| 248 | |
| 249 RenderBox* curBox = node->renderer()->enclosingBox(); | |
| 250 while (curBox && !curBox->isRenderView()) { | |
| 251 // If we're at the stopNode, we should try to scroll it but we shouldn't
bubble past it | |
| 252 bool shouldStopBubbling = stopNode && *stopNode && curBox->node() == *st
opNode; | |
| 253 bool didScroll = curBox->scroll(direction, granularity, delta); | |
| 254 | |
| 255 if (didScroll && stopNode) | |
| 256 *stopNode = curBox->node(); | |
| 257 | |
| 258 if (didScroll || shouldStopBubbling) { | |
| 259 return true; | |
| 260 } | |
| 261 | |
| 262 curBox = curBox->containingBlock(); | |
| 263 } | |
| 264 | |
| 265 return false; | |
| 266 } | |
| 267 | |
| 268 bool EventHandler::bubblingScroll(ScrollDirection direction, ScrollGranularity g
ranularity, Node* startingNode) | |
| 269 { | |
| 270 // The layout needs to be up to date to determine if we can scroll. We may b
e | |
| 271 // here because of an onLoad event, in which case the final layout hasn't be
en performed yet. | |
| 272 m_frame->document()->updateLayout(); | |
| 273 if (scroll(direction, granularity, startingNode)) | |
| 274 return true; | |
| 275 return false; | |
| 276 } | |
| 277 | |
| 278 bool EventHandler::useHandCursor(Node* node, bool isOverLink) | 222 bool EventHandler::useHandCursor(Node* node, bool isOverLink) |
| 279 { | 223 { |
| 280 if (!node) | 224 if (!node) |
| 281 return false; | 225 return false; |
| 282 | 226 |
| 283 return isOverLink && !node->hasEditableStyle(); | 227 return isOverLink && !node->hasEditableStyle(); |
| 284 } | 228 } |
| 285 | 229 |
| 286 void EventHandler::cursorUpdateTimerFired(Timer<EventHandler>*) | 230 void EventHandler::cursorUpdateTimerFired(Timer<EventHandler>*) |
| 287 { | 231 { |
| (...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 // and exclude any prohibited actions. | 521 // and exclude any prohibited actions. |
| 578 TouchAction effectiveTouchAction = TouchActionAuto; | 522 TouchAction effectiveTouchAction = TouchActionAuto; |
| 579 for (const Node* curNode = &node; curNode; curNode = NodeRenderingTraversal:
:parent(curNode)) { | 523 for (const Node* curNode = &node; curNode; curNode = NodeRenderingTraversal:
:parent(curNode)) { |
| 580 if (RenderObject* renderer = curNode->renderer()) { | 524 if (RenderObject* renderer = curNode->renderer()) { |
| 581 if (renderer->supportsTouchAction()) { | 525 if (renderer->supportsTouchAction()) { |
| 582 TouchAction action = renderer->style()->touchAction(); | 526 TouchAction action = renderer->style()->touchAction(); |
| 583 effectiveTouchAction = intersectTouchAction(action, effectiveTou
chAction); | 527 effectiveTouchAction = intersectTouchAction(action, effectiveTou
chAction); |
| 584 if (effectiveTouchAction == TouchActionNone) | 528 if (effectiveTouchAction == TouchActionNone) |
| 585 break; | 529 break; |
| 586 } | 530 } |
| 587 | |
| 588 // If we've reached an ancestor that supports a touch action, search
no further. | |
| 589 if (renderer->isBox() && toRenderBox(renderer)->scrollsOverflow()) | |
| 590 break; | |
| 591 } | 531 } |
| 592 } | 532 } |
| 593 return effectiveTouchAction; | 533 return effectiveTouchAction; |
| 594 } | 534 } |
| 595 | 535 |
| 596 void EventHandler::focusDocumentView() | 536 void EventHandler::focusDocumentView() |
| 597 { | 537 { |
| 598 Page* page = m_frame->page(); | 538 Page* page = m_frame->page(); |
| 599 if (!page) | 539 if (!page) |
| 600 return; | 540 return; |
| 601 page->focusController().focusDocumentView(m_frame); | 541 page->focusController().focusDocumentView(m_frame); |
| 602 } | 542 } |
| 603 | 543 |
| 604 } // namespace blink | 544 } // namespace blink |
| OLD | NEW |