c130aed926bc3b8abda08be27e28838faa7e40bd
[WebKit-https.git] / Source / WebKit / efl / ewk / ewk_view.h
1 /*
2     Copyright (C) 2009-2010 ProFUSION embedded systems
3     Copyright (C) 2009-2010 Samsung Electronics
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 /**
22  * @file    ewk_view.h
23  * @brief   WebKit main smart object.
24  *
25  * This object allows the high level access to WebKit-EFL component.
26  * It is responsible for managing the main frame and other
27  * critical resources.
28  *
29  * Every ewk_view has at least one frame, called "main frame" and
30  * retrieved with ewk_view_frame_main_get(). Direct frame access is
31  * often discouraged, it is recommended to use ewk_view functions
32  * instead.
33  *
34  * The following signals (see evas_object_smart_callback_add()) are emitted:
35  *
36  *  - "download,request", Ewk_Download: reports a download is being requested
37  *  - "editorclient,contents,changed", void: reports to the view that editor
38  *    client's contents were changed
39  *  - "frame,created", Evas_Object*: a new frame is created.
40  *  - "icon,received", void: main frame received an icon.
41  *  - "inputmethod,changed", Eina_Bool: reports that input method was changed and
42  *    it gives a boolean value whether it's enabled or not as an argument.
43  *  - "link,hover,in", const char *link[2]: reports mouse is over a link.
44  *    It gives the url in link[0] and link's title in link[1] as an argument.
45  *  - "link,hover,out", void: reports mouse moved out from a link.
46  *  - "load,error", const Ewk_Frame_Load_Error*: reports load failed
47  *  - "load,finished", const Ewk_Frame_Load_Error*: reports load
48  *    finished and it gives @c NULL on success or pointer to
49  *    structure defining the error.
50  *  - "load,newwindow,show", void: reports that a new window was created and can be shown.
51  *    and it gives a pointer to structure defining the error as an argument.
52  *  - "load,progress", double*: load progress is changed (overall value
53  *    from 0.0 to 1.0, connect to individual frames for fine grained).
54  *  - "load,provisional", void: view started provisional load.
55  *  - "load,started", void: frame started loading the document.
56  *  - "menubar,visible,get", Eina_Bool *: expects a @c EINA_TRUE if menubar is
57  *    visible; @c EINA_FALSE, otherwise.
58  *  - "menubar,visible,set", Eina_Bool: sets menubar visibility.
59  *  - "ready", void: page is fully loaded.
60  *  - "scrollbars,visible,get", Eina_Bool *: expects a @c EINA_TRUE if scrollbars
61  *    are visible; @c EINA_FALSE, otherwise.
62  *  - "scrollbars,visible,set", Eina_Bool: sets scrollbars visibility.
63  *  - "statusbar,text,set", const char *: sets statusbar text.
64  *  - "statusbar,visible,get", Eina_Bool *: expects a @c EINA_TRUE if statusbar is
65  *    visible; @c EINA_FALSE, otherwise.
66  *  - "statusbar,visible,set", Eina_Bool: sets statusbar visibility.
67  *  - "title,changed", const char*: title of the main frame was changed.
68  *  - "toolbars,visible,get", Eina_Bool *: expects a @c EINA_TRUE if toolbar
69  *    is visible; @c EINA_FALSE, otherwise.
70  *  - "toolbars,visible,set", Eina_Bool: sets toolbar visibility.
71  *  - "popup,create", Ewk_Menu: reports that a new menu was created.
72  *  - "popup,willdeleted", Ewk_Menu: reports that a previously created menu
73  *    will be deleted.
74  *  - "restore", Evas_Object *: reports that view should be restored to default conditions
75  *    and it gives a frame that originated restore as an argument.
76  *  - "tooltip,text,set", const char*: sets tooltip text and displays if it is currently hidden.
77  *  - "uri,changed", const char*: uri of the main frame was changed.
78  *  - "view,resized", void: view object's size was changed.
79  *  - "viewport,changed", void: reports that viewport was changed.
80  *  - "zoom,animated,end", void: requested animated zoom is finished.
81  */
82
83 #ifndef ewk_view_h
84 #define ewk_view_h
85
86 #include "ewk_frame.h"
87 #include "ewk_history.h"
88 #include "ewk_window_features.h"
89
90 #include <Evas.h>
91 #include <cairo.h>
92
93 #ifdef __cplusplus
94 extern "C" {
95 #endif
96
97 /// Creates a type name for @a _Ewk_View_Smart_Data.
98 typedef struct _Ewk_View_Smart_Data Ewk_View_Smart_Data;
99
100 /// Creates a type name for @a _Ewk_View_Smart_Class.
101 typedef struct _Ewk_View_Smart_Class Ewk_View_Smart_Class;
102 /// Ewk view's class, to be overridden by sub-classes.
103 struct _Ewk_View_Smart_Class {
104     Evas_Smart_Class sc; /**< All but 'data' is free to be changed. */
105     unsigned long version;
106
107     Evas_Object *(*window_create)(Ewk_View_Smart_Data *sd, Eina_Bool javascript, const Ewk_Window_Features *window_features); /**< creates a new window, requested by webkit */
108     void (*window_close)(Ewk_View_Smart_Data *sd); /**< closes a window */
109     // hooks to allow different backing stores
110     Evas_Object *(*backing_store_add)(Ewk_View_Smart_Data *sd); /**< must be defined */
111     Eina_Bool (*scrolls_process)(Ewk_View_Smart_Data *sd); /**< must be defined */
112     Eina_Bool (*repaints_process)(Ewk_View_Smart_Data *sd); /**< must be defined */
113     Eina_Bool (*contents_resize)(Ewk_View_Smart_Data *sd, int w, int h);
114     Eina_Bool (*zoom_set)(Ewk_View_Smart_Data *sd, float zoom, Evas_Coord cx, Evas_Coord cy);
115     Eina_Bool (*zoom_weak_set)(Ewk_View_Smart_Data *sd, float zoom, Evas_Coord cx, Evas_Coord cy);
116     void (*zoom_weak_smooth_scale_set)(Ewk_View_Smart_Data *sd, Eina_Bool smooth_scale);
117     void (*bg_color_set)(Ewk_View_Smart_Data *sd, unsigned char r, unsigned char g, unsigned char b, unsigned char a);
118     void (*flush)(Ewk_View_Smart_Data *sd);
119     Eina_Bool (*pre_render_region)(Ewk_View_Smart_Data *sd, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, float zoom);
120     Eina_Bool (*pre_render_relative_radius)(Ewk_View_Smart_Data *sd, unsigned int n, float zoom);
121     void (*pre_render_cancel)(Ewk_View_Smart_Data *sd);
122     Eina_Bool (*disable_render)(Ewk_View_Smart_Data *sd);
123     Eina_Bool (*enable_render)(Ewk_View_Smart_Data *sd);
124
125     // event handling:
126     //  - returns true if handled
127     //  - if overridden, have to call parent method if desired
128     Eina_Bool (*focus_in)(Ewk_View_Smart_Data *sd);
129     Eina_Bool (*focus_out)(Ewk_View_Smart_Data *sd);
130     Eina_Bool (*mouse_wheel)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Wheel *ev);
131     Eina_Bool (*mouse_down)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Down *ev);
132     Eina_Bool (*mouse_up)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Up *ev);
133     Eina_Bool (*mouse_move)(Ewk_View_Smart_Data *sd, const Evas_Event_Mouse_Move *ev);
134     Eina_Bool (*key_down)(Ewk_View_Smart_Data *sd, const Evas_Event_Key_Down *ev);
135     Eina_Bool (*key_up)(Ewk_View_Smart_Data *sd, const Evas_Event_Key_Up *ev);
136
137     void (*add_console_message)(Ewk_View_Smart_Data *sd, const char *message, unsigned int lineNumber, const char *sourceID);
138     void (*run_javascript_alert)(Ewk_View_Smart_Data *sd, Evas_Object *frame, const char *message);
139     Eina_Bool (*run_javascript_confirm)(Ewk_View_Smart_Data *sd, Evas_Object *frame, const char *message);
140     Eina_Bool (*run_javascript_prompt)(Ewk_View_Smart_Data *sd, Evas_Object *frame, const char *message, const char *defaultValue, char **value);
141     Eina_Bool (*should_interrupt_javascript)(Ewk_View_Smart_Data *sd);
142     uint64_t (*exceeded_database_quota)(Ewk_View_Smart_Data *sd, Evas_Object *frame, const char *databaseName, uint64_t current_size, uint64_t expected_size);
143
144     Eina_Bool (*run_open_panel)(Ewk_View_Smart_Data *sd, Evas_Object *frame, Eina_Bool allows_multiple_files, const char *accept_types, Eina_List **selected_filenames);
145
146     Eina_Bool (*navigation_policy_decision)(Ewk_View_Smart_Data *sd, Ewk_Frame_Resource_Request *request);
147 };
148
149 /**
150  * The version you have to put into the version field
151  * in the @a Ewk_View_Smart_Class structure.
152  */
153 #define EWK_VIEW_SMART_CLASS_VERSION 1UL
154
155 /**
156  * Initializes a whole @a Ewk_View_Smart_Class structure.
157  *
158  * @param smart_class_init initializer to use for the "base" field
159  * @a Evas_Smart_Class
160  *
161  * @see EWK_VIEW_SMART_CLASS_INIT_NULL
162  * @see EWK_VIEW_SMART_CLASS_INIT_VERSION
163  * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION
164  */
165 #define EWK_VIEW_SMART_CLASS_INIT(smart_class_init) {smart_class_init, EWK_VIEW_SMART_CLASS_VERSION, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
166
167 /**
168  * Initializes to zero a whole @a Ewk_View_Smart_Class structure.
169  *
170  * @see EWK_VIEW_SMART_CLASS_INIT_VERSION
171  * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION
172  * @see EWK_VIEW_SMART_CLASS_INIT
173  */
174 #define EWK_VIEW_SMART_CLASS_INIT_NULL EWK_VIEW_SMART_CLASS_INIT(EVAS_SMART_CLASS_INIT_NULL)
175
176 /**
177  * Initializes to zero a whole @a Ewk_View_Smart_Class structure
178  * and sets the version.
179  *
180  * Similar to @a EWK_VIEW_SMART_CLASS_INIT_NULL, but it sets the version field of
181  * @a Evas_Smart_Class (base field) to latest @a EVAS_SMART_CLASS_VERSION.
182  *
183  * @see EWK_VIEW_SMART_CLASS_INIT_NULL
184  * @see EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION
185  * @see EWK_VIEW_SMART_CLASS_INIT
186  */
187 #define EWK_VIEW_SMART_CLASS_INIT_VERSION EWK_VIEW_SMART_CLASS_INIT(EVAS_SMART_CLASS_INIT_VERSION)
188
189 /**
190  * Initializes to zero a whole @a Ewk_View_Smart_Class structure
191  * and sets the name and version.
192  *
193  * Similar to @a EWK_VIEW_SMART_CLASS_INIT_NULL, but it sets the version field of
194  * @a Evas_Smart_Class (base field) to latest @a EVAS_SMART_CLASS_VERSION
195  * and the name to the specific value.
196  *
197  * It will keep a reference to the name field as a "const char *", that is,
198  * name must be available while the structure is used (hint: static or global!)
199  * and it will not be modified.
200  *
201  * @see EWK_VIEW_SMART_CLASS_INIT_NULL
202  * @see EWK_VIEW_SMART_CLASS_INIT_VERSION
203  * @see EWK_VIEW_SMART_CLASS_INIT
204  */
205 #define EWK_VIEW_SMART_CLASS_INIT_NAME_VERSION(name) EWK_VIEW_SMART_CLASS_INIT(EVAS_SMART_CLASS_INIT_NAME_VERSION(name))
206
207 /// Defines the input method hints.
208 enum _Ewk_Imh {
209     EWK_IMH_TELEPHONE = (1 << 0),
210     EWK_IMH_NUMBER = (1 << 1),
211     EWK_IMH_EMAIL = (1 << 2),
212     EWK_IMH_URL = (1 << 3),
213     EWK_IMH_PASSWORD = (1 << 4)
214 };
215 /// Creates a type name for @a _Ewk_Imh.
216 typedef enum _Ewk_Imh Ewk_Imh;
217
218 /// Creates a type name for @a _Ewk_View_Private_Data.
219 typedef struct _Ewk_View_Private_Data Ewk_View_Private_Data;
220
221 /// Defines the types of the items for the context menu.
222 enum _Ewk_Menu_Item_Type {
223     EWK_MENU_SEPARATOR,
224     EWK_MENU_GROUP,
225     EWK_MENU_OPTION
226 };
227 /// Creates a type name for @a _Ewk_Menu_Item_Type.
228 typedef enum _Ewk_Menu_Item_Type Ewk_Menu_Item_Type;
229
230 /// Creates a type name for @a _Ewk_Menu_Item.
231 typedef struct _Ewk_Menu_Item Ewk_Menu_Item;
232 /// Contains data of each menu item.
233 struct _Ewk_Menu_Item {
234     const char *text; /**< Text of the item. */
235     Ewk_Menu_Item_Type type; /** Type of the item. */
236 };
237
238 /// Creates a type name for @a _Ewk_Menu.
239 typedef struct _Ewk_Menu Ewk_Menu;
240 /// Contains Popup menu data.
241 struct _Ewk_Menu {
242         Eina_List *items; /**< List of items. */
243         int x; /**< The horizontal position of Popup menu. */
244         int y; /**< The vertical position of Popup menu. */
245         int width; /**< Popup menu width. */
246         int height; /**< Popup menu height. */
247 };
248
249 /// Creates a type name for @a _Ewk_Download.
250 typedef struct _Ewk_Download Ewk_Download;
251 /// Contains Download data.
252 struct _Ewk_Download {
253     const char *url; /**< URL of resource. */
254     /* to be extended */
255 };
256
257 /// Creates a type name for @a _Ewk_Scroll_Request.
258 typedef struct _Ewk_Scroll_Request Ewk_Scroll_Request;
259 /// Contains the scroll request that should be processed by subclass implementations.
260 struct _Ewk_Scroll_Request {
261     Evas_Coord dx, dy;
262     Evas_Coord x, y, w, h, x2, y2;
263     Eina_Bool main_scroll;
264 };
265
266 /**
267  * @brief Contains an internal View data.
268  *
269  * It is to be considered private by users, but may be extended or
270  * changed by sub-classes (that's why it's in the public header file).
271  */
272 struct _Ewk_View_Smart_Data {
273     Evas_Object_Smart_Clipped_Data base;
274     const Ewk_View_Smart_Class *api; /**< Reference to casted class instance. */
275     Evas_Object *self; /**< Reference to owner object. */
276     Evas_Object *main_frame; /**< Reference to main frame object. */
277     Evas_Object *backing_store; /**< Reference to backing store. */
278     Evas_Object *events_rect; /**< The rectangle that receives mouse events. */
279     Ewk_View_Private_Data *_priv; /**< Should @b never be accessed, c++ stuff. */
280     struct {
281         Evas_Coord x, y, w, h;
282     } view; /**< Contains the position and size of last used viewport. */
283     struct {
284         struct {
285             float start;
286             float end;
287             float current; /**< if > 0.0, then doing animated zoom. */
288         } zoom;
289     } animated_zoom;
290     struct {
291         unsigned char r, g, b, a;
292     } bg_color; /**< Keeps the background color. */
293     Eina_Bool zoom_weak_smooth_scale:1;
294     struct {
295         Eina_Bool any:1;
296         Eina_Bool size:1;
297         Eina_Bool position:1;
298         Eina_Bool frame_rect:1;
299     } changed; /**< Keeps what changed since last smart_calculate. */
300 };
301
302 /// Defines the modes of view.
303 enum _Ewk_View_Mode {
304     EWK_VIEW_MODE_WINDOWED,
305     EWK_VIEW_MODE_FLOATING,
306     EWK_VIEW_MODE_FULLSCREEN,
307     EWK_VIEW_MODE_MAXIMIZED,
308     EWK_VIEW_MODE_MINIMIZED
309 };
310 /// Creates a type name for @a _Ewk_View_Mode.
311 typedef enum _Ewk_View_Mode Ewk_View_Mode;
312
313 /**
314  * @brief Creates a type name for @a _Ewk_Tile_Unused_Cache.
315  *
316  * Cache (pool) that contains unused tiles for ewk_view_tiled.
317  *
318  * This cache will maintain unused tiles and flush them when the total
319  * memory exceeds the set amount when
320  * ewk_tile_unused_cache_auto_flush() or explicitly set value when
321  * ewk_tile_unused_cache_flush() is called.
322  *
323  * The tile may be shared among different ewk_view_tiled instances to
324  * group maximum unused memory resident in the system.
325  */
326 typedef struct _Ewk_Tile_Unused_Cache Ewk_Tile_Unused_Cache;
327
328 /**
329  * Change cache capacity, in bytes.
330  *
331  * This will not flush cache, use ewk_tile_unused_cache_flush() or
332  * ewk_tile_unused_cache_auto_flush() to do so.
333  */
334 EAPI void   ewk_tile_unused_cache_max_set(Ewk_Tile_Unused_Cache *tuc, size_t max);
335
336 /**
337  * Retrieve maximum cache capacity, in bytes.
338  */
339 EAPI size_t ewk_tile_unused_cache_max_get(const Ewk_Tile_Unused_Cache *tuc);
340
341 /**
342  * Retrieve the used cache capacity, in bytes.
343  */
344 EAPI size_t ewk_tile_unused_cache_used_get(const Ewk_Tile_Unused_Cache *tuc);
345
346 /**
347  * Flush given amount of bytes from cache.
348  *
349  * After calling this function, near @a bytes are freed from cache. It
350  * may be less if cache did not contain that amount of bytes (ie: an
351  * empty cache has nothing to free!) or more if the cache just
352  * contained objects that were larger than the requested amount (this
353  * is usually the case).
354  *
355  * @param tuc cache of unused tiles.
356  * @param bytes amount to free.
357  *
358  * @return amount really freed.
359  *
360  * @see ewk_tile_unused_cache_used_get()
361  */
362 EAPI size_t ewk_tile_unused_cache_flush(Ewk_Tile_Unused_Cache *tuc, size_t bytes);
363
364 /**
365  * Flush enough bytes to make cache usage lower than maximum.
366  *
367  * Just like ewk_tile_unused_cache_flush(), but this will make the cache
368  * free enough tiles to respect maximum cache size as defined with
369  * ewk_tile_unused_cache_max_set().
370  *
371  * This function is usually called when system becomes idle. This way
372  * we keep memory low but do not impact performance when
373  * creating/deleting tiles.
374  */
375 EAPI void   ewk_tile_unused_cache_auto_flush(Ewk_Tile_Unused_Cache *tuc);
376
377 /**
378  * Sets the smart class api without any backing store, enabling view
379  * to be inherited.
380  *
381  * @param api class definition to be set, all members with the
382  *        exception of Evas_Smart_Class->data may be overridden. Must
383  *        @b not be @c 0.
384  *
385  * @note Evas_Smart_Class->data is used to implement type checking and
386  *       is not supposed to be changed/overridden. If you need extra
387  *       data for your smart class to work, just extend
388  *       Ewk_View_Smart_Class instead.
389  *
390  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure (probably
391  *         version mismatch).
392  *
393  * @see ewk_view_single_smart_set()
394  * @see ewk_view_tiled_smart_set()
395  */
396 EAPI Eina_Bool    ewk_view_base_smart_set(Ewk_View_Smart_Class *api);
397
398 /**
399  * Sets the smart class api using single backing store, enabling view
400  * to be inherited.
401  *
402  * @param api class definition to be set, all members with the
403  *        exception of Evas_Smart_Class->data may be overridden. Must
404  *        @b not be @c NULL.
405  *
406  * @note Evas_Smart_Class->data is used to implement type checking and
407  *       is not supposed to be changed/overridden. If you need extra
408  *       data for your smart class to work, just extend
409  *       Ewk_View_Smart_Class instead.
410  *
411  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure (probably
412  *         version mismatch).
413  *
414  * @see ewk_view_base_smart_set()
415  */
416 EAPI Eina_Bool    ewk_view_single_smart_set(Ewk_View_Smart_Class *api);
417
418 /**
419  * Sets the smart class api using tiled backing store, enabling view
420  * to be inherited.
421  *
422  * @param api class definition to be set, all members with the
423  *        exception of Evas_Smart_Class->data may be overridden. Must
424  *        @b not be @c NULL.
425  *
426  * @note Evas_Smart_Class->data is used to implement type checking and
427  *       is not supposed to be changed/overridden. If you need extra
428  *       data for your smart class to work, just extend
429  *       Ewk_View_Smart_Class instead.
430  *
431  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure (probably
432  *         version mismatch).
433  *
434  * @see ewk_view_base_smart_set()
435  */
436 EAPI Eina_Bool    ewk_view_tiled_smart_set(Ewk_View_Smart_Class *api);
437
438 /**
439  * Creates a new EFL WebKit View object.
440  *
441  * View objects are the recommended way to deal with EFL WebKit as it
442  * abstracts the complex pieces of the process.
443  *
444  * Each view is composed by a set of frames. The set has at least one
445  * frame, called 'main_frame'. See ewk_view_frame_main_get() and
446  * ewk_view_frame_focused_get().
447  *
448  * @param e canvas where to create the view object.
449  *
450  * @return view object or @c NULL if errors.
451  *
452  * @see ewk_view_uri_set()
453  */
454 EAPI Evas_Object *ewk_view_single_add(Evas *e);
455
456 /**
457  * Creates a new EFL WebKit View object using tiled backing store.
458  *
459  * View objects are the recommended way to deal with EFL WebKit as it
460  * abstracts the complex pieces of the process.
461  *
462  * This object is almost the same as the one returned by the ewk_view_add()
463  * function, but it uses the tiled backing store instead of the default
464  * backing store.
465  *
466  * @param e canvas where to create the view object.
467  *
468  * @return view object or @c NULL if errors.
469  *
470  * @see ewk_view_uri_set()
471  */
472 EAPI Evas_Object *ewk_view_tiled_add(Evas *e);
473
474 /**
475  * Get the cache of unused tiles used by this view.
476  *
477  * @param o view object to get cache.
478  * @return instance of "cache of unused tiles" or @c NULL on errors.
479  */
480 EAPI Ewk_Tile_Unused_Cache *ewk_view_tiled_unused_cache_get(const Evas_Object *o);
481
482 /**
483  * Set the cache of unused tiles used by this view.
484  *
485  * @param o view object to get cache.
486  * @param cache instance of "cache of unused tiles". This can be used
487  *        to share a single cache amongst different views. The tiles
488  *        from one view will not be used by the other! This is just to
489  *        limit the group with amount of unused memory.
490  *        If @c NULL is provided, then a new cache is created.
491  */
492 EAPI void                   ewk_view_tiled_unused_cache_set(Evas_Object *o, Ewk_Tile_Unused_Cache *cache);
493
494 // FIXME: this function should be removed later, when we find the best flag to use.
495 /**
496  * Set the function with the same name of the tiled backing store.
497  * @param o the tiled backing store object.
498  * @param flag value of the tiled backing store flag to set.
499  */
500 EAPI void                   ewk_view_tiled_process_entire_queue_set(Evas_Object *o, Eina_Bool flag);
501
502 /**
503  * Set a fixed layout size to be used, dissociating it from viewport size.
504  *
505  * Setting a width different than zero enables fixed layout on that
506  * size. It's automatically scaled based on zoom, but will not change
507  * if viewport changes.
508  *
509  * Setting both @a w and @a h to zero will disable fixed layout.
510  *
511  * @param o view object to change fixed layout.
512  * @param w fixed width to use. This size will be automatically scaled
513  *        based on zoom level.
514  * @param h fixed height to use. This size will be automatically scaled
515  *        based on zoom level.
516  */
517 EAPI void         ewk_view_fixed_layout_size_set(Evas_Object *o, Evas_Coord w, Evas_Coord h);
518
519 /**
520  * Get fixed layout size in use.
521  *
522  * @param o view object to query fixed layout size.
523  * @param w where to return width. Returns 0 on error or if no fixed
524  *        layout in use.
525  * @param h where to return height. Returns 0 on error or if no fixed
526  *        layout in use.
527  */
528 EAPI void         ewk_view_fixed_layout_size_get(Evas_Object *o, Evas_Coord *w, Evas_Coord *h);
529
530 /**
531  * Set the theme path to be used by this view.
532  *
533  * This also sets the theme on the main frame. As frames inherit theme
534  * from their parent, this will have all frames with unset theme to
535  * use this one.
536  *
537  * @param o view object to change theme.
538  * @param path theme path, may be @c 0 to reset to default.
539  */
540 EAPI void         ewk_view_theme_set(Evas_Object *o, const char *path);
541
542 /**
543  * Gets the theme set on this frame.
544  *
545  * This returns the value set by ewk_view_theme_set().
546  *
547  * @param o view object to get theme path.
548  *
549  * @return theme path, may be @c 0 if not set.
550  */
551 EAPI const char  *ewk_view_theme_get(Evas_Object *o);
552
553 /**
554  * Get the object that represents the main frame.
555  *
556  * @param o view object to get main frame.
557  *
558  * @return ewk_frame object or @c 0 if none yet.
559  */
560 EAPI Evas_Object *ewk_view_frame_main_get(const Evas_Object *o);
561
562 /**
563  * Get the currently focused frame object.
564  *
565  * @param o view object to get focused frame.
566  *
567  * @return ewk_frame object or @c 0 if none yet.
568  */
569 EAPI Evas_Object *ewk_view_frame_focused_get(const Evas_Object *o);
570
571 /**
572  * Ask main frame to load the given URI.
573  *
574  * @param o view object to load uri.
575  * @param uri uniform resource identifier to load.
576  *
577  * @return @c EINA_TRUE on successful request, @c EINA_FALSE on failure.
578  *         Note that it means the request was done, not that it was
579  *         satisfied.
580  */
581 EAPI Eina_Bool    ewk_view_uri_set(Evas_Object *o, const char *uri);
582
583 /**
584  * Get the current uri loaded by main frame.
585  *
586  * @param o view object to get current uri.
587  *
588  * @return current uri reference or @c 0. It's internal, don't change.
589  */
590 EAPI const char  *ewk_view_uri_get(const Evas_Object *o);
591
592 /**
593  * Get the current title of main frame.
594  *
595  * @param o view object to get current title.
596  *
597  * @return current title reference or @c 0. It's internal, don't change.
598  */
599 EAPI const char  *ewk_view_title_get(const Evas_Object *o);
600
601 /**
602  * Gets if main frame is editable.
603  *
604  * @param o view object to get editable state.
605  *
606  * @return @c EINA_TRUE if editable, @c EINA_FALSE otherwise.
607  */
608 EAPI Eina_Bool    ewk_view_editable_get(const Evas_Object *o);
609
610 /**
611  * Sets if main frame is editable.
612  *
613  * @param o view object to set editable state.
614  * @param editable new state.
615  *
616  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
617  */
618 EAPI Eina_Bool    ewk_view_editable_set(Evas_Object *o, Eina_Bool editable);
619
620 /**
621  * Set background color and transparency
622  *
623  * Just as in Evas, colors are pre-multiplied, so 50% red is
624  * (128, 0, 0, 128) and not (255, 0, 0, 128)!
625  *
626  * @warning Watch out performance issues with transparency! Object
627  *          will be handled as transparent image by evas even if the
628  *          webpage specifies a background color. That mean you'll pay
629  *          a price even if it's not really transparent, thus
630  *          scrolling/panning and zooming will be likely slower than
631  *          if transparency is off.
632  *
633  * @param o view object to change.
634  * @param r red component.
635  * @param g green component.
636  * @param b blue component.
637  * @param a transparency.
638  */
639 EAPI void         ewk_view_bg_color_set(Evas_Object *o, int r, int g, int b, int a);
640
641 /**
642  * Query if view object background color.
643  *
644  * Just as in Evas, colors are pre-multiplied, so 50% red is
645  * (128, 0, 0, 128) and not (255, 0, 0, 128)!
646  *
647  * @param o view object to query.
648  * @param r where to return red color component.
649  * @param g where to return green color component.
650  * @param b where to return blue color component.
651  * @param a where to return alpha value.
652  */
653 EAPI void         ewk_view_bg_color_get(const Evas_Object *o, int *r, int *g, int *b, int *a);
654
655 /**
656  * Get the copy of the selection text.
657  *
658  * @param o view object to get selection text.
659  *
660  * @return newly allocated string or @c 0 if nothing is selected or failure.
661  */
662 EAPI char        *ewk_view_selection_get(const Evas_Object *o);
663
664 /**
665  * Forwards a request of new Context Menu to WebCore.
666  *
667  * @param o View.
668  * @param ev Event data.
669  *
670  * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise.
671  */
672 EAPI Eina_Bool    ewk_view_context_menu_forward_event(Evas_Object *o, const Evas_Event_Mouse_Down *ev);
673
674 enum _Ewk_Editor_Command {
675     EWK_EDITOR_COMMAND_INSERT_IMAGE = 0,
676     EWK_EDITOR_COMMAND_INSERT_TEXT,
677     EWK_EDITOR_COMMAND_SELECT_NONE,
678     EWK_EDITOR_COMMAND_SELECT_ALL,
679     EWK_EDITOR_COMMAND_SELECT_PARAGRAPH,
680     EWK_EDITOR_COMMAND_SELECT_SENTENCE,
681     EWK_EDITOR_COMMAND_SELECT_LINE,
682     EWK_EDITOR_COMMAND_SELECT_WORD
683 };
684 typedef enum _Ewk_Editor_Command Ewk_Editor_Command;
685
686 /**
687  * Executes editor command.
688  *
689  * @param o view object to execute command.
690  * @param command editor command to be executed.
691  * @param value value to be passed into command.
692  *
693  * @return @c EINA_TRUE if operation was executed, @c EINA_FALSE otherwise.
694  */
695 EAPI Eina_Bool    ewk_view_execute_editor_command(Evas_Object *o, const Ewk_Editor_Command command, const char *value);
696
697 /**
698  * Changes currently selected item.
699  *
700  * Changes the option selected in select widget. This is called by browser
701  * whenever user has chosen a different item. Most likely after calling this, a
702  * call to ewk_view_popup_destroy might be made in order to close the popup.
703  *
704  * @param o View.
705  * @index Index of selected item.
706  *
707  */
708 EAPI void         ewk_view_popup_selected_set(Evas_Object *o, int index);
709
710 /**
711  * Destroy a previously created menu.
712  *
713  * Before destroying, it informs client that menu's data is ready to be
714  * destroyed by sending a "popup,willdelete" with a list of menu items. Then it
715  * removes any reference to menu inside webkit. It's safe to call this
716  * function either from inside webkit or from browser.
717  *
718  * @param o View.
719  *
720  * @returns EINA_TRUE in case menu was successfully destroyed or EINA_TRUE in
721  * case there wasn't any menu to be destroyed.
722  */
723 EAPI Eina_Bool    ewk_view_popup_destroy(Evas_Object *o);
724
725 /**
726  * Search the given text string in document.
727  *
728  * @param o view object where to search text.
729  * @param string reference string to search.
730  * @param case_sensitive if search should be case sensitive or not.
731  * @param forward if search is from cursor and on or backwards.
732  * @param wrap if search should wrap at end.
733  *
734  * @return @c EINA_TRUE if found, @c EINA_FALSE if not or failure.
735  */
736 EAPI Eina_Bool    ewk_view_text_search(const Evas_Object *o, const char *string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap);
737
738 /**
739  * Get if should highlight matches marked with ewk_view_text_matches_mark().
740  *
741  * @param o view object to query if matches are highlighted or not.
742  *
743  * @return @c EINA_TRUE if they are highlighted, @c EINA_FALSE otherwise.
744  */
745 EAPI unsigned int ewk_view_text_matches_mark(Evas_Object *o, const char *string, Eina_Bool case_sensitive, Eina_Bool highlight, unsigned int limit);
746
747 /**
748  * Reverses the effect of ewk_view_text_matches_mark()
749  *
750  * @param o view object where to search text.
751  *
752  * @return @c EINA_TRUE on success, @c EINA_FALSE for failure.
753  */
754 EAPI Eina_Bool    ewk_view_text_matches_unmark_all(Evas_Object *o);
755
756 /**
757  * Set if should highlight matches marked with ewk_view_text_matches_mark().
758  *
759  * @param o view object where to set if matches are highlighted or not.
760  * @param highlight if @c EINA_TRUE, matches will be highlighted.
761  *
762  * @return @c EINA_TRUE on success, @c EINA_FALSE for failure.
763  */
764 EAPI Eina_Bool    ewk_view_text_matches_highlight_set(Evas_Object *o, Eina_Bool highlight);
765
766 EAPI Eina_Bool    ewk_view_text_matches_highlight_get(const Evas_Object *o);
767
768 /**
769  * Get current load progress estimate from 0.0 to 1.0.
770  *
771  * @param o view object to get current progress.
772  *
773  * @return progres value from 0.0 to 1.0 or -1.0 on error.
774  */
775 EAPI double       ewk_view_load_progress_get(const Evas_Object *o);
776
777 /**
778  * Ask main frame to stop loading.
779  *
780  * @param o view object to stop loading.
781  *
782  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
783  *
784  * @see ewk_frame_stop()
785  */
786 EAPI Eina_Bool    ewk_view_stop(Evas_Object *o);
787
788 /**
789  * Ask main frame to reload current document.
790  *
791  * @param o view object to reload.
792  *
793  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
794  *
795  * @see ewk_frame_reload()
796  */
797 EAPI Eina_Bool    ewk_view_reload(Evas_Object *o);
798
799 /**
800  * Ask main frame to fully reload current document, using no caches.
801  *
802  * @param o view object to reload.
803  *
804  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
805  *
806  * @see ewk_frame_reload_full()
807  */
808 EAPI Eina_Bool    ewk_view_reload_full(Evas_Object *o);
809
810 /**
811  * Ask main frame to navigate back in history.
812  *
813  * @param o view object to navigate back.
814  *
815  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
816  *
817  * @see ewk_frame_back()
818  */
819 EAPI Eina_Bool    ewk_view_back(Evas_Object *o);
820
821 /**
822  * Ask main frame to navigate forward in history.
823  *
824  * @param o view object to navigate forward.
825  *
826  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
827  *
828  * @see ewk_frame_forward()
829  */
830 EAPI Eina_Bool    ewk_view_forward(Evas_Object *o);
831
832 /**
833  * Navigate back or forward in history.
834  *
835  * @param o view object to navigate.
836  * @param steps if positive navigates that amount forwards, if negative
837  *        does backwards.
838  *
839  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
840  *
841  * @see ewk_frame_navigate()
842  */
843 EAPI Eina_Bool    ewk_view_navigate(Evas_Object *o, int steps);
844
845 /**
846  * Check if it is possible to navigate backwards one item in history.
847  *
848  * @param o view object to check if backward navigation is possible.
849  *
850  * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise.
851  *
852  * @see ewk_view_navigate_possible()
853  */
854 EAPI Eina_Bool    ewk_view_back_possible(Evas_Object *o);
855
856 /**
857  * Check if it is possible to navigate forwards one item in history.
858  *
859  * @param o view object to check if forward navigation is possible.
860  *
861  * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise.
862  *
863  * @see ewk_view_navigate_possible()
864  */
865 EAPI Eina_Bool    ewk_view_forward_possible(Evas_Object *o);
866
867 /**
868  * Check if it is possible to navigate given @a steps in history.
869  *
870  * @param o view object to navigate.
871  * @param steps if positive navigates that amount forwards, if negative
872  *        does backwards.
873  *
874  * @return @c EINA_TRUE if possible, @c EINA_FALSE otherwise.
875  */
876 EAPI Eina_Bool    ewk_view_navigate_possible(Evas_Object *o, int steps);
877
878 /**
879  * Check if navigation history (back-forward lists) is enabled.
880  *
881  * @param o view object to check if navigation history is enabled.
882  *
883  * @return @c EINA_TRUE if view keeps history, @c EINA_FALSE otherwise.
884  */
885 EAPI Eina_Bool    ewk_view_history_enable_get(const Evas_Object *o);
886
887 /**
888  * Sets if navigation history (back-forward lists) is enabled.
889  *
890  * @param o view object to set if navigation history is enabled.
891  * @param enable @c EINA_TRUE if we want to enable navigation history;
892  * @c EINA_FALSE otherwise.
893  *
894  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
895  */
896 EAPI Eina_Bool    ewk_view_history_enable_set(Evas_Object *o, Eina_Bool enable);
897
898 /**
899  * Gets the history (back-forward list) associated with this view.
900  *
901  * @param o view object to get navigation history from.
902  *
903  * @return returns the history instance handle associated with this
904  *         view or @c 0 on errors (including when history is not
905  *         enabled with ewk_view_history_enable_set()). This instance
906  *         is unique for this view and thus multiple calls to this
907  *         function with the same view as parameter returns the same
908  *         handle. This handle is alive while view is alive, thus one
909  *         might want to listen for EVAS_CALLBACK_DEL on given view
910  *         (@a o) to know when to stop using returned handle.
911  *
912  * @see ewk_view_history_enable_set()
913  */
914 EAPI Ewk_History *ewk_view_history_get(const Evas_Object *o);
915
916 /**
917  * Get the current zoom level of main frame.
918  *
919  * @param o view object to query zoom level.
920  *
921  * @return current zoom level in use or -1.0 on error.
922  */
923 EAPI float        ewk_view_zoom_get(const Evas_Object *o);
924
925 /**
926  * Set the current zoom level of main frame.
927  *
928  * @param o view object to set zoom level.
929  * @param zoom new level to use.
930  * @param cx x of center coordinate
931  * @param cy y of center coordinate
932  *
933  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
934  */
935 EAPI Eina_Bool    ewk_view_zoom_set(Evas_Object *o, float zoom, Evas_Coord cx, Evas_Coord cy);
936
937 EAPI Eina_Bool    ewk_view_zoom_weak_smooth_scale_get(const Evas_Object *o);
938 EAPI void         ewk_view_zoom_weak_smooth_scale_set(Evas_Object *o, Eina_Bool smooth_scale);
939
940 /**
941  * Set the current zoom level of backing store, centered at given point.
942  *
943  * Unlike ewk_view_zoom_set(), this call do not ask WebKit to render
944  * at new size, but scale what is already rendered, being much faster
945  * but worse quality.
946  *
947  * Often one should use ewk_view_zoom_animated_set(), it will call the
948  * same machinery internally.
949  *
950  * @note this will set variables used by ewk_view_zoom_animated_set()
951  *       so sub-classes will not reset internal state on their
952  *       "calculate" phase. To unset those and enable sub-classes to
953  *       reset their internal state, call
954  *       ewk_view_zoom_animated_mark_stop(). Namely, this call will
955  *       set ewk_view_zoom_animated_mark_start() to actual webkit zoom
956  *       level, ewk_view_zoom_animated_mark_end() and
957  *       ewk_view_zoom_animated_mark_current() to given zoom level.
958  *
959  * @param o view object to set weak zoom level.
960  * @param zoom level to scale backing store.
961  * @param cx horizontal center offset, relative to object (w/2 is middle).
962  * @param cy vertical center offset, relative to object (h/2 is middle).
963  *
964  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
965  */
966 EAPI Eina_Bool    ewk_view_zoom_weak_set(Evas_Object *o, float zoom, Evas_Coord cx, Evas_Coord cy);
967
968 /**
969  * Mark internal zoom animation state to given zoom.
970  *
971  * This does not modify any actual zoom in WebKit or backing store,
972  * just set the Ewk_View_Smart_Data->animated_zoom.zoom.start so
973  * sub-classes will know they should not reset their internal state.
974  *
975  * @param o view object to change value.
976  * @param zoom new start value.
977  *
978  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
979  *
980  * @see ewk_view_zoom_animated_set()
981  * @see ewk_view_zoom_weak_set()
982  * @see ewk_view_zoom_animated_mark_stop()
983  * @see ewk_view_zoom_animated_mark_end()
984  * @see ewk_view_zoom_animated_mark_current()
985  */
986 EAPI Eina_Bool    ewk_view_zoom_animated_mark_start(Evas_Object *o, float zoom);
987
988 /**
989  * Mark internal zoom animation state to given zoom.
990  *
991  * This does not modify any actual zoom in WebKit or backing store,
992  * just set the Ewk_View_Smart_Data->animated_zoom.zoom.end so
993  * sub-classes will know they should not reset their internal state.
994  *
995  * @param o view object to change value.
996  * @param zoom new end value.
997  *
998  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
999  *
1000  * @see ewk_view_zoom_animated_set()
1001  * @see ewk_view_zoom_weak_set()
1002  * @see ewk_view_zoom_animated_mark_stop()
1003  * @see ewk_view_zoom_animated_mark_start()
1004  * @see ewk_view_zoom_animated_mark_current()
1005  */
1006 EAPI Eina_Bool    ewk_view_zoom_animated_mark_end(Evas_Object *o, float zoom);
1007
1008 /**
1009  * Mark internal zoom animation state to given zoom.
1010  *
1011  * This does not modify any actual zoom in WebKit or backing store,
1012  * just set the Ewk_View_Smart_Data->animated_zoom.zoom.current so
1013  * sub-classes will know they should not reset their internal state.
1014  *
1015  * @param o view object to change value.
1016  * @param zoom new current value.
1017  *
1018  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
1019  *
1020  * @see ewk_view_zoom_animated_set()
1021  * @see ewk_view_zoom_weak_set()
1022  * @see ewk_view_zoom_animated_mark_stop()
1023  * @see ewk_view_zoom_animated_mark_start()
1024  * @see ewk_view_zoom_animated_mark_end()
1025  */
1026 EAPI Eina_Bool    ewk_view_zoom_animated_mark_current(Evas_Object *o, float zoom);
1027
1028 /**
1029  * Unmark internal zoom animation state.
1030  *
1031  * This zero all start, end and current values.
1032  *
1033  * @param o view object to mark as animated is stopped.
1034  *
1035  * @see ewk_view_zoom_animated_mark_start()
1036  * @see ewk_view_zoom_animated_mark_end()
1037  * @see ewk_view_zoom_animated_mark_current()
1038  * @see ewk_view_zoom_weak_set()
1039  */
1040 EAPI Eina_Bool    ewk_view_zoom_animated_mark_stop(Evas_Object *o);
1041
1042 /**
1043  * Set the current zoom level while animating.
1044  *
1045  * If the view was already animating to another zoom, it will start
1046  * from current point to the next provided zoom (@a zoom parameter)
1047  * and duration (@a duration parameter).
1048  *
1049  * This is the recommended way to do transitions from one level to
1050  * another. However, one may wish to do those from outside, in that
1051  * case use ewk_view_zoom_weak_set() and later control intermediate
1052  * states with ewk_view_zoom_animated_mark_current(),
1053  * ewk_view_zoom_animated_mark_end() and
1054  * ewk_view_zoom_animated_mark_stop().
1055  *
1056  * @param o view object to animate.
1057  * @param zoom final zoom level to use.
1058  * @param duration time in seconds the animation should take.
1059  * @param cx offset inside object that defines zoom center. 0 is left side.
1060  * @param cy offset inside object that defines zoom center. 0 is top side.
1061  * @return @c EINA_TRUE if animation will be started, @c EINA_FALSE if not
1062  *            because zoom is too small/big.
1063  */
1064 EAPI Eina_Bool    ewk_view_zoom_animated_set(Evas_Object *o, float zoom, float duration, Evas_Coord cx, Evas_Coord cy);
1065
1066 /**
1067  * Query if zoom level just applies to text and not other elements.
1068  *
1069  * @param o view to query setting.
1070  *
1071  * @return @c EINA_TRUE if just text are scaled, @c EINA_FALSE otherwise.
1072  */
1073 EAPI Eina_Bool    ewk_view_zoom_text_only_get(const Evas_Object *o);
1074
1075 /**
1076  * Set if zoom level just applies to text and not other elements.
1077  *
1078  * @param o view to change setting.
1079  * @param setting @c EINA_TRUE if zoom should just be applied to text.
1080  *
1081  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
1082  */
1083 EAPI Eina_Bool    ewk_view_zoom_text_only_set(Evas_Object *o, Eina_Bool setting);
1084
1085 /**
1086  * Hint engine to pre-render region.
1087  *
1088  * Engines and backing store might be able to pre-render regions in
1089  * order to speed up zooming or scrolling to that region. Not all
1090  * engines might implement that and they will return @c EINA_FALSE
1091  * in that case.
1092  *
1093  * The given region is a hint. Engines might do bigger or smaller area
1094  * that covers that region. Pre-render might not be immediate, it may
1095  * be postponed to a thread, operated cooperatively in the main loop
1096  * and may be even ignored or cancelled afterwards.
1097  *
1098  * Multiple requests might be queued by engines. One can clear/forget
1099  * about them with ewk_view_pre_render_cancel().
1100  *
1101  * @param o view to ask pre-render of given region.
1102  * @param x absolute coordinate (0=left) to pre-render at zoom.
1103  * @param y absolute coordinate (0=top) to pre-render at zoom.
1104  * @param w width to pre-render starting from @a x at zoom.
1105  * @param h height to pre-render starting from @a y at zoom.
1106  * @param zoom desired zoom.
1107  *
1108  * @return @c EINA_TRUE if request was accepted, @c EINA_FALSE
1109  *         otherwise (errors, pre-render not supported, etc).
1110  *
1111  * @see ewk_view_pre_render_cancel()
1112  */
1113 EAPI Eina_Bool    ewk_view_pre_render_region(Evas_Object *o, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, float zoom);
1114
1115 /**
1116  * Hint engine to pre-render region, given n extra cols/rows
1117  *
1118  * This is an alternative method to ewk_view_pre_render_region(). It does not
1119  * make sense in all engines and therefore it might not be implemented at all.
1120  *
1121  * It's only useful if engine divide the area being rendered in smaller tiles,
1122  * forming a grid. Then, browser could call this function to pre-render @param n
1123  * rows/cols involving the current viewport.
1124  *
1125  * @param o view to ask pre-render on.
1126  * @param n number of cols/rows that must be part of the region pre-rendered
1127  *
1128  * @see ewk_view_pre_render_region()
1129  */
1130 EAPI Eina_Bool    ewk_view_pre_render_relative_radius(Evas_Object *o, unsigned int n);
1131
1132 /**
1133  * Cancel (clear) previous pre-render requests.
1134  *
1135  * @param o view to clear pre-render requests.
1136  */
1137 EAPI void         ewk_view_pre_render_cancel(Evas_Object *o);
1138
1139 /**
1140   * Enable processing of update requests.
1141   *
1142   * @param o view to enable rendering.
1143   *
1144   * @return @c EINA_TRUE if render was enabled, @c EINA_FALSE
1145             otherwise (errors, rendering suspension not supported).
1146   */
1147 EAPI Eina_Bool    ewk_view_enable_render(const Evas_Object *o);
1148
1149 /**
1150   * Disable processing of update requests.
1151   *
1152   * @param o view to disable rendering.
1153   *
1154   * @return @c EINA_TRUE if render was disabled, @c EINA_FALSE
1155             otherwise (errors, rendering suspension not supported).
1156   */
1157 EAPI Eina_Bool    ewk_view_disable_render(const Evas_Object *o);
1158
1159 /**
1160  * Get input method hints
1161  *
1162  * @param o View.
1163  *
1164  * @return input method hints
1165  */
1166 EAPI unsigned int ewk_view_imh_get(Evas_Object *o);
1167
1168 /* settings */
1169 EAPI const char  *ewk_view_setting_user_agent_get(const Evas_Object *o);
1170 EAPI Eina_Bool    ewk_view_setting_user_agent_set(Evas_Object *o, const char *user_agent);
1171
1172 EAPI Eina_Bool    ewk_view_setting_auto_load_images_get(const Evas_Object *o);
1173 EAPI Eina_Bool    ewk_view_setting_auto_load_images_set(Evas_Object *o, Eina_Bool automatic);
1174
1175 EAPI Eina_Bool    ewk_view_setting_auto_shrink_images_get(const Evas_Object *o);
1176 EAPI Eina_Bool    ewk_view_setting_auto_shrink_images_set(Evas_Object *o, Eina_Bool automatic);
1177
1178 /**
1179  * Gets if view can be resized automatically.
1180  *
1181  * @param o view to check status
1182  *
1183  * @return EINA_TRUE if view can be resized, EINA_FALSE
1184  *         otherwise (errors, cannot be resized).
1185  */
1186 EAPI Eina_Bool    ewk_view_setting_enable_auto_resize_window_get(const Evas_Object *o);
1187
1188 /**
1189  * Sets if view can be resized automatically.
1190  *
1191  * @param o View.
1192  * @param resizable @c EINA_TRUE if we want to resize automatically;
1193  * @c EINA_FALSE otherwise. It defaults to @c EINA_TRUE
1194  *
1195  * @return EINA_TRUE if auto_resize_window status set, EINA_FALSE
1196  *         otherwise (errors).
1197  */
1198 EAPI Eina_Bool    ewk_view_setting_enable_auto_resize_window_set(Evas_Object *o, Eina_Bool resizable);
1199 EAPI Eina_Bool    ewk_view_setting_enable_scripts_get(const Evas_Object *o);
1200 EAPI Eina_Bool    ewk_view_setting_enable_scripts_set(Evas_Object *o, Eina_Bool enable);
1201
1202 EAPI Eina_Bool    ewk_view_setting_enable_plugins_get(const Evas_Object *o);
1203 EAPI Eina_Bool    ewk_view_setting_enable_plugins_set(Evas_Object *o, Eina_Bool enable);
1204
1205 /**
1206  * Get status of frame flattening.
1207  *
1208  * @param o view to check status
1209  *
1210  * @return EINA_TRUE if flattening is enabled, EINA_FALSE
1211  *         otherwise (errors, flattening disabled).
1212  */
1213 EAPI Eina_Bool    ewk_view_setting_enable_frame_flattening_get(const Evas_Object* o);
1214
1215 /**
1216  * Set frame flattening.
1217  *
1218  * @param o view to set flattening
1219  *
1220  * @return EINA_TRUE if flattening status set, EINA_FALSE
1221  *         otherwise (errors).
1222  */
1223 EAPI Eina_Bool    ewk_view_setting_enable_frame_flattening_set(Evas_Object* o, Eina_Bool enable);
1224
1225 EAPI Eina_Bool    ewk_view_setting_scripts_window_open_get(const Evas_Object *o);
1226 EAPI Eina_Bool    ewk_view_setting_scripts_window_open_set(Evas_Object *o, Eina_Bool allow);
1227
1228 EAPI Eina_Bool    ewk_view_setting_resizable_textareas_get(const Evas_Object *o);
1229 EAPI Eina_Bool    ewk_view_setting_resizable_textareas_set(Evas_Object *o, Eina_Bool enable);
1230
1231 EAPI const char  *ewk_view_setting_user_stylesheet_get(const Evas_Object *o);
1232 EAPI Eina_Bool    ewk_view_setting_user_stylesheet_set(Evas_Object *o, const char *uri);
1233
1234 EAPI Eina_Bool    ewk_view_setting_private_browsing_get(const Evas_Object *o);
1235 EAPI Eina_Bool    ewk_view_setting_private_browsing_set(Evas_Object *o, Eina_Bool enable);
1236 EAPI Eina_Bool    ewk_view_setting_offline_app_cache_get(const Evas_Object *o);
1237 EAPI Eina_Bool    ewk_view_setting_offline_app_cache_set(Evas_Object *o, Eina_Bool enable);
1238
1239 EAPI Eina_Bool    ewk_view_setting_caret_browsing_get(const Evas_Object *o);
1240 EAPI Eina_Bool    ewk_view_setting_caret_browsing_set(Evas_Object *o, Eina_Bool enable);
1241
1242 /**
1243  * Get current encoding of this View.
1244  *
1245  * @param o View.
1246  *
1247  * @return A pointer to an eina_strinshare containing the current custom
1248  * encoding for View object @param o, or @c 0 if it's not set.
1249  */
1250 EAPI const char  *ewk_view_setting_encoding_custom_get(const Evas_Object *o);
1251
1252 /**
1253  * Set encoding of this View and reload page.
1254  *
1255  * @param o View.
1256  * @param encoding The new encoding or @c 0 to restore the default encoding.
1257  *
1258  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
1259  */
1260 EAPI Eina_Bool    ewk_view_setting_encoding_custom_set(Evas_Object *o, const char *encoding);
1261 EAPI const char  *ewk_view_setting_encoding_default_get(const Evas_Object *o);
1262 EAPI Eina_Bool    ewk_view_setting_encoding_default_set(Evas_Object *o, const char *encoding);
1263
1264 EAPI int          ewk_view_setting_font_minimum_size_get(const Evas_Object *o);
1265 EAPI Eina_Bool    ewk_view_setting_font_minimum_size_set(Evas_Object *o, int size);
1266 EAPI int          ewk_view_setting_font_minimum_logical_size_get(const Evas_Object *o);
1267 EAPI Eina_Bool    ewk_view_setting_font_minimum_logical_size_set(Evas_Object *o, int size);
1268 EAPI int          ewk_view_setting_font_default_size_get(const Evas_Object *o);
1269 EAPI Eina_Bool    ewk_view_setting_font_default_size_set(Evas_Object *o, int size);
1270 EAPI int          ewk_view_setting_font_monospace_size_get(const Evas_Object *o);
1271 EAPI Eina_Bool    ewk_view_setting_font_monospace_size_set(Evas_Object *o, int size);
1272
1273 EAPI const char  *ewk_view_setting_font_standard_get(const Evas_Object *o);
1274 EAPI Eina_Bool    ewk_view_setting_font_standard_set(Evas_Object *o, const char *family);
1275
1276 EAPI const char  *ewk_view_setting_font_cursive_get(const Evas_Object *o);
1277 EAPI Eina_Bool    ewk_view_setting_font_cursive_set(Evas_Object *o, const char *family);
1278
1279 EAPI const char  *ewk_view_setting_font_monospace_get(const Evas_Object *o);
1280 EAPI Eina_Bool    ewk_view_setting_font_monospace_set(Evas_Object *o, const char *family);
1281
1282 EAPI const char  *ewk_view_setting_font_fantasy_get(const Evas_Object *o);
1283 EAPI Eina_Bool    ewk_view_setting_font_fantasy_set(Evas_Object *o, const char *family);
1284
1285 EAPI const char  *ewk_view_setting_font_serif_get(const Evas_Object *o);
1286 EAPI Eina_Bool    ewk_view_setting_font_serif_set(Evas_Object *o, const char *family);
1287
1288 EAPI const char  *ewk_view_setting_font_sans_serif_get(const Evas_Object *o);
1289 EAPI Eina_Bool    ewk_view_setting_font_sans_serif_set(Evas_Object *o, const char *family);
1290
1291 /**
1292  * Gets if the spatial naviagtion is enabled.
1293  *
1294  * @param o view object to get spatial navigation setting.
1295  * @return @c EINA_TRUE if spatial navigation is enabled, @c EINA_FALSE if not or on errors.
1296  */
1297 EAPI Eina_Bool    ewk_view_setting_spatial_navigation_get(Evas_Object *o);
1298
1299 /**
1300  * Sets the spatial navigation.
1301  *
1302  * @param o view object to set spatial navigation setting.
1303  * @return @c EINA_TRUE on success and @c EINA_FALSE on failure
1304  */
1305 EAPI Eina_Bool    ewk_view_setting_spatial_navigation_set(Evas_Object *o, Eina_Bool enable);
1306
1307 /**
1308  * Gets if the local storage is enabled.
1309  *
1310  * @param o view object to get if local storage is enabled.
1311  * @return @c EINA_TRUE if local storage is enabled, @c EINA_FALSE if not or on errors.
1312  */
1313 EAPI Eina_Bool    ewk_view_setting_local_storage_get(Evas_Object *o);
1314
1315 /**
1316  * Sets the local storage of HTML5.
1317  *
1318  * @param o view object to set if local storage is enabled.
1319  * @return @c EINA_TRUE on success and @c EINA_FALSE on failure
1320  */
1321 EAPI Eina_Bool    ewk_view_setting_local_storage_set(Evas_Object *o, Eina_Bool enable);
1322
1323 /**
1324  * Gets the local storage database path.
1325  *
1326  * @param o view object to get the local storage database path.
1327  * @return the local storage database path.
1328  */
1329 EAPI const char  *ewk_view_setting_local_storage_database_path_get(const Evas_Object *o);
1330
1331 /**
1332  * Sets the local storage database path.
1333  *
1334  * @param o view object to set the local storage database path.
1335  * @return @c EINA_TRUE on success and @c EINA_FALSE on failure
1336  */
1337 EAPI Eina_Bool    ewk_view_setting_local_storage_database_path_set(Evas_Object *o, const char *path);
1338
1339 /**
1340  * Gets if the page cache is enabled.
1341  *
1342  * @param o view object to set if page cache is enabled.
1343  * @return @c EINA_TRUE if page cache is enabled, @c EINA_FALSE if not.
1344  */
1345 EAPI Eina_Bool    ewk_view_setting_page_cache_get(Evas_Object *o);
1346
1347 /**
1348  * Sets the page cache.
1349  *
1350  * @param o view object to set if page cache is enabled.
1351  * @return @c EINA_TRUE on success and @c EINA_FALSE on failure
1352  */
1353 EAPI Eina_Bool    ewk_view_setting_page_cache_set(Evas_Object *o, Eina_Bool enable);
1354
1355 /**
1356  * Gets if the encoding detector is enabled.
1357  *
1358  * @param o view object to get if encoding detector is enabled.
1359  * @return @c EINA_TRUE if encoding detector is enabled, @c EINA_FALSE if not or on errors.
1360  */
1361 EAPI Eina_Bool    ewk_view_setting_encoding_detector_get(Evas_Object *o);
1362
1363 /**
1364  * Sets the encoding detector.
1365  *
1366  * @param o view object to set if encoding detector is enabled.
1367  * @return @c EINA_TRUE on success and @c EINA_FALSE on failure
1368  */
1369 EAPI Eina_Bool    ewk_view_setting_encoding_detector_set(Evas_Object *o, Eina_Bool enable);
1370
1371 /**
1372  * Returns whether developer extensions are enabled for the given view.
1373  *
1374  * Currently, this is used to know whether the Web Inspector is enabled for a
1375  * given view.
1376  *
1377  * @param o view object to check.
1378  *
1379  * @return @c EINA_TRUE if developer extensions are enabled, @c EINA_FALSE
1380  *         otherwise.
1381  */
1382 EAPI Eina_Bool    ewk_view_setting_enable_developer_extras_get(Evas_Object *o);
1383
1384 /**
1385  * Enables/disables developer extensions for the given view.
1386  *
1387  * This currently controls whether the Web Inspector should be enabled.
1388  *
1389  * @param o The view whose setting will be changed.
1390  * @param enable @c EINA_TRUE to enable developer extras, @c EINA_FALSE to
1391  *               disable.
1392  *
1393  * @return @c EINA_TRUE on success, @EINA_FALSE on failure.
1394  */
1395 EAPI Eina_Bool    ewk_view_setting_enable_developer_extras_set(Evas_Object *o, Eina_Bool enable);
1396
1397 /* to be used by subclass implementations */
1398 /**
1399  * Similar to evas_object_smart_data_get(), but does type checking.
1400  *
1401  * @param o view object to query internal data.
1402  * @return internal data or @c 0 on errors (ie: incorrect type of @a o).
1403  */
1404 EAPI Ewk_View_Smart_Data *ewk_view_smart_data_get(const Evas_Object *o);
1405
1406 EAPI void ewk_view_scrolls_process(Ewk_View_Smart_Data *sd);
1407
1408 /**
1409  * Structure that keeps paint context.
1410  *
1411  * @note this is not for general use but just for subclasses that want
1412  *       to define their own backing store.
1413  */
1414 typedef struct _Ewk_View_Paint_Context Ewk_View_Paint_Context;
1415
1416 /**
1417  * Create a new paint context using the view as source and cairo as output.
1418  *
1419  * @param priv private handle pointer of the view to use as paint source.
1420  * @param cr cairo context to use as paint destination. A new
1421  *        reference is taken, so it's safe to call cairo_destroy()
1422  *        after this function returns.
1423  *
1424  * @return newly allocated instance or @c 0 on errors.
1425  *
1426  * @note this is not for general use but just for subclasses that want
1427  *       to define their own backing store.
1428  */
1429 EAPI Ewk_View_Paint_Context *ewk_view_paint_context_new(Ewk_View_Private_Data *priv, cairo_t *cr);
1430
1431 /**
1432  * Destroy previously created paint context.
1433  *
1434  * @param ctxt paint context to destroy. Must @b not be @c 0.
1435  *
1436  * @note this is not for general use but just for subclasses that want
1437  *       to define their own backing store.
1438  */
1439 EAPI void ewk_view_paint_context_free(Ewk_View_Paint_Context *ctxt);
1440
1441 /**
1442  * Save (push to stack) paint context status.
1443  *
1444  * @param ctxt paint context to save. Must @b not be @c 0.
1445  *
1446  * @see ewk_view_paint_context_restore()
1447  *
1448  * @note this is not for general use but just for subclasses that want
1449  *       to define their own backing store.
1450  */
1451 EAPI void ewk_view_paint_context_save(Ewk_View_Paint_Context *ctxt);
1452
1453 /**
1454  * Restore (pop from stack) paint context status.
1455  *
1456  * @param ctxt paint context to restore. Must @b not be @c 0.
1457  *
1458  * @see ewk_view_paint_context_save()
1459  *
1460  * @note this is not for general use but just for subclasses that want
1461  *       to define their own backing store.
1462  */
1463 EAPI void ewk_view_paint_context_restore(Ewk_View_Paint_Context *ctxt);
1464
1465 /**
1466  * Clip paint context drawings to given area.
1467  *
1468  * @param ctxt paint context to clip. Must @b not be @c 0.
1469  * @param area clip area to use.
1470  *
1471  * @see ewk_view_paint_context_save()
1472  * @see ewk_view_paint_context_restore()
1473  *
1474  * @note this is not for general use but just for subclasses that want
1475  *       to define their own backing store.
1476  */
1477 EAPI void ewk_view_paint_context_clip(Ewk_View_Paint_Context *ctxt, const Eina_Rectangle *area);
1478
1479 /**
1480  * Paint using context using given area.
1481  *
1482  * @param ctxt paint context to paint. Must @b not be @c 0.
1483  * @param area paint area to use. Coordinates are relative to current viewport,
1484  *        thus "scrolled".
1485  *
1486  * @note one may use cairo functions on the cairo context to
1487  *       translate, scale or any modification that may fit his desires.
1488  *
1489  * @see ewk_view_paint_context_clip()
1490  * @see ewk_view_paint_context_paint_contents()
1491  *
1492  * @note this is not for general use but just for subclasses that want
1493  *       to define their own backing store.
1494  */
1495 EAPI void ewk_view_paint_context_paint(Ewk_View_Paint_Context *ctxt, const Eina_Rectangle *area);
1496
1497 /**
1498  * Paint just contents using context using given area.
1499  *
1500  * Unlike ewk_view_paint_context_paint(), this function paint just
1501  * bare contents and ignores any scrolling, scrollbars and extras. It
1502  * will walk the rendering tree and paint contents inside the given
1503  * area to the cairo context specified in @a ctxt.
1504  *
1505  * @param ctxt paint context to paint. Must @b not be @c 0.
1506  * @param area paint area to use. Coordinates are absolute to page.
1507  *
1508  * @note one may use cairo functions on the cairo context to
1509  *       translate, scale or any modification that may fit his desires.
1510  *
1511  * @see ewk_view_paint_context_clip()
1512  * @see ewk_view_paint_context_paint()
1513  *
1514  * @note this is not for general use but just for subclasses that want
1515  *       to define their own backing store.
1516  */
1517 EAPI void ewk_view_paint_context_paint_contents(Ewk_View_Paint_Context *ctxt, const Eina_Rectangle *area);
1518
1519 /**
1520  * Scale the contents by the given factors.
1521  *
1522  * This function applies a scaling transformation using Cairo.
1523  *
1524  * @param ctxt    paint context to paint. Must @b not be @c 0.
1525  * @param scale_x scale factor for the X dimension.
1526  * @param scale_y scale factor for the Y dimension.
1527  */
1528 EAPI void ewk_view_paint_context_scale(Ewk_View_Paint_Context *ctxt, float scale_x, float scale_y);
1529
1530 /**
1531  * Performs a translation of the origin coordinates.
1532  *
1533  * This function moves the origin coordinates by @p x and @p y pixels.
1534  *
1535  * @param ctxt paint context to paint. Must @b not be @c 0.
1536  * @param x    amount of pixels to translate in the X dimension.
1537  * @param y    amount of pixels to translate in the Y dimension.
1538  */
1539 EAPI void ewk_view_paint_context_translate(Ewk_View_Paint_Context *ctxt, float x, float y);
1540
1541 /**
1542  * Paint using given graphics context the given area.
1543  *
1544  * This uses viewport relative area and will also handle scrollbars
1545  * and other extra elements. See ewk_view_paint_contents() for the
1546  * alternative function.
1547  *
1548  * @param priv private handle pointer of view to use as paint source.
1549  * @param cr cairo context to use as paint destination. Its state will
1550  *        be saved before operation and restored afterwards.
1551  * @param area viewport relative geometry to paint.
1552  *
1553  * @return @c EINA_TRUE on success and @c EINA_FALSE on failure, like
1554  *         incorrect parameters.
1555  *
1556  * @note this is an easy to use version, but internal structures are
1557  *       always created, then graphics context is clipped, then
1558  *       painted, restored and destroyed. This might not be optimum,
1559  *       so using #Ewk_View_Paint_Context may be a better solutions
1560  *       for large number of operations.
1561  *
1562  * @see ewk_view_paint_contents()
1563  * @see ewk_view_paint_context_paint()
1564  *
1565  * @note this is not for general use but just for subclasses that want
1566  *       to define their own backing store.
1567  */
1568 EAPI Eina_Bool ewk_view_paint(Ewk_View_Private_Data *priv, cairo_t *cr, const Eina_Rectangle *area);
1569
1570 /**
1571  * Paint just contents using given graphics context the given area.
1572  *
1573  * This uses absolute coordinates for area and will just handle
1574  * contents, no scrollbars or extras. See ewk_view_paint() for the
1575  * alternative solution.
1576  *
1577  * @param priv private handle pointer of view to use as paint source.
1578  * @param cr cairo context to use as paint destination. Its state will
1579  *        be saved before operation and restored afterwards.
1580  * @param area absolute geometry to paint.
1581  *
1582  * @return @c EINA_TRUE on success and @c EINA_FALSE on failure, like
1583  *         incorrect parameters.
1584  *
1585  * @note this is an easy to use version, but internal structures are
1586  *       always created, then graphics context is clipped, then
1587  *       painted, restored and destroyed. This might not be optimum,
1588  *       so using #Ewk_View_Paint_Context may be a better solutions
1589  *       for large number of operations.
1590  *
1591  * @see ewk_view_paint()
1592  * @see ewk_view_paint_context_paint_contents()
1593  *
1594  * @note this is not for general use but just for subclasses that want
1595  *       to define their own backing store.
1596  */
1597 EAPI Eina_Bool ewk_view_paint_contents(Ewk_View_Private_Data *priv, cairo_t *cr, const Eina_Rectangle *area);
1598
1599 /**
1600  * Gets attributes of viewport meta tag.
1601  *
1602  * @param o view.
1603  * @param w width.
1604  * @param h height.
1605  * @param init_scale initial Scale value.
1606  * @param max_scale maximum Scale value.
1607  * @param min_scale minimum Scale value.
1608  * @param device_pixel_ratio value.
1609  * @param user_scalable user Scalable value.
1610  */
1611 EAPI void ewk_view_viewport_attributes_get(Evas_Object *o, float *w, float *h, float *init_scale, float *max_scale, float *min_scale, float *device_pixel_ratio , Eina_Bool *user_scalable);
1612
1613 /**
1614  * Sets the zoom range.
1615  *
1616  * @param o view.
1617  * @param min_scale minimum value of zoom range.
1618  * @param max_scale maximum value of zoom range.
1619  *
1620  * @return @c EINA_TRUE if zoom range is changed, @c EINA_FALSE if not or failure.
1621  */
1622 EAPI Eina_Bool ewk_view_zoom_range_set(Evas_Object *o, float min_scale, float max_scale);
1623
1624 /**
1625  * Gets the minimum value of zoom range.
1626  *
1627  * @param o view.
1628  *
1629  * @return minimum value of zoom range, or @c -1.0 on failure.
1630  */
1631 EAPI float ewk_view_zoom_range_min_get(Evas_Object *o);
1632
1633 /**
1634  * Gets the maximum value of zoom range.
1635  *
1636  * @param o view.
1637  *
1638  * @return maximum value of zoom range, or @c -1.0 on failure.
1639  */
1640 EAPI float ewk_view_zoom_range_max_get(Evas_Object *o);
1641
1642 /**
1643  * Sets if zoom is enabled.
1644  *
1645  * @param o view.
1646  * @param user_scalable boolean pointer in which to enable zoom. It defaults
1647  * to @c EINA_TRUE.
1648  *
1649  * @return @c EINA_TRUE on success, or @c EINA_FALSE on failure
1650  */
1651 EAPI Eina_Bool ewk_view_user_scalable_set(Evas_Object *o, Eina_Bool user_scalable);
1652
1653 /**
1654  * Gets if zoom is enabled.
1655  *
1656  * @param o view.
1657  * @param user_scalable where to return the current user scalable value.
1658  *
1659  * @return @c EINA_TRUE if zoom is enabled, @c EINA_FALSE if not or on failure.
1660  */
1661 EAPI Eina_Bool ewk_view_user_scalable_get(Evas_Object *o);
1662
1663 /**
1664  * Gets device pixel ratio value.
1665  *
1666  * @param o view.
1667  * @param user_scalable where to return the current user scalable value.
1668  *
1669  * @return device pixel ratio or @c -1.0 on failure.
1670  */
1671 EAPI float ewk_view_device_pixel_ratio_get(Evas_Object *o);
1672
1673 /**
1674  * Sets view mode. The view-mode media feature describes the mode in which the
1675  * Web application is being shown as a running application.
1676  *
1677  * @param o view object to change view mode.
1678  * @param view_mode page view mode to be set
1679  *
1680  * @return @c EINA_TRUE if view mode is set as view_mode, @c EINA_FALSE otherwise.
1681  */
1682 EAPI Eina_Bool ewk_view_mode_set(Evas_Object *o, Ewk_View_Mode view_mode);
1683
1684 /**
1685  * Gets view mode. The view-mode media feature describes the mode in which the
1686  * Web application is being shown as a running application.
1687  *
1688  * @param o view object to query view mode.
1689  *
1690  * @return enum value of Ewk_View_Mode that indicates current view mode.
1691  */
1692 EAPI Ewk_View_Mode ewk_view_mode_get(Evas_Object *o);
1693 #ifdef __cplusplus
1694 }
1695 #endif
1696 #endif // ewk_view_h