[BlackBerry] Tie up the scrolling machinery to the graphics tree when applicable...
[WebKit-https.git] / Source / WebKit / blackberry / Api / InRegionScroller_p.h
1 /*
2  * Copyright (C) 2011, 2012 Research In Motion Limited. All rights reserved.
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18
19 #ifndef InRegionScroller_p_h
20 #define InRegionScroller_p_h
21
22 #include "IntSize.h"
23 #include "IntPoint.h"
24
25 #include <interaction/ScrollViewBase.h>
26 #include <vector>
27
28 namespace WebCore {
29 class Frame;
30 class Node;
31 class RenderObject;
32 }
33
34 namespace BlackBerry {
35 namespace WebKit {
36
37 class WebPagePrivate;
38
39 class InRegionScrollerPrivate {
40 public:
41     InRegionScrollerPrivate(WebPagePrivate*);
42
43     void setNode(WebCore::Node*);
44     WebCore::Node* node() const;
45     void reset();
46
47     bool canScroll() const;
48     bool hasNode() const;
49
50     bool scrollBy(const Platform::IntSize& delta);
51     bool compositedSetScrollPosition(unsigned camouflagedLayer, const WebCore::IntPoint& scrollPosition);
52
53     std::vector<Platform::ScrollViewBase*> inRegionScrollableAreasForPoint(const WebCore::IntPoint&);
54
55     WebPagePrivate* m_webPage;
56
57 private:
58     bool scrollNodeRecursively(WebCore::Node*, const WebCore::IntSize& delta);
59     bool scrollRenderer(WebCore::RenderObject*, const WebCore::IntSize& delta);
60     void adjustScrollDelta(const WebCore::IntPoint& maxOffset, const WebCore::IntPoint& currentOffset, WebCore::IntSize& delta) const;
61
62     RefPtr<WebCore::Node> m_inRegionScrollStartingNode;
63 };
64
65 }
66 }
67
68 #endif