1 /* 2 * Copyright (C) 2006, 2007, 2009, 2010, 2011 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef AutoscrollController_h 27 #define AutoscrollController_h 28 29 #include "platform/geometry/IntPoint.h" 30 #include "wtf/PassOwnPtr.h" 31 32 namespace WebCore { 33 34 class EventHandler; 35 class LocalFrame; 36 class FrameView; 37 class Node; 38 class Page; 39 class PlatformMouseEvent; 40 class RenderBox; 41 class RenderObject; 42 43 enum AutoscrollType { 44 NoAutoscroll, 45 AutoscrollForDragAndDrop, 46 AutoscrollForSelection, 47 #if OS(WIN) 48 AutoscrollForPanCanStop, 49 AutoscrollForPan, 50 #endif 51 }; 52 53 // AutscrollController handels autoscroll and pan scroll for EventHandler. 54 class AutoscrollController { 55 public: 56 static PassOwnPtr<AutoscrollController> create(Page&); 57 58 void animate(double monotonicFrameBeginTime); 59 bool autoscrollInProgress() const; 60 bool autoscrollInProgress(const RenderBox*) const; 61 bool panScrollInProgress() const; 62 void startAutoscrollForSelection(RenderObject*); 63 void stopAutoscroll(); 64 void stopAutoscrollIfNeeded(RenderObject*); 65 void updateAutoscrollRenderer(); 66 void updateDragAndDrop(Node* targetNode, const IntPoint& eventPosition, double eventTime); 67 #if OS(WIN) 68 void handleMouseReleaseForPanScrolling(LocalFrame*, const PlatformMouseEvent&); 69 void startPanScrolling(RenderBox*, const IntPoint&); 70 #endif 71 72 private: 73 explicit AutoscrollController(Page&); 74 75 void startAutoscroll(); 76 77 #if OS(WIN) 78 void updatePanScrollState(FrameView*, const IntPoint& lastKnownMousePosition); 79 #endif 80 81 Page& m_page; 82 RenderBox* m_autoscrollRenderer; 83 AutoscrollType m_autoscrollType; 84 IntPoint m_dragAndDropAutoscrollReferencePosition; 85 double m_dragAndDropAutoscrollStartTime; 86 #if OS(WIN) 87 IntPoint m_panScrollStartPos; 88 #endif 89 }; 90 91 } // namespace WebCore 92 93 #endif // AutoscrollController_h 94