void AutoscrollController::autoscrollTimerFired(Timer<AutoscrollController>&) { if (!m_autoscrollRenderer) { stopAutoscrollTimer(); return; } Frame& frame = m_autoscrollRenderer->frame(); switch (m_autoscrollType) { case AutoscrollForDragAndDrop: if (WTF::currentTime() - m_dragAndDropAutoscrollStartTime > autoscrollDelay) m_autoscrollRenderer->autoscroll(m_dragAndDropAutoscrollReferencePosition); break; case AutoscrollForSelection: { if (!frame.eventHandler().mousePressed()) { stopAutoscrollTimer(); return; } #if ENABLE(DRAG_SUPPORT) frame.eventHandler().updateSelectionForMouseDrag(); #endif m_autoscrollRenderer->autoscroll(frame.eventHandler().lastKnownMousePosition()); break; } case NoAutoscroll: break; #if ENABLE(PAN_SCROLLING) case AutoscrollForPanCanStop: case AutoscrollForPan: // we verify that the main frame hasn't received the order to stop the panScroll if (Frame* mainFrame = getMainFrame(&frame)) { if (!mainFrame->eventHandler().panScrollInProgress()) { stopAutoscrollTimer(); return; } } if (FrameView* view = frame.view()) updatePanScrollState(view, frame.eventHandler().lastKnownMousePosition()); m_autoscrollRenderer->panScroll(m_panScrollStartPos); break; #endif } }
// FIXME: This would get get better animation fidelity if it used the monotonicFrameBeginTime instead // of WTF::currentTime(). void AutoscrollController::animate(double) { if (!m_autoscrollLayoutObject) { stopAutoscroll(); return; } EventHandler& eventHandler = m_autoscrollLayoutObject->frame()->eventHandler(); switch (m_autoscrollType) { case AutoscrollForDragAndDrop: if (WTF::currentTime() - m_dragAndDropAutoscrollStartTime > autoscrollDelay) m_autoscrollLayoutObject->autoscroll(m_dragAndDropAutoscrollReferencePosition); break; case AutoscrollForSelection: if (!eventHandler.mousePressed()) { stopAutoscroll(); return; } eventHandler.updateSelectionForMouseDrag(); m_autoscrollLayoutObject->autoscroll(eventHandler.lastKnownMousePosition()); break; case NoAutoscroll: break; #if OS(WIN) case AutoscrollForPanCanStop: case AutoscrollForPan: if (!panScrollInProgress()) { stopAutoscroll(); return; } if (FrameView* view = m_autoscrollLayoutObject->frame()->view()) updatePanScrollState(view, eventHandler.lastKnownMousePosition()); m_autoscrollLayoutObject->panScroll(m_panScrollStartPos); break; #endif } if (m_autoscrollType != NoAutoscroll && m_autoscrollLayoutObject) m_page->chromeClient().scheduleAnimation(m_autoscrollLayoutObject->frame()->view()); }
void AutoscrollController::autoscrollTimerFired(Timer<AutoscrollController>*) { if (!m_autoscrollRenderer) { stopAutoscrollTimer(); return; } EventHandler* eventHandler = m_autoscrollRenderer->frame()->eventHandler(); switch (m_autoscrollType) { case AutoscrollForDragAndDrop: if (WTF::currentTime() - m_dragAndDropAutoscrollStartTime > autoscrollDelay) m_autoscrollRenderer->autoscroll(m_dragAndDropAutoscrollReferencePosition); break; case AutoscrollForSelection: if (!eventHandler->mousePressed()) { stopAutoscrollTimer(); return; } eventHandler->updateSelectionForMouseDrag(); m_autoscrollRenderer->autoscroll(eventHandler->lastKnownMousePosition()); break; case NoAutoscroll: break; #if ENABLE(PAN_SCROLLING) case AutoscrollForPanCanStop: case AutoscrollForPan: if (!panScrollInProgress()) { stopAutoscrollTimer(); return; } if (FrameView* view = m_autoscrollRenderer->frame()->view()) updatePanScrollState(view, eventHandler->lastKnownMousePosition()); m_autoscrollRenderer->panScroll(m_panScrollStartPos); break; #endif } }