JavaScriptCore:
[WebKit-https.git] / WebCore / platform / ScrollView.h
1 /*
2  * Copyright (C) 2004, 2006 Apple Computer, 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 ScrollView_H
27 #define ScrollView_H
28
29 #include "ScrollBarMode.h"
30 #include "Widget.h"
31
32 namespace WebCore {
33     class FloatRect;
34
35     class ScrollView : public Widget {
36     public:
37         int visibleWidth() const;
38         int visibleHeight() const;
39         FloatRect visibleContentRect() const;
40         int contentsWidth() const;
41         int contentsHeight() const;
42         int contentsX() const;
43         int contentsY() const;
44         IntSize scrollOffset() const;
45         void scrollBy(int dx, int dy);
46         void scrollPointRecursively(int dx, int dy);
47
48         void setContentsPos(int x, int y);
49
50         virtual void setVScrollBarMode(ScrollBarMode);
51         virtual void setHScrollBarMode(ScrollBarMode);
52
53         // Set the mode for both scroll bars at once.
54         virtual void setScrollBarsMode(ScrollBarMode);
55
56         // This gives us a means of blocking painting on our scrollbars until the first layout has occurred.
57         void suppressScrollBars(bool suppressed, bool repaintOnUnsuppress = false);
58         
59         ScrollBarMode vScrollBarMode() const;
60         ScrollBarMode hScrollBarMode() const;
61
62         void addChild(Widget*, int x = 0, int y = 0);
63         void removeChild(Widget*);
64
65         virtual void resizeContents(int w, int h);
66         void updateContents(const IntRect&, bool now = false);
67
68         IntPoint contentsToViewport(const IntPoint&);
69         IntPoint viewportToContents(const IntPoint&);
70
71         void setStaticBackground(bool);
72
73         bool inWindow() const;
74
75 #if __APPLE__
76         NSView* getDocumentView() const;
77 #endif
78
79 #if WIN32
80         ScrollView();
81         ~ScrollView();
82     private:
83         void updateScrollBars();
84         IntSize maximumScroll() const;
85         int updateScrollInfo(short type, int current, int max, int pageSize);
86         class ScrollViewPrivate;
87         ScrollViewPrivate* m_data;
88 #endif
89
90 #if  PLATFORM(GDK)
91         void updateView(const IntRect&, bool now = false);
92         virtual void setDrawable(GdkDrawable* drawable);
93         virtual void setFrameGeometry(const IntRect&);
94         ScrollView();
95         ~ScrollView();
96     private:
97         void updateScrollBars();
98         IntSize maximumScroll() const;
99         int updateScrollInfo(short type, int current, int max, int pageSize);
100         class ScrollViewPrivate;
101         ScrollViewPrivate* m_data;
102 #endif
103     };
104
105 }
106
107 #endif