• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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