[EFL][WK2] Use C API inside ewk_window_features
[WebKit-https.git] / Source / WebKit2 / UIProcess / API / efl / EwkView.h
1 /*
2    Copyright (C) 2011 Samsung Electronics
3    Copyright (C) 2012 Intel Corporation. All rights reserved.
4
5     This library is free software; you can redistribute it and/or
6     modify it under the terms of the GNU Library General Public
7     License as published by the Free Software Foundation; either
8     version 2 of the License, or (at your option) any later version.
9
10     This library is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13     Library General Public License for more details.
14
15     You should have received a copy of the GNU Library General Public License
16     along with this library; see the file COPYING.LIB.  If not, write to
17     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18     Boston, MA 02110-1301, USA.
19 */
20
21 #ifndef EwkView_h
22 #define EwkView_h
23
24 #include "EwkViewCallbacks.h"
25 #include "ImmutableDictionary.h"
26 #include "RefPtrEfl.h"
27 #include "WKEinaSharedString.h"
28 #include "WKGeometry.h"
29 #include "WKRetainPtr.h"
30 #include "ewk_url_request_private.h"
31 #include <Evas.h>
32 #include <WebCore/FloatPoint.h>
33 #include <WebCore/IntRect.h>
34 #include <WebCore/RefPtrCairo.h>
35 #include <WebCore/TextDirection.h>
36 #include <WebCore/Timer.h>
37 #include <WebKit2/WKBase.h>
38 #include <wtf/HashMap.h>
39 #include <wtf/OwnPtr.h>
40 #include <wtf/RefPtr.h>
41 #include <wtf/text/WTFString.h>
42
43 #if ENABLE(TOUCH_EVENTS)
44 #include "ewk_touch.h"
45 #endif
46
47 #if USE(ACCELERATED_COMPOSITING)
48 #include "EvasGLContext.h"
49 #include "EvasGLSurface.h"
50 #endif
51
52 namespace WebKit {
53 class ContextMenuClientEfl;
54 class FindClientEfl;
55 class FormClientEfl;
56 class InputMethodContextEfl;
57 class PageClientBase;
58 class PageLoadClientEfl;
59 class PagePolicyClientEfl;
60 class PageUIClientEfl;
61 class WebContextMenuItemData;
62 class WebContextMenuProxyEfl;
63 class WebPageGroup;
64 class WebPageProxy;
65 class WebPopupItem;
66 class WebPopupMenuProxyEfl;
67
68 #if ENABLE(VIBRATION)
69 class VibrationClientEfl;
70 #endif
71
72 #if USE(COORDINATED_GRAPHICS)
73 class LayerTreeRenderer;
74 #endif
75 }
76
77 namespace WebCore {
78 class AffineTransform;
79 class Color;
80 class Cursor;
81 class IntSize;
82 }
83
84 class EwkContext;
85 class EwkBackForwardList;
86 class EwkColorPicker;
87 class EwkContextMenu;
88 class EwkPopupMenu;
89 class EwkSettings;
90 class EwkWindowFeatures;
91
92 #if USE(ACCELERATED_COMPOSITING)
93 typedef struct _Evas_GL_Context Evas_GL_Context;
94 typedef struct _Evas_GL_Surface Evas_GL_Surface;
95 #endif
96
97 typedef struct Ewk_View_Smart_Data Ewk_View_Smart_Data;
98
99 class EwkView {
100 public:
101
102     enum ViewBehavior {
103         LegacyBehavior,
104         DefaultBehavior
105     };
106     EwkView(Evas_Object* view, PassRefPtr<EwkContext> context, PassRefPtr<WebKit::WebPageGroup> pageGroup, ViewBehavior);
107     ~EwkView();
108
109     static EwkView* fromEvasObject(const Evas_Object* view);
110     Evas_Object* view() { return m_evasObject; }
111
112     WKPageRef wkPage();
113     WebKit::WebPageProxy* page() { return m_pageProxy.get(); }
114     EwkContext* ewkContext() { return m_context.get(); }
115     EwkSettings* settings() { return m_settings.get(); }
116     EwkBackForwardList* backForwardList() { return m_backForwardList.get(); }
117     EwkWindowFeatures* windowFeatures();
118
119     WebCore::IntSize size() const;
120     bool isFocused() const;
121     bool isVisible() const;
122
123     void setDeviceScaleFactor(float scale);
124     float deviceScaleFactor() const;
125
126     WebCore::AffineTransform transformToScene() const;
127     WebCore::AffineTransform transformFromScene() const;
128     WebCore::AffineTransform transformToScreen() const;
129
130     const char* url() const { return m_url; }
131     const char* faviconURL() const { return m_faviconURL; }
132     const char* title() const;
133     WebKit::InputMethodContextEfl* inputMethodContext();
134
135     const char* themePath() const;
136     void setThemePath(const char* theme);
137     const char* customTextEncodingName() const;
138     void setCustomTextEncodingName(const String& encoding);
139
140     bool mouseEventsEnabled() const { return m_mouseEventsEnabled; }
141     void setMouseEventsEnabled(bool enabled);
142 #if ENABLE(TOUCH_EVENTS)
143     bool touchEventsEnabled() const { return m_touchEventsEnabled; }
144     void setTouchEventsEnabled(bool enabled);
145 #endif
146
147     void setCursor(const WebCore::Cursor& cursor);
148     void setImageData(void* imageData, const WebCore::IntSize& size);
149
150     void update(const WebCore::IntRect& rect = WebCore::IntRect());
151
152     static void addToPageViewMap(EwkView* view);
153     static void removeFromPageViewMap(EwkView* view);
154     static const Evas_Object* viewFromPageViewMap(const WKPageRef);
155
156 #if ENABLE(FULLSCREEN_API)
157     void enterFullScreen();
158     void exitFullScreen();
159 #endif
160
161     WKRect windowGeometry() const;
162     void setWindowGeometry(const WKRect&);
163
164 #if USE(ACCELERATED_COMPOSITING)
165     bool createGLSurface(const WebCore::IntSize& viewSize);
166     bool enterAcceleratedCompositingMode();
167     bool exitAcceleratedCompositingMode();
168     void setNeedsSurfaceResize() { m_pendingSurfaceResize = true; }
169 #endif
170
171 #if ENABLE(INPUT_TYPE_COLOR)
172     void requestColorPicker(WKColorPickerResultListenerRef listener, const WebCore::Color&);
173     void dismissColorPicker();
174 #endif
175
176     WKPageRef createNewPage(PassRefPtr<EwkUrlRequest>, WKDictionaryRef windowFeatures);
177     void close();
178
179     void requestPopupMenu(WebKit::WebPopupMenuProxyEfl*, const WebCore::IntRect&, WebCore::TextDirection, double pageScaleFactor, const Vector<WebKit::WebPopupItem>& items, int32_t selectedIndex);
180     void closePopupMenu();
181     
182     void showContextMenu(WebKit::WebContextMenuProxyEfl*, const WebCore::IntPoint& position, const Vector<WebKit::WebContextMenuItemData>& items);
183     void hideContextMenu();
184
185     void updateTextInputState();
186
187     void requestJSAlertPopup(const WKEinaSharedString& message);
188     bool requestJSConfirmPopup(const WKEinaSharedString& message);
189     WKEinaSharedString requestJSPromptPopup(const WKEinaSharedString& message, const WKEinaSharedString& defaultValue);
190
191     template<EwkViewCallbacks::CallbackType callbackType>
192     EwkViewCallbacks::CallBack<callbackType> smartCallback() const
193     {
194         return EwkViewCallbacks::CallBack<callbackType>(m_evasObject);
195     }
196
197     unsigned long long informDatabaseQuotaReached(const String& databaseName, const String& displayName, unsigned long long currentQuota, unsigned long long currentOriginUsage, unsigned long long currentDatabaseUsage, unsigned long long expectedUsage);
198
199 #if USE(TILED_BACKING_STORE)
200     WebKit::PageClientBase* pageClient() { return m_pageClient.get(); }
201
202     void setPageScaleFactor(float scaleFactor) { m_pageScaleFactor = scaleFactor; }
203     float pageScaleFactor() const { return m_pageScaleFactor; }
204
205     void setPagePosition(const WebCore::FloatPoint& position) { m_pagePosition = position; }
206     const WebCore::FloatPoint pagePosition() const { return m_pagePosition; }
207 #endif
208
209     // FIXME: needs refactoring (split callback invoke)
210     void informURLChange();
211
212     bool isHardwareAccelerated() const { return m_isHardwareAccelerated; }
213     void setDrawsBackground(bool enable) { m_setDrawsBackground = enable; }
214
215     PassRefPtr<cairo_surface_t> takeSnapshot();
216
217 private:
218     inline Ewk_View_Smart_Data* smartData() const;
219     void displayTimerFired(WebCore::Timer<EwkView>*);
220
221 #if USE(COORDINATED_GRAPHICS)
222     WebKit::LayerTreeRenderer* layerTreeRenderer();
223 #endif
224
225     void informIconChange();
226
227     static void onMouseDown(void* data, Evas*, Evas_Object*, void* eventInfo);
228     static void onMouseUp(void* data, Evas*, Evas_Object*, void* eventInfo);
229     static void onMouseMove(void* data, Evas*, Evas_Object*, void* eventInfo);
230 #if ENABLE(TOUCH_EVENTS)
231     void feedTouchEvents(Ewk_Touch_Event_Type type);
232     static void onTouchDown(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */);
233     static void onTouchUp(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */);
234     static void onTouchMove(void* /* data */, Evas* /* canvas */, Evas_Object* ewkView, void* /* eventInfo */);
235 #endif
236     static void onFaviconChanged(const char* pageURL, void* eventInfo);
237
238     // Note, initialization order matters.
239     Evas_Object* m_evasObject;
240     RefPtr<EwkContext> m_context;
241 #if USE(ACCELERATED_COMPOSITING)
242     OwnPtr<Evas_GL> m_evasGL;
243     OwnPtr<WebKit::EvasGLContext> m_evasGLContext;
244     OwnPtr<WebKit::EvasGLSurface> m_evasGLSurface;
245     bool m_pendingSurfaceResize;
246 #endif
247     OwnPtr<WebKit::PageClientBase> m_pageClient;
248     RefPtr<WebKit::WebPageProxy> m_pageProxy;
249     OwnPtr<WebKit::PageLoadClientEfl> m_pageLoadClient;
250     OwnPtr<WebKit::PagePolicyClientEfl> m_pagePolicyClient;
251     OwnPtr<WebKit::PageUIClientEfl> m_pageUIClient;
252     OwnPtr<WebKit::ContextMenuClientEfl> m_contextMenuClient;
253     OwnPtr<WebKit::FindClientEfl> m_findClient;
254     OwnPtr<WebKit::FormClientEfl> m_formClient;
255 #if ENABLE(VIBRATION)
256     OwnPtr<WebKit::VibrationClientEfl> m_vibrationClient;
257 #endif
258     OwnPtr<EwkBackForwardList> m_backForwardList;
259 #if USE(TILED_BACKING_STORE)
260     float m_pageScaleFactor;
261     WebCore::FloatPoint m_pagePosition;
262 #endif
263     OwnPtr<EwkSettings> m_settings;
264     RefPtr<EwkWindowFeatures> m_windowFeatures;
265     const void* m_cursorIdentifier; // This is an address, do not free it.
266     WKEinaSharedString m_faviconURL;
267     WKEinaSharedString m_url;
268     mutable WKEinaSharedString m_title;
269     WKEinaSharedString m_theme;
270     mutable WKEinaSharedString m_customEncoding;
271     bool m_mouseEventsEnabled;
272 #if ENABLE(TOUCH_EVENTS)
273     bool m_touchEventsEnabled;
274 #endif
275     WebCore::Timer<EwkView> m_displayTimer;
276     OwnPtr<EwkContextMenu> m_contextMenu;
277     OwnPtr<EwkPopupMenu> m_popupMenu;
278     OwnPtr<WebKit::InputMethodContextEfl> m_inputMethodContext;
279 #if ENABLE(INPUT_TYPE_COLOR)
280     OwnPtr<EwkColorPicker> m_colorPicker;
281 #endif
282     bool m_isHardwareAccelerated;
283     bool m_setDrawsBackground;
284 };
285
286 #endif // EwkView_h