75f019ef2b843dc0df3401d7e7b18fd1dea4ad75
[WebKit-https.git] / Source / WebKit2 / UIProcess / CoordinatedGraphics / WebView.h
1 /*
2  * Copyright (C) 2013 Intel Corporation. All rights reserved.
3  * Copyright (C) 2013 Samsung Electronics. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef WebView_h
28 #define WebView_h
29
30 #if USE(COORDINATED_GRAPHICS)
31
32 #include "APIObject.h"
33 #include "DefaultUndoController.h"
34 #include "PageClient.h"
35 #include "WebContext.h"
36 #include "WebFullScreenManagerProxy.h"
37 #include "WebPageGroup.h"
38 #include "WebPageProxy.h"
39 #include "WebPreferences.h"
40 #include "WebViewClient.h"
41 #include <WebCore/TransformationMatrix.h>
42
43 namespace WebCore {
44 class CoordinatedGraphicsScene;
45 }
46
47 namespace WebKit {
48
49 class WebView : public API::ObjectImpl<API::Object::Type::View>, public PageClient
50 #if ENABLE(FULLSCREEN_API)
51     , public WebFullScreenManagerProxyClient
52 #endif
53     {
54 public:
55     virtual ~WebView();
56
57     static PassRefPtr<WebView> create(WebContext*, WebPageGroup*);
58
59     void initialize();
60
61     void setSize(const WebCore::IntSize&);
62     const WebCore::IntSize& size() const { return m_size; }
63
64     bool isActive() const;
65     void setActive(bool);
66
67     bool isFocused() const { return m_focused; }
68     void setFocused(bool);
69
70     bool isVisible() const { return m_visible; }
71     void setVisible(bool);
72
73     void setContentScaleFactor(float);
74     float contentScaleFactor() const { return m_page->pageScaleFactor(); }
75
76     void setContentPosition(const WebCore::FloatPoint& position) { m_contentPosition = position; }
77     const WebCore::FloatPoint& contentPosition() const { return m_contentPosition; }
78
79     void setUserViewportTranslation(double tx, double ty);
80     WebCore::IntPoint userViewportToContents(const WebCore::IntPoint&) const;
81     WebCore::IntPoint userViewportToScene(const WebCore::IntPoint&) const;
82     WebCore::IntPoint contentsToUserViewport(const WebCore::IntPoint&) const;
83
84     void paintToCurrentGLContext();
85
86     WKPageRef pageRef() const { return toAPI(m_page.get()); }
87
88     void setDrawsBackground(bool);
89     bool drawsBackground() const;
90     void setDrawsTransparentBackground(bool);
91     bool drawsTransparentBackground() const;
92
93     void suspendActiveDOMObjectsAndAnimations();
94     void resumeActiveDOMObjectsAndAnimations();
95
96     void setShowsAsSource(bool);
97     bool showsAsSource() const;
98
99 #if ENABLE(FULLSCREEN_API)
100     bool requestExitFullScreen();
101 #endif
102
103     void findZoomableAreaForPoint(const WebCore::IntPoint&, const WebCore::IntSize&);
104
105     // View client.
106     void initializeClient(const WKViewClientBase*);
107
108     WebPageProxy* page() { return m_page.get(); }
109
110     void didChangeContentSize(const WebCore::IntSize&);
111     const WebCore::IntSize& contentsSize() const { return m_contentsSize; }
112     WebCore::FloatSize visibleContentsSize() const;
113     void didFindZoomableArea(const WebCore::IntPoint&, const WebCore::IntRect&);
114
115     // FIXME: Should become private when Web Events creation is moved to WebView.
116     WebCore::AffineTransform transformFromScene() const;
117     WebCore::AffineTransform transformToScene() const;
118
119     void setOpacity(double opacity) { m_opacity = clampTo(opacity, 0.0, 1.0); }
120     double opacity() const { return m_opacity; }
121
122 protected:
123     WebView(WebContext*, WebPageGroup*);
124     WebCore::CoordinatedGraphicsScene* coordinatedGraphicsScene();
125
126     void updateViewportSize();
127     WebCore::FloatSize dipSize() const;
128     // PageClient
129     virtual std::unique_ptr<DrawingAreaProxy> createDrawingAreaProxy() override;
130
131     virtual void setViewNeedsDisplay(const WebCore::IntRect&) override;
132
133     virtual void displayView() override;
134
135     virtual bool canScrollView() override { return false; }
136     virtual void scrollView(const WebCore::IntRect&, const WebCore::IntSize&) override;
137
138     virtual WebCore::IntSize viewSize() override;
139
140     virtual bool isViewWindowActive() override;
141     virtual bool isViewFocused() override;
142     virtual bool isViewVisible() override;
143     virtual bool isViewInWindow() override;
144
145     virtual void processDidExit() override;
146     virtual void didRelaunchProcess() override;
147     virtual void pageClosed() override;
148
149     virtual void preferencesDidChange() override;
150
151     virtual void toolTipChanged(const String&, const String&) override;
152
153     virtual void didCommitLoadForMainFrame() override;
154
155     virtual void pageDidRequestScroll(const WebCore::IntPoint&) override;
156     virtual void didRenderFrame(const WebCore::IntSize& contentsSize, const WebCore::IntRect& coveredRect) override;
157     virtual void pageTransitionViewportReady() override;
158
159     virtual void setCursor(const WebCore::Cursor&) override;
160     virtual void setCursorHiddenUntilMouseMoves(bool) override;
161
162     virtual void didChangeViewportProperties(const WebCore::ViewportAttributes&) override;
163
164     virtual void registerEditCommand(PassRefPtr<WebEditCommandProxy>, WebPageProxy::UndoOrRedo) override;
165     virtual void clearAllEditCommands() override;
166     virtual bool canUndoRedo(WebPageProxy::UndoOrRedo) override;
167     virtual void executeUndoRedo(WebPageProxy::UndoOrRedo) override;
168
169     virtual WebCore::FloatRect convertToDeviceSpace(const WebCore::FloatRect&) override;
170     virtual WebCore::FloatRect convertToUserSpace(const WebCore::FloatRect&) override;
171     virtual WebCore::IntPoint screenToRootView(const WebCore::IntPoint&) override;
172     virtual WebCore::IntRect rootViewToScreen(const WebCore::IntRect&) override;
173
174     virtual void updateTextInputState() override;
175
176     virtual void handleDownloadRequest(DownloadProxy*) override;
177
178     virtual void doneWithKeyEvent(const NativeWebKeyboardEvent&, bool) override;
179 #if ENABLE(TOUCH_EVENTS)
180     virtual void doneWithTouchEvent(const NativeWebTouchEvent&, bool wasEventHandled) override;
181 #endif
182
183     virtual PassRefPtr<WebPopupMenuProxy> createPopupMenuProxy(WebPageProxy*) override;
184     virtual PassRefPtr<WebContextMenuProxy> createContextMenuProxy(WebPageProxy*) override;
185 #if ENABLE(INPUT_TYPE_COLOR)
186     virtual PassRefPtr<WebColorPicker> createColorPicker(WebPageProxy*, const WebCore::Color& initialColor, const WebCore::IntRect&) override;
187 #endif
188
189     virtual void setFindIndicator(PassRefPtr<FindIndicator>, bool, bool) override;
190
191     virtual void enterAcceleratedCompositingMode(const LayerTreeContext&) override;
192     virtual void exitAcceleratedCompositingMode() override;
193     virtual void updateAcceleratedCompositingMode(const LayerTreeContext&) override;
194
195 #if ENABLE(FULLSCREEN_API)
196     WebFullScreenManagerProxyClient& fullScreenManagerProxyClient() override;
197
198     // WebFullScreenManagerProxyClient
199     virtual void closeFullScreenManager() override { }
200     virtual bool isFullScreen() override { return false; }
201     virtual void enterFullScreen() override { }
202     virtual void exitFullScreen() override { }
203     virtual void beganEnterFullScreen(const WebCore::IntRect&, const WebCore::IntRect&) override { }
204     virtual void beganExitFullScreen(const WebCore::IntRect&, const WebCore::IntRect&) override { }
205 #endif
206
207     WebViewClient m_client;
208     RefPtr<WebPageProxy> m_page;
209     DefaultUndoController m_undoController;
210     WebCore::TransformationMatrix m_userViewportTransform;
211     WebCore::IntSize m_size; // Size in device units.
212     bool m_focused;
213     bool m_visible;
214     double m_opacity;
215     WebCore::FloatPoint m_contentPosition; // Position in UI units.
216     WebCore::IntSize m_contentsSize;
217 };
218
219 } // namespace WebKit
220
221 #endif // USE(COORDINATED_GRAPHICS)
222
223 #endif // WebView_h