| 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 void AutoscrollController::stopAutoscrollTimer() | 83 void AutoscrollController::stopAutoscrollTimer() |
| 84 { | 84 { |
| 85 RenderBox* scrollable = m_autoscrollRenderer; | 85 RenderBox* scrollable = m_autoscrollRenderer; |
| 86 m_autoscrollTimer.stop(); | 86 m_autoscrollTimer.stop(); |
| 87 m_autoscrollRenderer = 0; | 87 m_autoscrollRenderer = 0; |
| 88 | 88 |
| 89 if (!scrollable) | 89 if (!scrollable) |
| 90 return; | 90 return; |
| 91 | 91 |
| 92 scrollable->stopAutoscroll(); | 92 scrollable->stopAutoscroll(); |
| 93 #if OS(WINDOWS) | 93 #if OS(WIN) |
| 94 if (panScrollInProgress()) { | 94 if (panScrollInProgress()) { |
| 95 if (FrameView* view = scrollable->frame()->view()) { | 95 if (FrameView* view = scrollable->frame()->view()) { |
| 96 view->removePanScrollIcon(); | 96 view->removePanScrollIcon(); |
| 97 view->setCursor(pointerCursor()); | 97 view->setCursor(pointerCursor()); |
| 98 } | 98 } |
| 99 } | 99 } |
| 100 #endif | 100 #endif |
| 101 | 101 |
| 102 m_autoscrollType = NoAutoscroll; | 102 m_autoscrollType = NoAutoscroll; |
| 103 } | 103 } |
| 104 | 104 |
| 105 void AutoscrollController::stopAutoscrollIfNeeded(RenderObject* renderer) | 105 void AutoscrollController::stopAutoscrollIfNeeded(RenderObject* renderer) |
| 106 { | 106 { |
| 107 if (m_autoscrollRenderer != renderer) | 107 if (m_autoscrollRenderer != renderer) |
| 108 return; | 108 return; |
| 109 m_autoscrollRenderer = 0; | 109 m_autoscrollRenderer = 0; |
| 110 m_autoscrollType = NoAutoscroll; | 110 m_autoscrollType = NoAutoscroll; |
| 111 m_autoscrollTimer.stop(); | 111 m_autoscrollTimer.stop(); |
| 112 } | 112 } |
| 113 | 113 |
| 114 void AutoscrollController::updateAutoscrollRenderer() | 114 void AutoscrollController::updateAutoscrollRenderer() |
| 115 { | 115 { |
| 116 if (!m_autoscrollRenderer) | 116 if (!m_autoscrollRenderer) |
| 117 return; | 117 return; |
| 118 | 118 |
| 119 RenderObject* renderer = m_autoscrollRenderer; | 119 RenderObject* renderer = m_autoscrollRenderer; |
| 120 | 120 |
| 121 #if OS(WINDOWS) | 121 #if OS(WIN) |
| 122 HitTestResult hitTest = renderer->frame()->eventHandler()->hitTestResultAtPo
int(m_panScrollStartPos, HitTestRequest::ReadOnly | HitTestRequest::Active | Hit
TestRequest::DisallowShadowContent); | 122 HitTestResult hitTest = renderer->frame()->eventHandler()->hitTestResultAtPo
int(m_panScrollStartPos, HitTestRequest::ReadOnly | HitTestRequest::Active | Hit
TestRequest::DisallowShadowContent); |
| 123 | 123 |
| 124 if (Node* nodeAtPoint = hitTest.innerNode()) | 124 if (Node* nodeAtPoint = hitTest.innerNode()) |
| 125 renderer = nodeAtPoint->renderer(); | 125 renderer = nodeAtPoint->renderer(); |
| 126 #endif | 126 #endif |
| 127 | 127 |
| 128 while (renderer && !(renderer->isBox() && toRenderBox(renderer)->canAutoscro
ll())) | 128 while (renderer && !(renderer->isBox() && toRenderBox(renderer)->canAutoscro
ll())) |
| 129 renderer = renderer->parent(); | 129 renderer = renderer->parent(); |
| 130 m_autoscrollRenderer = renderer && renderer->isBox() ? toRenderBox(renderer)
: 0; | 130 m_autoscrollRenderer = renderer && renderer->isBox() ? toRenderBox(renderer)
: 0; |
| 131 } | 131 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 m_autoscrollType = AutoscrollForDragAndDrop; | 164 m_autoscrollType = AutoscrollForDragAndDrop; |
| 165 m_autoscrollRenderer = scrollable; | 165 m_autoscrollRenderer = scrollable; |
| 166 m_dragAndDropAutoscrollStartTime = eventTime; | 166 m_dragAndDropAutoscrollStartTime = eventTime; |
| 167 startAutoscrollTimer(); | 167 startAutoscrollTimer(); |
| 168 } else if (m_autoscrollRenderer != scrollable) { | 168 } else if (m_autoscrollRenderer != scrollable) { |
| 169 m_dragAndDropAutoscrollStartTime = eventTime; | 169 m_dragAndDropAutoscrollStartTime = eventTime; |
| 170 m_autoscrollRenderer = scrollable; | 170 m_autoscrollRenderer = scrollable; |
| 171 } | 171 } |
| 172 } | 172 } |
| 173 | 173 |
| 174 #if OS(WINDOWS) | 174 #if OS(WIN) |
| 175 void AutoscrollController::handleMouseReleaseForPanScrolling(Frame* frame, const
PlatformMouseEvent& mouseEvent) | 175 void AutoscrollController::handleMouseReleaseForPanScrolling(Frame* frame, const
PlatformMouseEvent& mouseEvent) |
| 176 { | 176 { |
| 177 Page* page = frame->page(); | 177 Page* page = frame->page(); |
| 178 if (!page || page->mainFrame() != frame) | 178 if (!page || page->mainFrame() != frame) |
| 179 return; | 179 return; |
| 180 switch (m_autoscrollType) { | 180 switch (m_autoscrollType) { |
| 181 case AutoscrollForPan: | 181 case AutoscrollForPan: |
| 182 if (mouseEvent.button() == MiddleButton) | 182 if (mouseEvent.button() == MiddleButton) |
| 183 m_autoscrollType = AutoscrollForPanCanStop; | 183 m_autoscrollType = AutoscrollForPanCanStop; |
| 184 break; | 184 break; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 230 case AutoscrollForSelection: | 230 case AutoscrollForSelection: |
| 231 if (!eventHandler->mousePressed()) { | 231 if (!eventHandler->mousePressed()) { |
| 232 stopAutoscrollTimer(); | 232 stopAutoscrollTimer(); |
| 233 return; | 233 return; |
| 234 } | 234 } |
| 235 eventHandler->updateSelectionForMouseDrag(); | 235 eventHandler->updateSelectionForMouseDrag(); |
| 236 m_autoscrollRenderer->autoscroll(eventHandler->lastKnownMousePosition())
; | 236 m_autoscrollRenderer->autoscroll(eventHandler->lastKnownMousePosition())
; |
| 237 break; | 237 break; |
| 238 case NoAutoscroll: | 238 case NoAutoscroll: |
| 239 break; | 239 break; |
| 240 #if OS(WINDOWS) | 240 #if OS(WIN) |
| 241 case AutoscrollForPanCanStop: | 241 case AutoscrollForPanCanStop: |
| 242 case AutoscrollForPan: | 242 case AutoscrollForPan: |
| 243 if (!panScrollInProgress()) { | 243 if (!panScrollInProgress()) { |
| 244 stopAutoscrollTimer(); | 244 stopAutoscrollTimer(); |
| 245 return; | 245 return; |
| 246 } | 246 } |
| 247 if (FrameView* view = m_autoscrollRenderer->frame()->view()) | 247 if (FrameView* view = m_autoscrollRenderer->frame()->view()) |
| 248 updatePanScrollState(view, eventHandler->lastKnownMousePosition()); | 248 updatePanScrollState(view, eventHandler->lastKnownMousePosition()); |
| 249 m_autoscrollRenderer->panScroll(m_panScrollStartPos); | 249 m_autoscrollRenderer->panScroll(m_panScrollStartPos); |
| 250 break; | 250 break; |
| 251 #endif | 251 #endif |
| 252 } | 252 } |
| 253 } | 253 } |
| 254 | 254 |
| 255 void AutoscrollController::startAutoscrollTimer() | 255 void AutoscrollController::startAutoscrollTimer() |
| 256 { | 256 { |
| 257 m_autoscrollTimer.startRepeating(autoscrollInterval); | 257 m_autoscrollTimer.startRepeating(autoscrollInterval); |
| 258 } | 258 } |
| 259 | 259 |
| 260 #if OS(WINDOWS) | 260 #if OS(WIN) |
| 261 void AutoscrollController::updatePanScrollState(FrameView* view, const IntPoint&
lastKnownMousePosition) | 261 void AutoscrollController::updatePanScrollState(FrameView* view, const IntPoint&
lastKnownMousePosition) |
| 262 { | 262 { |
| 263 // At the original click location we draw a 4 arrowed icon. Over this icon t
here won't be any scroll | 263 // At the original click location we draw a 4 arrowed icon. Over this icon t
here won't be any scroll |
| 264 // So we don't want to change the cursor over this area | 264 // So we don't want to change the cursor over this area |
| 265 bool east = m_panScrollStartPos.x() < (lastKnownMousePosition.x() - ScrollVi
ew::noPanScrollRadius); | 265 bool east = m_panScrollStartPos.x() < (lastKnownMousePosition.x() - ScrollVi
ew::noPanScrollRadius); |
| 266 bool west = m_panScrollStartPos.x() > (lastKnownMousePosition.x() + ScrollVi
ew::noPanScrollRadius); | 266 bool west = m_panScrollStartPos.x() > (lastKnownMousePosition.x() + ScrollVi
ew::noPanScrollRadius); |
| 267 bool north = m_panScrollStartPos.y() > (lastKnownMousePosition.y() + ScrollV
iew::noPanScrollRadius); | 267 bool north = m_panScrollStartPos.y() > (lastKnownMousePosition.y() + ScrollV
iew::noPanScrollRadius); |
| 268 bool south = m_panScrollStartPos.y() < (lastKnownMousePosition.y() - ScrollV
iew::noPanScrollRadius); | 268 bool south = m_panScrollStartPos.y() < (lastKnownMousePosition.y() - ScrollV
iew::noPanScrollRadius); |
| 269 | 269 |
| 270 if (m_autoscrollType == AutoscrollForPan && (east || west || north || south)
) | 270 if (m_autoscrollType == AutoscrollForPan && (east || west || north || south)
) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 287 } else if (east) | 287 } else if (east) |
| 288 view->setCursor(eastPanningCursor()); | 288 view->setCursor(eastPanningCursor()); |
| 289 else if (west) | 289 else if (west) |
| 290 view->setCursor(westPanningCursor()); | 290 view->setCursor(westPanningCursor()); |
| 291 else | 291 else |
| 292 view->setCursor(middlePanningCursor()); | 292 view->setCursor(middlePanningCursor()); |
| 293 } | 293 } |
| 294 #endif | 294 #endif |
| 295 | 295 |
| 296 } // namespace WebCore | 296 } // namespace WebCore |
| OLD | NEW |