Add wm_rotation infrastructure support
[platform/upstream/ecore.git] / src / lib / ecore_evas / Ecore_Evas.h
1 #ifndef _ECORE_EVAS_H
2 #define _ECORE_EVAS_H
3
4 #include <Evas.h>
5 #include <Ecore_Getopt.h>
6 #include <Ecore_Input.h>
7
8 #ifdef EAPI
9 # undef EAPI
10 #endif
11
12 #ifdef _WIN32
13 # ifdef EFL_ECORE_EVAS_BUILD
14 #  ifdef DLL_EXPORT
15 #   define EAPI __declspec(dllexport)
16 #  else
17 #   define EAPI
18 #  endif /* ! DLL_EXPORT */
19 # else
20 #  define EAPI __declspec(dllimport)
21 # endif /* ! EFL_ECORE_EVAS_BUILD */
22 #else
23 # ifdef __GNUC__
24 #  if __GNUC__ >= 4
25 #   define EAPI __attribute__ ((visibility("default")))
26 #  else
27 #   define EAPI
28 #  endif
29 # else
30 #  define EAPI
31 # endif
32 #endif /* ! _WIN32 */
33
34 /**
35  * @file Ecore_Evas.h
36  * @brief Evas wrapper functions
37  *
38  * The following is a list of example that partially exemplify Ecore_Evas's API:
39  * @li @ref ecore_evas_callbacks_example_c
40  * @li @ref ecore_evas_object_example_c
41  * @li @ref ecore_evas_basics_example_c
42  * @li @ref Ecore_Evas_Window_Sizes_Example_c
43  * @li @ref Ecore_Evas_Buffer_Example_01_c
44  * @li @ref Ecore_Evas_Buffer_Example_02_c
45  */
46
47 /* FIXME:
48  * to do soon:
49  * - iconfication api needs to work
50  * - maximization api needs to work
51  * - document all calls
52  *
53  * later:
54  * - buffer back-end that renders to an evas_image_object ???
55  * - qt back-end ???
56  * - dfb back-end ??? (dfb's threads make this REALLY HARD)
57  */
58
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62
63 /**
64  * @defgroup Ecore_Evas_Group Ecore_Evas wrapper/helper set of functions
65  *
66  * Ecore evas is a set of functions that makes it easy to tie together ecore's
67  * main loop and input handling to evas. As such it's a natural base for EFL
68  * applications. While this combination makes it easy to create the basic
69  * aspects all applications need, for normal applications(ones with buttons,
70  * checkboxes and layouts) one should consider using Elementary.
71  *
72  * Ecore evas is extremely well suited for applications that are not based on
73  * widgets. It has a main loop that delivers events, does basic window handling
74  * and leaves all of the drawing up to the user. This works very well if used
75  * in conjunction with Edje or if doing custom drawing as, for example, is done
76  * in games.
77  *
78  * This is a list of examples of these functions:
79  * @li @ref ecore_evas_basics_example_c
80  * @li @ref ecore_evas_object_example_c
81  * @li @ref ecore_evas_callbacks_example_c
82  * @li @ref Ecore_Evas_Window_Sizes_Example_c
83  * @li @ref Ecore_Evas_Buffer_Example_01_c
84  * @li @ref Ecore_Evas_Buffer_Example_02_c
85  *
86  * @{
87  */
88
89 /* these are dummy and just tell u what API levels ecore_evas supports - not if
90  * the actual support is compiled in. you need to query for that separately.
91  */
92 #define HAVE_ECORE_EVAS_X 1
93 #define HAVE_ECORE_EVAS_FB 1
94 #define HAVE_ECORE_EVAS_X11_GL 1
95 #define HAVE_ECORE_EVAS_X11_16 1
96 #define HAVE_ECORE_EVAS_DIRECTFB 1
97 #define HAVE_ECORE_EVAS_WIN32 1
98 #define HAVE_ECORE_EVAS_COCOA 1
99 #define HAVE_ECORE_EVAS_SDL 1
100 #define HAVE_ECORE_EVAS_WINCE 1
101 #define HAVE_ECORE_EVAS_EWS 1
102 #define HAVE_ECORE_EVAS_PSL1GHT 1
103 #define HAVE_ECORE_EVAS_WAYLAND_SHM 1
104 #define HAVE_ECORE_EVAS_WAYLAND_EGL 1
105
106 typedef enum _Ecore_Evas_Engine_Type
107 {
108    ECORE_EVAS_ENGINE_SOFTWARE_BUFFER,
109    ECORE_EVAS_ENGINE_SOFTWARE_XLIB,
110    ECORE_EVAS_ENGINE_XRENDER_X11,
111    ECORE_EVAS_ENGINE_OPENGL_X11,
112    ECORE_EVAS_ENGINE_SOFTWARE_XCB,
113    ECORE_EVAS_ENGINE_XRENDER_XCB,
114    ECORE_EVAS_ENGINE_SOFTWARE_GDI,
115    ECORE_EVAS_ENGINE_SOFTWARE_DDRAW,
116    ECORE_EVAS_ENGINE_DIRECT3D,
117    ECORE_EVAS_ENGINE_OPENGL_GLEW,
118    ECORE_EVAS_ENGINE_OPENGL_COCOA,
119    ECORE_EVAS_ENGINE_SOFTWARE_SDL,
120    ECORE_EVAS_ENGINE_DIRECTFB,
121    ECORE_EVAS_ENGINE_SOFTWARE_FB,
122    ECORE_EVAS_ENGINE_SOFTWARE_8_X11,
123    ECORE_EVAS_ENGINE_SOFTWARE_16_X11,
124    ECORE_EVAS_ENGINE_SOFTWARE_16_DDRAW,
125    ECORE_EVAS_ENGINE_SOFTWARE_16_WINCE,
126    ECORE_EVAS_ENGINE_OPENGL_SDL,
127    ECORE_EVAS_ENGINE_EWS,
128    ECORE_EVAS_ENGINE_PSL1GHT,
129    ECORE_EVAS_ENGINE_WAYLAND_SHM,
130    ECORE_EVAS_ENGINE_WAYLAND_EGL
131 } Ecore_Evas_Engine_Type;
132
133 typedef enum _Ecore_Evas_Avoid_Damage_Type
134 {
135    ECORE_EVAS_AVOID_DAMAGE_NONE = 0,
136    ECORE_EVAS_AVOID_DAMAGE_EXPOSE = 1,
137    ECORE_EVAS_AVOID_DAMAGE_BUILT_IN = 2
138 } Ecore_Evas_Avoid_Damage_Type;
139
140 typedef enum _Ecore_Evas_Object_Associate_Flags
141 {
142   ECORE_EVAS_OBJECT_ASSOCIATE_BASE  = 0,
143   ECORE_EVAS_OBJECT_ASSOCIATE_STACK = 1 << 0,
144   ECORE_EVAS_OBJECT_ASSOCIATE_LAYER = 1 << 1,
145   ECORE_EVAS_OBJECT_ASSOCIATE_DEL = 1 << 2
146 } Ecore_Evas_Object_Associate_Flags;
147
148 #ifndef _ECORE_X_H
149 #define _ECORE_X_WINDOW_PREDEF
150 typedef unsigned int Ecore_X_Window;
151 #endif
152
153 #ifndef _ECORE_DIRECTFB_H
154 #define _ECORE_DIRECTFB_WINDOW_PREDEF
155 typedef struct _Ecore_DirectFB_Window Ecore_DirectFB_Window;
156 #endif
157
158 #ifndef __ECORE_WIN32_H__
159 typedef struct _Ecore_Win32_Window Ecore_Win32_Window;
160 #endif
161
162 #ifndef __ECORE_WINCE_H__
163 typedef struct _Ecore_WinCE_Window Ecore_WinCE_Window;
164 #endif
165
166 #ifndef __ECORE_COCOA_H__
167 typedef struct _Ecore_Cocoa_Window Ecore_Cocoa_Window;
168 #endif
169
170 #ifndef _ECORE_EVAS_PRIVATE_H
171 /* basic data types */
172 typedef struct _Ecore_Evas Ecore_Evas;
173 typedef void   (*Ecore_Evas_Event_Cb) (Ecore_Evas *ee); /**< Callback used for several ecore evas events @since 1.2 */
174 #endif
175
176 #ifndef _ECORE_WAYLAND_H_
177 #define _ECORE_WAYLAND_WINDOW_PREDEF
178 typedef struct _Ecore_Wl_Window Ecore_Wl_Window;
179 #endif
180
181 /* module setup/shutdown calls */
182
183 EAPI int         ecore_evas_engine_type_supported_get(Ecore_Evas_Engine_Type engine);
184
185 /**
186  * @brief Init the Ecore_Evas system.
187  *
188  * @return How many times the lib has been initialized, 0 indicates failure.
189  *
190  * Set up the Evas wrapper system. Init Evas and Ecore libraries.
191  *
192  * @see ecore_evas_shutdown()
193  */
194 EAPI int         ecore_evas_init(void);
195 /**
196  * @brief Shut down the Ecore_Evas system.
197  *
198  * @return 0 if ecore evas is fully shut down, or > 0 if it still being used.
199  *
200  * This closes the Evas wrapper system down. Shut down Evas and Ecore libraries.
201  *
202  * @see ecore_evas_init()
203  */
204 EAPI int         ecore_evas_shutdown(void);
205
206 EAPI void        ecore_evas_app_comp_sync_set(Eina_Bool do_sync);
207 EAPI Eina_Bool   ecore_evas_app_comp_sync_get(void);
208
209 /**
210  * @brief Returns a list of supported engines names.
211  *
212  * @return Newly allocated list with engines names. Engines names
213  * strings are internal and should be considered constants, do not
214  * free or modify them, to free the list use ecore_evas_engines_free().
215  */
216 EAPI Eina_List  *ecore_evas_engines_get(void);
217 /**
218  * @brief Free list returned by ecore_evas_engines_get()
219  *
220  * @param engines list with engines names
221  */
222 EAPI void        ecore_evas_engines_free(Eina_List *engines);
223 /**
224  * @brief Creates a new Ecore_Evas based on engine name and common parameters.
225  *
226  * @param engine_name engine name as returned by
227  *        ecore_evas_engines_get() or @c NULL to use environment variable
228  *        ECORE_EVAS_ENGINE, that can be undefined and in this case
229  *        this call will try to find the first working engine.
230  * @param x horizontal position of window (not supported in all engines)
231  * @param y vertical position of window (not supported in all engines)
232  * @param w width of window
233  * @param h height of window
234  * @param extra_options string with extra parameter, dependent on engines
235  *        or @ NULL. String is usually in the form: 'key1=value1;key2=value2'.
236  *        Pay attention that when getting that from shell commands, most
237  *        consider ';' as the command terminator, so you need to escape
238  *        it or use quotes.
239  *
240  * @return Ecore_Evas instance or @c NULL if creation failed.
241  */
242 EAPI Ecore_Evas *ecore_evas_new(const char *engine_name, int x, int y, int w, int h, const char *extra_options);
243 /**
244  * @brief Set whether an Ecore_Evas has an alpha channel or not.
245  *
246  * @param ee The Ecore_Evas to shape
247  * @param alpha @c EINA_TRUE to enable the alpha channel, @c EINA_FALSE to
248  * disable it
249  *
250  * This function allows you to make an Ecore_Evas translucent using an
251  * alpha channel. See ecore_evas_shaped_set() for details. The difference
252  * between a shaped window and a window with an alpha channel is that an
253  * alpha channel supports multiple levels of transparency, as opposed to
254  * the 1 bit transparency of a shaped window (a pixel is either opaque, or
255  * it's transparent).
256  *
257  * @warning Support for this depends on the underlying windowing system.
258  */
259 EAPI void        ecore_evas_alpha_set(Ecore_Evas *ee, Eina_Bool alpha);
260 /**
261  * @brief Query whether an Ecore_Evas has an alpha channel.
262  * @param ee The Ecore_Evas to query.
263  * @return @c EINA_TRUE if ee has an alpha channel, @c EINA_FALSE if it does
264  * not.
265  *
266  * This function returns @c EINA_TRUE if @p ee has an alpha channel, and
267  * @c EINA_FALSE if it does not.
268  *
269  * @see ecore_evas_alpha_set()
270  */
271 EAPI Eina_Bool   ecore_evas_alpha_get(const Ecore_Evas *ee);
272 /**
273  * @brief Set whether an Ecore_Evas has an transparent window or not.
274  *
275  * @param ee The Ecore_Evas to shape
276  * @param transparent @c EINA_TRUE to enable the transparent window,
277  * @c EINA_FALSE to disable it
278  *
279  * This function sets some translucency options, for more complete support see
280  * ecore_evas_alpha_set().
281  *
282  * @warning Support for this depends on the underlying windowing system.
283  *
284  * @see ecore_evas_alpha_set()
285  */
286 EAPI void        ecore_evas_transparent_set(Ecore_Evas *ee, Eina_Bool transparent);
287 /**
288  * @brief  Query whether an Ecore_Evas is transparent.
289  *
290  * @param ee The Ecore_Evas to query.
291  * @return @c EINA_TRUE if ee is transparent, @c EINA_FALSE if it isn't.
292  *
293  * @see ecore_evas_transparent_set()
294  */
295 EAPI Eina_Bool   ecore_evas_transparent_get(const Ecore_Evas *ee);
296 /**
297  * @brief  Get the geometry of an Ecore_Evas.
298  *
299  * @param ee The Ecore_Evas whose geometry y
300  * @param x A pointer to an int to place the x coordinate in
301  * @param y A pointer to an int to place the y coordinate in
302  * @param w A pointer to an int to place the w size in
303  * @param h A pointer to an int to place the h size in
304  *
305  * This function takes four pointers to (already allocated) ints, and places
306  * the geometry of @p ee in them. If any of the parameters is not desired you
307  * may pass @c NULL on them.
308  *
309  * @code
310  * int x, y, w, h;
311  * ecore_evas_geometry_get(ee, &x, &y, &w, &h);
312  * @endcode
313  *
314  * @see ecore_evas_new()
315  * @see ecore_evas_resize()
316  * @see ecore_evas_move()
317  * @see ecore_evas_move_resize()
318  */
319 EAPI void        ecore_evas_geometry_get(const Ecore_Evas *ee, int *x, int *y, int *w, int *h);
320 /**
321  * @brief  Get the geometry which an Ecore_Evas was latest recently requested.
322  *
323  * @param ee The Ecore_Evas whose geometry y
324  * @param x A pointer to an int to place the x coordinate in
325  * @param y A pointer to an int to place the y coordinate in
326  * @param w A pointer to an int to place the w size in
327  * @param h A pointer to an int to place the h size in
328  *
329  * This function takes four pointers to (already allocated) ints, and places
330  * the geometry which @p ee was latest recently requested . If any of the
331  * parameters is not desired you may pass @c NULL on them.
332  * This function can represent recently requested geometry.
333  * ecore_evas_geometry_get function returns the value is updated after engine
334  * finished request. By comparison, ecore_evas_request_geometry_get returns
335  * recently requested value.
336  *
337  * @code
338  * int x, y, w, h;
339  * ecore_evas_request_geometry_get(ee, &x, &y, &w, &h);
340  * @endcode
341  *
342  * @since 1.1
343  */
344 EAPI void        ecore_evas_request_geometry_get(const Ecore_Evas *ee, int *x, int *y, int *w, int *h);
345 /**
346  * @brief Set the focus of an Ecore_Evas' window.
347  *
348  * @param ee The Ecore_Evas
349  * @param on @c EINA_TRUE for focus, @c EINA_FALSE to defocus.
350  *
351  * This function focuses @p ee if @p on is @c EINA_TRUE, or unfocuses @p ee if
352  * @p on is @c EINA_FALSE.
353  *
354  * @warning Support for this depends on the underlying windowing system.
355  */
356 EAPI void        ecore_evas_focus_set(Ecore_Evas *ee, Eina_Bool on);
357 /**
358  * @brief Query whether an Ecore_Evas' window is focused or not.
359  *
360  * @param ee The Ecore_Evas to set
361  * @return @c EINA_TRUE if @p ee if focused, @c EINA_FALSE if not.
362  *
363  * @see ecore_evas_focus_set()
364  */
365 EAPI Eina_Bool   ecore_evas_focus_get(const Ecore_Evas *ee);
366 /**
367  * @brief Iconify or uniconify an Ecore_Evas' window.
368  *
369  * @param ee The Ecore_Evas
370  * @param on @c EINA_TRUE to iconify, @c EINA_FALSE to uniconify.
371  *
372  * This function iconifies @p ee if @p on is @c EINA_TRUE, or uniconifies @p ee
373  * if @p on is @c EINA_FALSE.
374  *
375  * @note Iconify and minimize are synonyms.
376  *
377  * @warning Support for this depends on the underlying windowing system.
378  */
379 EAPI void        ecore_evas_iconified_set(Ecore_Evas *ee, Eina_Bool on);
380 /**
381  * @brief Query whether an Ecore_Evas' window is iconified or not.
382  *
383  * @param ee The Ecore_Evas to set
384  * @return @c EINA_TRUE if @p ee is iconified, @c EINA_FALSE if not.
385  *
386  * @note Iconify and minimize are synonyms.
387  *
388  * @see ecore_evas_iconified_set()
389  */
390 EAPI Eina_Bool   ecore_evas_iconified_get(const Ecore_Evas *ee);
391 /**
392  * @brief Set whether an Ecore_Evas' window is borderless or not.
393  *
394  * @param ee The Ecore_Evas
395  * @param on @c EINA_TRUE for borderless, @c EINA_FALSE for bordered.
396  *
397  * This function makes @p ee borderless if @p on is @c EINA_TRUE, or bordered
398  * if @p on is @c EINA_FALSE.
399  *
400  * @warning Support for this depends on the underlying windowing system.
401  */
402 EAPI void        ecore_evas_borderless_set(Ecore_Evas *ee, Eina_Bool on);
403 /**
404  * @brief Query whether an Ecore_Evas' window is borderless or not.
405  *
406  * @param ee The Ecore_Evas to set
407  * @return @c EINA_TRUE if @p ee is borderless, @c EINA_FALSE if not.
408  *
409  * @see ecore_evas_borderless_set()
410  */
411 EAPI Eina_Bool   ecore_evas_borderless_get(const Ecore_Evas *ee);
412 /**
413  * @brief Set whether or not an Ecore_Evas' window is fullscreen.
414  *
415  * @param ee The Ecore_Evas
416  * @param on @c EINA_TRUE fullscreen, @c EINA_FALSE not.
417  *
418  * This function causes @p ee to be fullscreen if @p on is @c EINA_TRUE, or
419  * not if @p on is @c EINA_FALSE.
420  *
421  * @warning Support for this depends on the underlying windowing system.
422  */
423 EAPI void        ecore_evas_fullscreen_set(Ecore_Evas *ee, Eina_Bool on);
424 /**
425  * @brief Query whether an Ecore_Evas' window is fullscreen or not.
426  *
427  * @param ee The Ecore_Evas to set
428  * @return @c EINA_TRUE if @p ee is fullscreen, @c EINA_FALSE if not.
429  *
430  * @see ecore_evas_fullscreen_set()
431  */
432 EAPI Eina_Bool   ecore_evas_fullscreen_get(const Ecore_Evas *ee);
433 /**
434  * @brief Set another window that this window is a group member of
435  *
436  * @param ee The Ecore_Evas
437  * @param ee_group The other group member
438  *
439  * If @p ee_group is @c NULL, @p ee is removed from the group, otherwise it is
440  * added. Note that if you free the @p ee_group canvas before @p ee, then
441  * getting the group canvas with ecore_evas_window_group_get() will return
442  * an invalid handle.
443  *
444  * @warning Support for this depends on the underlying windowing system.
445  * @since 1.2
446  */
447 EAPI void        ecore_evas_window_group_set(Ecore_Evas *ee, const Ecore_Evas *ee_group);
448 /**
449  * @brief Get the canvas group set.
450  *
451  * This returns the handle set by ecore_evas_window_group_set().
452  *
453  * @param ee The Ecore_Evas to set
454  * @return The Canvas group handle
455  *
456  * @see ecore_evas_window_group_set()
457  * @since 1.2
458  */
459 EAPI const Ecore_Evas *ecore_evas_window_group_get(const Ecore_Evas *ee);
460 /**
461  * @brief Set the aspect ratio of a canvas window
462  *
463  * @param ee The Ecore_Evas
464  * @param aspect The aspect ratio (width divided by height), or 0 to disable
465  *
466  * This sets the desired aspect ratio of a canvas window
467  *
468  * @warning Support for this depends on the underlying windowing system.
469  * @since 1.2
470  */
471 EAPI void        ecore_evas_aspect_set(Ecore_Evas *ee, double aspect);
472 /**
473  * @brief Get the aspect ratio of a canvas window
474  *
475  * This returns the value set by ecore_evas_aspect_set().
476  *
477  * @param ee The Ecore_Evas to set
478  * @return The aspect ratio
479  *
480  * @see ecore_evas_aspect_set()
481  * @since 1.2
482  */
483 EAPI double      ecore_evas_aspect_get(const Ecore_Evas *ee);
484 /**
485  * @brief Set The urgent hint flag
486  *
487  * @param ee The Ecore_Evas
488  * @param urgent The urgent state flag
489  *
490  * This sets the "urgent" state hint on a window so the desktop environment
491  * can highlight it somehow.
492  *
493  * @warning Support for this depends on the underlying windowing system.
494  * @since 1.2
495  */
496 EAPI void        ecore_evas_urgent_set(Ecore_Evas *ee, Eina_Bool urgent);
497 /**
498  * @brief Get the urgent state on the cavas window
499  *
500  * This returns the value set by ecore_evas_urgent_set()
501  *
502  * @param ee The Ecore_Evas to set
503  * @return The urgent state set
504  *
505  * @see ecore_evas_urgent_set()
506  * @since 1.2
507  */
508 EAPI Eina_Bool   ecore_evas_urgent_get(const Ecore_Evas *ee);
509 /**
510  * @brief Set the modal state flag on the canvas window
511  *
512  * @param ee The Ecore_Evas
513  * @param modal The modal hint flag
514  *
515  * This hints if the window should be modal (eg if it is also transient
516  * for another window, the other window will maybe be denied focus by
517  * the desktop window manager).
518  *
519  * @warning Support for this depends on the underlying windowing system.
520  * @since 1.2
521  */
522 EAPI void        ecore_evas_modal_set(Ecore_Evas *ee, Eina_Bool modal);
523 /**
524  * @brief Get The modal flag
525  *
526  * This returns the value set by ecore_evas_modal_set().
527  *
528  * @param ee The Ecore_Evas to set
529  * @return The modal flag
530  *
531  * @see ecore_evas_modal_set()
532  * @since 1.2
533  */
534 EAPI Eina_Bool   ecore_evas_modal_get(const Ecore_Evas *ee);
535 /**
536  * @brief Set the "i demand attention" flag on a canvas window
537  *
538  * @param ee The Ecore_Evas
539  * @param demand The flag state to set
540  *
541  * A window may demand attention now (eg you must enter a password before
542  * continuing), and so it may flag a window with this.
543  *
544  * @warning Support for this depends on the underlying windowing system.
545  * @since 1.2
546  */
547 EAPI void        ecore_evas_demand_attention_set(Ecore_Evas *ee, Eina_Bool demand);
548 /**
549  * @brief Get the "i demand attention" flag
550  *
551  * This returns the value set by ecore_evas_demand_attention_set().
552  *
553  * @param ee The Ecore_Evas to set
554  * @return The "i demand attention" flag.
555  *
556  * @see ecore_evas_demand_attention_set()
557  * @since 1.2
558  */
559 EAPI Eina_Bool   ecore_evas_demand_attention_get(const Ecore_Evas *ee);
560 /**
561  * @brief Set the "focus skip" flag
562  *
563  * @param ee The Ecore_Evas
564  * @param skip The "focus skip" state to set.
565  *
566  * A window may not want to accept focus, be in the taskbar, pager etc.
567  * sometimes (example for a small notification window that hovers around
568  * a taskbar or panel, or hovers around a window until some activity
569  * dismisses it).
570  *
571  * @warning Support for this depends on the underlying windowing system.
572  * @since 1.2
573  */
574 EAPI void        ecore_evas_focus_skip_set(Ecore_Evas *ee, Eina_Bool skip);
575 /**
576  * @brief Get the "focus skip" flag
577  *
578  * This returns the value set by ecore_evas_focus_skip_set().
579  *
580  * @param ee The Ecore_Evas to set
581  * @return The "focus skip" flag.
582  *
583  * @see ecore_evas_focus_skip_set()
584  * @since 1.2
585  */
586 EAPI Eina_Bool   ecore_evas_focus_skip_get(const Ecore_Evas *ee);
587
588 /**
589  * @brief Set if this evas should ignore @b all events.
590  *
591  * @param ee The Ecore_Evas whose window's to ignore events.
592  * @param ignore The Ecore_Evas new ignore state.
593  *
594  * @warning Support for this depends on the underlying windowing system.
595  */
596 EAPI void        ecore_evas_ignore_events_set(Ecore_Evas *ee, Eina_Bool ignore);
597 /**
598  * @brief Returns the ignore state of an Ecore_Evas' window.
599  *
600  * @param ee The Ecore_Evas whose window's ignore events state is returned.
601  * @return The Ecore_Evas window's ignore state.
602  *
603  * @see ecore_evas_ignore_events_set()
604  */
605 EAPI Eina_Bool   ecore_evas_ignore_events_get(const Ecore_Evas *ee);
606 /**
607  * @brief Query whether an Ecore_Evas' window is visible or not.
608  *
609  * @param ee The Ecore_Evas to query.
610  * @return 1 if visible, 0 if not.
611  *
612  * This function queries @p ee and returns 1 if it is visible, and 0 if not.
613  *
614  * @see ecore_evas_show()
615  * @see ecore_evas_hide()
616  */
617 EAPI int         ecore_evas_visibility_get(const Ecore_Evas *ee);
618 /**
619  * @brief Set the layer of an Ecore_Evas' window.
620  *
621  * @param ee The Ecore_Evas
622  * @param layer The layer to put @p ee on.
623  *
624  * This function moves @p ee to the layer @p layer.
625  *
626  * @warning Support for this depends on the underlying windowing system.
627  *
628  * @see ecore_evas_lower()
629  * @see ecore_evas_raise()
630  */
631 EAPI void        ecore_evas_layer_set(Ecore_Evas *ee, int layer);
632 /**
633  * @brief Get the layer of an Ecore_Evas' window.
634  *
635  * @param ee The Ecore_Evas to set
636  * @return the layer @p ee's window is on.
637  *
638  * @see ecore_evas_layer_set()
639  * @see ecore_evas_lower()
640  * @see ecore_evas_raise()
641  */
642 EAPI int         ecore_evas_layer_get(const Ecore_Evas *ee);
643 /**
644  * @brief Maximize (or unmaximize) an Ecore_Evas' window.
645  *
646  * @param ee The Ecore_Evas
647  * @param on @c EINA_TRUE to maximize, @c EINA_FALSE to unmaximize.
648  *
649  * This function maximizes @p ee if @p on is @c EINA_TRUE, or unmaximizes @p ee
650  * if @p on is @c EINA_FALSE.
651  *
652  * @warning Support for this depends on the underlying windowing system.
653  */
654 EAPI void        ecore_evas_maximized_set(Ecore_Evas *ee, Eina_Bool on);
655 /**
656  * @brief Query whether an Ecore_Evas' window is maximized or not.
657  *
658  * @param ee The Ecore_Evas to set
659  * @return @c EINA_TRUE if @p ee is maximized, @c EINA_FALSE if not.
660  *
661  * @see ecore_evas_maximized_set()
662  */
663 EAPI Eina_Bool   ecore_evas_maximized_get(const Ecore_Evas *ee);
664 /**
665  * @brief Set Ecore_Evas's window profile list.
666  *
667  * @param ee The Ecore_Evas
668  * @param profiles The profile name list
669  * @param num_profiles The number of profile names
670  *
671  * @warning Support for this depends on the underlying windowing system.
672  * @since 1.7.0
673  */
674 EAPI void        ecore_evas_profiles_set(Ecore_Evas *ee, const char **profiles, unsigned int num_profiles);
675 /**
676  * @brief Get Ecore_Evas's window profile name.
677  *
678  * @param ee The Ecore_Evas
679  * @return The profile name
680  *
681  * @since 1.7.0
682  */
683 EAPI const char *ecore_evas_profile_get(const Ecore_Evas *ee);
684
685 EAPI Eina_Bool        ecore_evas_wm_rotation_supported_get(const Ecore_Evas *ee);
686 EAPI void             ecore_evas_wm_rotation_preferred_rotation_set(Ecore_Evas *ee, int rotation);
687 EAPI int              ecore_evas_wm_rotation_preferred_rotation_get(const Ecore_Evas *ee);
688 EAPI void             ecore_evas_wm_rotation_available_rotations_set(Ecore_Evas *ee, const int *rotations, unsigned int count);
689 EAPI Eina_Bool        ecore_evas_wm_rotation_available_rotations_get(const Ecore_Evas *ee, int **rotations, unsigned int *count);
690
691 /**
692  * @brief Move an Ecore_Evas.
693  *
694  * @param ee The Ecore_Evas to move
695  * @param x The x coordinate to move to
696  * @param y The y coordinate to move to
697  *
698  * This moves @p ee to the screen coordinates (@p x, @p y)
699  *
700  * @warning Support for this depends on the underlying windowing system.
701  *
702  * @see ecore_evas_new()
703  * @see ecore_evas_resize()
704  * @see ecore_evas_move_resize()
705  */
706 EAPI void        ecore_evas_move(Ecore_Evas *ee, int x, int y);
707 /**
708  * @brief Resize an Ecore_Evas.
709  *
710  * @param ee The Ecore_Evas to move
711  * @param w The w coordinate to resize to
712  * @param h The h coordinate to resize to
713  *
714  * This resizes @p ee to @p w x @p h.
715  *
716  * @warning Support for this depends on the underlying windowing system.
717  *
718  * @see ecore_evas_new()
719  * @see ecore_evas_move()
720  * @see ecore_evas_move_resize()
721  */
722 EAPI void        ecore_evas_resize(Ecore_Evas *ee, int w, int h);
723 /**
724  * @brief Move and resize an Ecore_Evas
725  *
726  * @param ee The Ecore_Evas to move and resize
727  * @param x The x coordinate to move to
728  * @param y The y coordinate to move to
729  * @param w The w coordinate to resize to
730  * @param h The h coordinate to resize to
731  *
732  * This moves @p ee to the screen coordinates (@p x, @p y) and  resizes
733  * it to @p w x @p h.
734  *
735  * @warning Support for this depends on the underlying windowing system.
736  *
737  * @see ecore_evas_new()
738  * @see ecore_evas_move()
739  * @see ecore_evas_resize()
740  */
741 EAPI void        ecore_evas_move_resize(Ecore_Evas *ee, int x, int y, int w, int h);
742 /**
743  * @brief Set the rotation of an Ecore_Evas' window.
744  *
745  * @param ee The Ecore_Evas
746  * @param rot the angle (in degrees) of rotation.
747  *
748  * The allowed values of @p rot depend on the engine being used. Most only
749  * allow multiples of 90.
750  *
751  * @warning Support for this depends on the underlying windowing system.
752  *
753  * @see ecore_evas_rotation_with_resize_set()
754  */
755 EAPI void        ecore_evas_rotation_set(Ecore_Evas *ee, int rot);
756 /**
757  * @brief Set the rotation of an Ecore_Evas' window
758  *
759  * @param ee The Ecore_Evas
760  * @param rot the angle (in degrees) of rotation.
761  *
762  * Like ecore_evas_rotation_set(), but it also resizes the window's contents so
763  * that they fit inside the current window geometry.
764  *
765  * @warning Support for this depends on the underlying windowing system.
766  *
767  * @see ecore_evas_rotation_set()
768  */
769 EAPI void        ecore_evas_rotation_with_resize_set(Ecore_Evas *ee, int rot);
770 /**
771  * @brief Get the rotation of an Ecore_Evas' window
772  *
773  * @param ee The Ecore_Evas
774  * @return the angle (in degrees) of rotation.
775  *
776  * @see ecore_evas_rotation_set()
777  * @see ecore_evas_rotation_with_resize_set()
778  */
779 EAPI int         ecore_evas_rotation_get(const Ecore_Evas *ee);
780 /**
781  * @brief Raise an Ecore_Evas' window.
782  *
783  * @param ee The Ecore_Evas to raise.
784  *
785  * This functions raises the Ecore_Evas to the front.
786  *
787  * @warning Support for this depends on the underlying windowing system.
788  *
789  * @see ecore_evas_lower()
790  * @see ecore_evas_layer_set()
791  */
792 EAPI void        ecore_evas_raise(Ecore_Evas *ee);
793 /**
794  * @brief Lower an Ecore_Evas' window.
795  *
796  * @param ee The Ecore_Evas to raise.
797  *
798  * This functions lowers the Ecore_Evas to the back.
799  *
800  * @warning Support for this depends on the underlying windowing system.
801  *
802  * @see ecore_evas_raise()
803  * @see ecore_evas_layer_set()
804  */
805 EAPI void        ecore_evas_lower(Ecore_Evas *ee);
806 /**
807  * @brief Set the title of an Ecore_Evas' window.
808  *
809  * @param ee The Ecore_Evas whose title you wish to set.
810  * @param t The title
811  *
812  * This function sets the title of @p ee to @p t.
813  *
814  * @warning Support for this depends on the underlying windowing system.
815  */
816 EAPI void        ecore_evas_title_set(Ecore_Evas *ee, const char *t);
817 /**
818  * @brief Get the title of an Ecore_Evas' window.
819  *
820  * @param ee The Ecore_Evas whose title you wish to get.
821  * @return The title of @p ee.
822  *
823  * This function returns the title of @p ee.
824  *
825  * @see ecore_evas_title_set()
826  */
827 EAPI const char *ecore_evas_title_get(const Ecore_Evas *ee);
828 /**
829  * @brief Set the name and class of an Ecore_Evas' window.
830  *
831  * @param ee the Ecore_Evas
832  * @param n the name
833  * @param c the class
834  *
835  * This function sets the name of @p ee to @p n, and its class to @p c. The
836  * meaning of @p name and @p class depends on the underlying windowing system.
837  *
838  * @warning Support for this depends on the underlying windowing system.
839  */
840 EAPI void        ecore_evas_name_class_set(Ecore_Evas *ee, const char *n, const char *c);
841 /**
842  * @brief Get the name and class of an Ecore_Evas' window
843  *
844  * This function gets the name of @p ee into @p n, and its class into
845  * @p c.
846  *
847  * @param ee The Ecore_Evas to query.
848  * @param n A pointer to a string to place the name in.
849  * @param c A pointer to a string to place the class in.
850  * @see ecore_evas_name_class_set()
851  */
852 EAPI void        ecore_evas_name_class_get(const Ecore_Evas *ee, const char **n, const char **c);
853 /**
854  * @brief Returns a pointer to the underlying window.
855  *
856  * @param ee The Ecore_Evas whose window is desired.
857  * @return A pointer to the underlying window.
858  *
859  * @warning Support for this depends on the underlying windowing system.
860  */
861 EAPI Ecore_Window ecore_evas_window_get(const Ecore_Evas *ee);
862
863
864 /* engine/target specific init calls */
865 EAPI Ecore_Evas     *ecore_evas_software_x11_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h);
866 EAPI Ecore_X_Window  ecore_evas_software_x11_window_get(const Ecore_Evas *ee);
867 EAPI void            ecore_evas_software_x11_direct_resize_set(Ecore_Evas *ee, Eina_Bool on);
868 EAPI Eina_Bool       ecore_evas_software_x11_direct_resize_get(const Ecore_Evas *ee);
869 EAPI void            ecore_evas_software_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window win);
870
871 #define ECORE_EVAS_GL_X11_OPT_NONE     0
872 #define ECORE_EVAS_GL_X11_OPT_INDIRECT 1
873 #define ECORE_EVAS_GL_X11_OPT_VSYNC    2
874 #define ECORE_EVAS_GL_X11_OPT_LAST     3
875
876 EAPI Ecore_Evas     *ecore_evas_gl_x11_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h);
877 EAPI Ecore_Evas     *ecore_evas_gl_x11_options_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h, const int *opt);
878 EAPI Ecore_X_Window  ecore_evas_gl_x11_window_get(const Ecore_Evas *ee);
879 EAPI void            ecore_evas_gl_x11_direct_resize_set(Ecore_Evas *ee, Eina_Bool on);
880 EAPI Eina_Bool       ecore_evas_gl_x11_direct_resize_get(const Ecore_Evas *ee);
881 EAPI void            ecore_evas_gl_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window win);
882 EAPI void            ecore_evas_gl_x11_pre_post_swap_callback_set(const Ecore_Evas *ee, void *data, void (*pre_cb) (void *data, Evas *e), void (*post_cb) (void *data, Evas *e));
883
884 EAPI Ecore_Evas     *ecore_evas_xrender_x11_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h);
885 EAPI Ecore_X_Window  ecore_evas_xrender_x11_window_get(const Ecore_Evas *ee);
886 EAPI void            ecore_evas_xrender_x11_direct_resize_set(Ecore_Evas *ee, Eina_Bool on);
887 EAPI Eina_Bool       ecore_evas_xrender_x11_direct_resize_get(const Ecore_Evas *ee);
888 EAPI void            ecore_evas_xrender_x11_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window win);
889
890 EAPI Ecore_Evas     *ecore_evas_software_x11_8_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h);
891 EAPI Ecore_X_Window  ecore_evas_software_x11_8_window_get(const Ecore_Evas *ee);
892 EAPI Ecore_X_Window  ecore_evas_software_x11_8_subwindow_get(const Ecore_Evas *ee);
893 EAPI void            ecore_evas_software_x11_8_direct_resize_set(Ecore_Evas *ee, Eina_Bool on);
894 EAPI Eina_Bool       ecore_evas_software_x11_8_direct_resize_get(const Ecore_Evas *ee);
895 EAPI void            ecore_evas_software_x11_8_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window win);
896
897 EAPI Ecore_Evas     *ecore_evas_software_x11_16_new(const char *disp_name, Ecore_X_Window parent, int x, int y, int w, int h);
898 EAPI Ecore_X_Window  ecore_evas_software_x11_16_window_get(const Ecore_Evas *ee);
899 EAPI void            ecore_evas_software_x11_16_direct_resize_set(Ecore_Evas *ee, Eina_Bool on);
900 EAPI Eina_Bool       ecore_evas_software_x11_16_direct_resize_get(const Ecore_Evas *ee);
901 EAPI void            ecore_evas_software_x11_16_extra_event_window_add(Ecore_Evas *ee, Ecore_X_Window win);
902
903 EAPI Ecore_Evas     *ecore_evas_fb_new(const char *disp_name, int rotation, int w, int h);
904
905 EAPI Ecore_Evas     *ecore_evas_directfb_new(const char *disp_name, int windowed, int x, int y, int w, int h);
906 EAPI Ecore_DirectFB_Window *ecore_evas_directfb_window_get(const Ecore_Evas *ee);
907
908
909 EAPI Ecore_Evas     *ecore_evas_wayland_shm_new(const char *disp_name, unsigned int parent, int x, int y, int w, int h, Eina_Bool frame);
910 EAPI Ecore_Evas     *ecore_evas_wayland_egl_new(const char *disp_name, unsigned int parent, int x, int y, int w, int h, Eina_Bool frame);
911 EAPI void            ecore_evas_wayland_resize(Ecore_Evas *ee, int location);
912 EAPI void            ecore_evas_wayland_move(Ecore_Evas *ee, int x, int y);
913
914 /* EAPI void            ecore_evas_wayland_drag_start(Ecore_Evas *ee, Ecore_Evas *drag_ee, void *source); */
915 EAPI void            ecore_evas_wayland_pointer_set(Ecore_Evas *ee, int hot_x, int hot_y);
916 EAPI void            ecore_evas_wayland_type_set(Ecore_Evas *ee, int type);
917 EAPI Ecore_Wl_Window *ecore_evas_wayland_window_get(const Ecore_Evas *ee);
918
919 /**
920  * @brief Create a new @c Ecore_Evas canvas bound to the Evas
921  * @b buffer engine
922  *
923  * @param w The width of the canvas, in pixels
924  * @param h The height of the canvas, in pixels
925  * @return A new @c Ecore_Evas instance or @c NULL, on failure
926  *
927  * This creates a new buffer canvas wrapper, with image data array
928  * @b bound to the ARGB format, 8 bits per pixel.
929  *
930  * This function will allocate the needed pixels array with canonical
931  * @c malloc(). If you wish a custom function to allocate it, consider
932  * using ecore_evas_buffer_allocfunc_new(), instead.
933  *
934  * @note This function actually is a wrapper on
935  * ecore_evas_buffer_allocfunc_new(), using the same @a w and @a h
936  * arguments and canonical @c malloc() and @c free() to the memory
937  * allocation and freeing functions. See that function's documentation
938  * for more details.
939  */
940 EAPI Ecore_Evas     *ecore_evas_buffer_new(int w, int h);
941
942 /**
943  * @brief Create a new @c Ecore_Evas canvas bound to the Evas
944  * @b buffer engine, giving custom allocation and freeing functions for
945  * the canvas memory region
946  *
947  * @param w The width of the canvas, in canvas units
948  * @param h The height of the canvas, in canvas units
949  * @param alloc_func Function to be called to allocate the memory
950  * needed for the new buffer canvas. @a data will be passed the same
951  * value as the @p data of this function, while @a size will be passed
952  * @p w times @p h times @c sizeof(int).
953  * @param free_func Function to be called to free the memory used by
954  * the new buffer canvas. @a data will be passed the same value as the
955  * @p data of this function, while @a pix will be passed the canvas
956  * memory pointer.
957  * @param data Custom data to be passed to the allocation and freeing
958  * functions
959  * @return A new @c Ecore_Evas instance or @c NULL, on failure
960  *
961  * This creates a new buffer canvas wrapper, with image data array
962  * @b bound to the ARGB format, 8 bits per pixel.
963  *
964  * This function is useful when one wants an @c Ecore_Evas buffer
965  * canvas with a custom allocation function, like one getting memory
966  * chunks from a memory pool, for example.
967  *
968  * On any resizing of this @c Ecore_Evas buffer canvas, its image data
969  * will be @b freed, to be allocated again with the new size.
970  *
971  * @note @p w and @p h sizes have to greater or equal to 1. Otherwise,
972  * they'll be interpreted as 1, exactly.
973  *
974  * @see ecore_evas_buffer_new()
975  */
976 EAPI Ecore_Evas     *ecore_evas_buffer_allocfunc_new(int w, int h, void *(*alloc_func) (void *data, int size), void (*free_func) (void *data, void *pix), const void *data);
977
978 /**
979  * @brief Grab a pointer to the actual pixels array of a given
980  * @c Ecore_Evas @b buffer canvas/window.
981  *
982  * @param ee An @c Ecore_Evas handle
983  * @return A pointer to the internal pixels array of @p ee
984  *
985  * Besides returning a pointer to the actual pixel array of the given
986  * canvas, this call will force a <b>rendering update on @p ee</b>,
987  * first.
988  *
989  * A common use case for this call is to create an image object, from
990  * @b another canvas, to have as data @p ee's contents, thus
991  * snapshoting the canvas. For that case, one can also use the
992  * ecore_evas_object_image_new() helper function.
993  */
994 EAPI const void     *ecore_evas_buffer_pixels_get(Ecore_Evas *ee);
995
996 /**
997  * @brief Create a new @c Ecore_Evas canvas bound to the Evas
998  * @b ews (Ecore + Evas Single Process Windowing System) engine
999  *
1000  * EWS is a simple single process windowing system. The backing store
1001  * is also an @c Ecore_Evas that can be setup with
1002  * ecore_evas_ews_setup() and retrieved with
1003  * ecore_evas_ews_ecore_evas_get(). It will allow window management
1004  * using events prefixed with @c ECORE_EVAS_EVENT_EWS_.
1005  *
1006  * The EWS windows (returned by this function or
1007  * ecore_evas_new("ews"...)) will all be software buffer windows
1008  * automatic rendered to the backing store.
1009  *
1010  * @param x horizontal position of window, in pixels
1011  * @param y vertical position of window, in pixels
1012  * @param w The width of the canvas, in pixels
1013  * @param h The height of the canvas, in pixels
1014  * @return A new @c Ecore_Evas instance or @c NULL, on failure
1015  *
1016  * @see ecore_evas_ews_setup()
1017  * @see ecore_evas_ews_ecore_evas_get()
1018  *
1019  * @since 1.1
1020  */
1021 EAPI Ecore_Evas     *ecore_evas_ews_new(int x, int y, int w, int h);
1022
1023
1024 /**
1025  * Returns the backing store image object that represents the given
1026  * window in EWS.
1027  * @return The evas object of EWS backing store.
1028  *
1029  * @note This should not be modified anyhow, but may be helpful to
1030  *       determine stacking and geometry of it for window managers
1031  *       that decorate windows.
1032  *
1033  * @param ee The Ecore_Evas from which to get the backing store.
1034  * @see ecore_evas_ews_manager_set()
1035  * @see ecore_evas_ews_evas_get()
1036  * @since 1.1
1037  */
1038 EAPI Evas_Object *ecore_evas_ews_backing_store_get(const Ecore_Evas *ee);
1039
1040 /**
1041  * Calls the window to be deleted (freed), but can let user decide to
1042  * forbid it by using ecore_evas_callback_delete_request_set()
1043  *
1044  * @param ee The Ecore_Evas for which window will be deleted.
1045  * @since 1.1
1046  */
1047 EAPI void ecore_evas_ews_delete_request(Ecore_Evas *ee);
1048
1049 /**
1050  * @brief Create an Evas image object with image data <b>bound to an
1051  * own, internal @c Ecore_Evas canvas wrapper</b>
1052  *
1053  * @param ee_target @c Ecore_Evas to have the canvas receiving the new
1054  * image object
1055  * @return A handle to the new image object
1056  *
1057  * This will create a @b special Evas image object. The image's pixel
1058  * array will get bound to the same image data array of an @b internal
1059  * @b buffer @c Ecore_Evas canvas. The user of this function is, then,
1060  * supposed to grab that @c Ecore_Evas handle, with
1061  * ecore_evas_object_ecore_evas_get(), and use its canvas to render
1062  * whichever contents he/she wants, @b independently of the contents
1063  * of the canvas owned by @p ee_target. Those contents will reflect on
1064  * the canvas of @p ee, though, being exactly the image data of the
1065  * object returned by this function.
1066  *
1067  * This is a helper function for the scenario of one wanting to grab a
1068  * buffer canvas' contents (with ecore_evas_buffer_pixels_get()) to be
1069  * used on another canvas, for whichever reason. The most common goal
1070  * of this setup is to @b save an image file with a whole canvas as
1071  * contents, which could not be achieved by using an image file within
1072  * the target canvas.
1073  *
1074  * @warning Always resize the returned image and its underlying
1075  * @c Ecore_Evas handle accordingly. They must be kept with same sizes
1076  * for things to work as expected. Also, you @b must issue
1077  * @c evas_object_image_size_set() on the image with that same size. If
1078  * the image is to be shown in a canvas bound to an engine different
1079  * than the buffer one, then you must also set this image's @b fill
1080  * properties accordingly.
1081  *
1082  * @note The image returned will always be bound to the
1083  * @c EVAS_COLORSPACE_ARGB8888 colorspace, always.
1084  *
1085  * @note Use ecore_evas_object_evas_get() to grab the image's internal
1086  * own canvas directly.
1087  *
1088  * @note If snapshoting this image's internal canvas, remember to
1089  * flush its internal @c Ecore_Evas firstly, with
1090  * ecore_evas_manual_render().
1091  */
1092 EAPI Evas_Object    *ecore_evas_object_image_new(Ecore_Evas *ee_target);
1093
1094 /**
1095  * @brief Retrieve the internal @c Ecore_Evas handle of an image
1096  * object created via ecore_evas_object_image_new()
1097  *
1098  * @param obj A handle to an image object created via
1099  * ecore_evas_object_image_new()
1100  * @return The underlying @c Ecore_Evas handle in @p obj
1101  */
1102 EAPI Ecore_Evas     *ecore_evas_object_ecore_evas_get(Evas_Object *obj);
1103
1104 /**
1105  * @brief Retrieve the canvas bound to the internal @c Ecore_Evas
1106  * handle of an image object created via ecore_evas_object_image_new()
1107  *
1108  * @param obj A handle to an image object created via
1109  * ecore_evas_object_image_new()
1110  * @return A handle to @p obj's underlying @c Ecore_Evas's canvas
1111  */
1112 EAPI Evas           *ecore_evas_object_evas_get(Evas_Object *obj);
1113
1114 EAPI Ecore_Evas     *ecore_evas_software_gdi_new(Ecore_Win32_Window *parent,
1115                                                  int                 x,
1116                                                  int                 y,
1117                                                  int                 width,
1118                                                  int                 height);
1119
1120 EAPI Ecore_Evas     *ecore_evas_software_ddraw_new(Ecore_Win32_Window *parent,
1121                                                    int                 x,
1122                                                    int                 y,
1123                                                    int                 width,
1124                                                    int                 height);
1125
1126 EAPI Ecore_Evas     *ecore_evas_software_16_ddraw_new(Ecore_Win32_Window *parent,
1127                                                       int                 x,
1128                                                       int                 y,
1129                                                       int                 width,
1130                                                       int                 height);
1131
1132 EAPI Ecore_Evas     *ecore_evas_direct3d_new(Ecore_Win32_Window *parent,
1133                                              int                 x,
1134                                              int                 y,
1135                                              int                 width,
1136                                              int                 height);
1137
1138 EAPI Ecore_Evas *ecore_evas_gl_glew_new(Ecore_Win32_Window *parent,
1139                                         int                 x,
1140                                         int                 y,
1141                                         int                 width,
1142                                         int                 height);
1143
1144 EAPI Ecore_Win32_Window *ecore_evas_win32_window_get(const Ecore_Evas *ee);
1145
1146 EAPI Ecore_Evas     *ecore_evas_sdl_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha);
1147 EAPI Ecore_Evas     *ecore_evas_sdl16_new(const char* name, int w, int h, int fullscreen, int hwsurface, int noframe, int alpha);
1148 EAPI Ecore_Evas     *ecore_evas_gl_sdl_new(const char* name, int w, int h, int fullscreen, int noframe);
1149
1150 EAPI Ecore_Evas     *ecore_evas_software_wince_new(Ecore_WinCE_Window *parent,
1151                                                    int                 x,
1152                                                    int                 y,
1153                                                    int                 width,
1154                                                    int                 height);
1155
1156 EAPI Ecore_Evas     *ecore_evas_software_wince_fb_new(Ecore_WinCE_Window *parent,
1157                                                       int                 x,
1158                                                       int                 y,
1159                                                       int                 width,
1160                                                       int                 height);
1161
1162 EAPI Ecore_Evas     *ecore_evas_software_wince_gapi_new(Ecore_WinCE_Window *parent,
1163                                                         int                 x,
1164                                                         int                 y,
1165                                                         int                 width,
1166                                                         int                 height);
1167
1168 EAPI Ecore_Evas     *ecore_evas_software_wince_ddraw_new(Ecore_WinCE_Window *parent,
1169                                                          int                 x,
1170                                                          int                 y,
1171                                                          int                 width,
1172                                                          int                 height);
1173
1174 EAPI Ecore_Evas     *ecore_evas_software_wince_gdi_new(Ecore_WinCE_Window *parent,
1175                                                        int                 x,
1176                                                        int                 y,
1177                                                        int                 width,
1178                                                        int                 height);
1179
1180 EAPI Ecore_WinCE_Window *ecore_evas_software_wince_window_get(const Ecore_Evas *ee);
1181
1182 EAPI Ecore_Evas *ecore_evas_cocoa_new(Ecore_Cocoa_Window *parent,
1183                                       int x,
1184                                       int y,
1185                                       int w,
1186                                       int h);
1187
1188 EAPI Ecore_Evas *ecore_evas_psl1ght_new(const char* name, int w, int h);
1189
1190
1191 /* generic manipulation calls */
1192 /**
1193  * @brief Get the engine name used by this Ecore_Evas(window).
1194  *
1195  * @param ee Ecore_Evas whose engine's name is desired.
1196  * @return A string that can(usually) be used in ecore_evas_new()
1197  *
1198  * @see ecore_evas_free()
1199  */
1200 EAPI const char *ecore_evas_engine_name_get(const Ecore_Evas *ee);
1201 /**
1202  * @brief Return the Ecore_Evas for this Evas
1203  *
1204  * @param e The Evas to get the Ecore_Evas from
1205  * @return The Ecore_Evas that holds this Evas, or @c NULL if not held by one.
1206  *
1207  * @warning Only use on Evas' created with ecore evas!
1208  */
1209 EAPI Ecore_Evas *ecore_evas_ecore_evas_get(const Evas *e);
1210 /**
1211  * @brief Free an Ecore_Evas
1212  *
1213  * @param ee The Ecore_Evas to free
1214  *
1215  * This frees up any memory used by the Ecore_Evas.
1216  */
1217 EAPI void        ecore_evas_free(Ecore_Evas *ee);
1218 /**
1219  * @brief Retrieve user data associated with an Ecore_Evas.
1220  *
1221  * @param ee The Ecore_Evas to retrieve the user data from.
1222  * @param key The key which the user data to be retrieved is associated with.
1223  *
1224  * This function retrieves user specific data that has been stored within an
1225  * Ecore_Evas structure with ecore_evas_data_set().
1226  *
1227  * @returns @c NULL on error or no data found, A pointer to the user data on
1228  *     success.
1229  *
1230  * @see ecore_evas_data_set()
1231  */
1232 EAPI void       *ecore_evas_data_get(const Ecore_Evas *ee, const char *key);
1233 /**
1234  * @brief Store user data in an Ecore_Evas structure.
1235  *
1236  * @param ee The Ecore_Evas to store the user data in.
1237  * @param key A unique string to associate the user data against. Cannot
1238  * be NULL.
1239  * @param data A pointer to the user data to store.
1240  *
1241  * This function associates the @p data with a @p key which is stored by
1242  * the Ecore_Evas @p ee. Be aware that a call to ecore_evas_free() will
1243  * not free any memory for the associated user data, this is the responsibility
1244  * of the caller.
1245  *
1246  * @see ecore_evas_callback_pre_free_set()
1247  * @see ecore_evas_free()
1248  * @see ecore_evas_data_get()
1249  */
1250 EAPI void        ecore_evas_data_set(Ecore_Evas *ee, const char *key, const void *data);
1251 /**
1252  * Set a callback for Ecore_Evas resize events.
1253  * @param ee The Ecore_Evas to set callbacks on
1254  * @param func The function to call
1255
1256  * A call to this function will set a callback on an Ecore_Evas, causing
1257  * @p func to be called whenever @p ee is resized.
1258  *
1259  * @warning If and when this function is called depends on the underlying
1260  * windowing system.
1261  */
1262 EAPI void        ecore_evas_callback_resize_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1263 /**
1264  * Set a callback for Ecore_Evas move events.
1265  * @param ee The Ecore_Evas to set callbacks on
1266  * @param func The function to call
1267
1268  * A call to this function will set a callback on an Ecore_Evas, causing
1269  * @p func to be called whenever @p ee is moved.
1270  *
1271  * @warning If and when this function is called depends on the underlying
1272  * windowing system.
1273  */
1274 EAPI void        ecore_evas_callback_move_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1275 /**
1276  * Set a callback for Ecore_Evas show events.
1277  * @param ee The Ecore_Evas to set callbacks on
1278  * @param func The function to call
1279
1280  * A call to this function will set a callback on an Ecore_Evas, causing
1281  * @p func to be called whenever @p ee is shown.
1282  *
1283  * @warning If and when this function is called depends on the underlying
1284  * windowing system.
1285  */
1286 EAPI void        ecore_evas_callback_show_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1287 /**
1288  * Set a callback for Ecore_Evas hide events.
1289  * @param ee The Ecore_Evas to set callbacks on
1290  * @param func The function to call
1291
1292  * A call to this function will set a callback on an Ecore_Evas, causing
1293  * @p func to be called whenever @p ee is hidden.
1294  *
1295  * @warning If and when this function is called depends on the underlying
1296  * windowing system.
1297  */
1298 EAPI void        ecore_evas_callback_hide_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1299 /**
1300  * Set a callback for Ecore_Evas delete request events.
1301  * @param ee The Ecore_Evas to set callbacks on
1302  * @param func The function to call
1303
1304  * A call to this function will set a callback on an Ecore_Evas, causing
1305  * @p func to be called whenever @p ee gets a delete request.
1306  *
1307  * @warning If and when this function is called depends on the underlying
1308  * windowing system.
1309  */
1310 EAPI void        ecore_evas_callback_delete_request_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1311 /**
1312  * Set a callback for Ecore_Evas destroy events.
1313  * @param ee The Ecore_Evas to set callbacks on
1314  * @param func The function to call
1315
1316  * A call to this function will set a callback on an Ecore_Evas, causing
1317  * @p func to be called whenever @p ee is destroyed.
1318  *
1319  * @warning If and when this function is called depends on the underlying
1320  * windowing system.
1321  */
1322 EAPI void        ecore_evas_callback_destroy_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1323 /**
1324  * Set a callback for Ecore_Evas focus in events.
1325  * @param ee The Ecore_Evas to set callbacks on
1326  * @param func The function to call
1327
1328  * A call to this function will set a callback on an Ecore_Evas, causing
1329  * @p func to be called whenever @p ee gets focus.
1330  *
1331  * @warning If and when this function is called depends on the underlying
1332  * windowing system.
1333  */
1334 EAPI void        ecore_evas_callback_focus_in_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1335 /**
1336  * Set a callback for Ecore_Evas focus out events.
1337  * @param ee The Ecore_Evas to set callbacks on
1338  * @param func The function to call
1339
1340  * A call to this function will set a callback on an Ecore_Evas, causing
1341  * @p func to be called whenever @p ee loses focus.
1342  *
1343  * @warning If and when this function is called depends on the underlying
1344  * windowing system.
1345  */
1346 EAPI void        ecore_evas_callback_focus_out_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1347 /**
1348  * Set a callback for Ecore_Evas sticky events.
1349  * @param ee The Ecore_Evas to set callbacks on
1350  * @param func The function to call
1351
1352  * A call to this function will set a callback on an Ecore_Evas, causing
1353  * @p func to be called whenever @p ee becomes sticky.
1354  *
1355  * @warning If and when this function is called depends on the underlying
1356  * windowing system.
1357  */
1358 EAPI void        ecore_evas_callback_sticky_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1359 /**
1360  * Set a callback for Ecore_Evas un-sticky events.
1361  * @param ee The Ecore_Evas to set callbacks on
1362  * @param func The function to call
1363
1364  * A call to this function will set a callback on an Ecore_Evas, causing
1365  * @p func to be called whenever @p ee becomes un-sticky.
1366  *
1367  * @warning If and when this function is called depends on the underlying
1368  * windowing system.
1369  */
1370 EAPI void        ecore_evas_callback_unsticky_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1371 /**
1372  * Set a callback for Ecore_Evas mouse in events.
1373  * @param ee The Ecore_Evas to set callbacks on
1374  * @param func The function to call
1375
1376  * A call to this function will set a callback on an Ecore_Evas, causing
1377  * @p func to be called whenever the mouse enters @p ee.
1378  *
1379  * @warning If and when this function is called depends on the underlying
1380  * windowing system.
1381  */
1382 EAPI void        ecore_evas_callback_mouse_in_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1383 /**
1384  * Set a callback for Ecore_Evas mouse out events.
1385  * @param ee The Ecore_Evas to set callbacks on
1386  * @param func The function to call
1387
1388  * A call to this function will set a callback on an Ecore_Evas, causing
1389  * @p func to be called whenever the mouse leaves @p ee.
1390  *
1391  * @warning If and when this function is called depends on the underlying
1392  * windowing system.
1393  */
1394 EAPI void        ecore_evas_callback_mouse_out_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1395 /**
1396  * Set a callback for Ecore_Evas pre render events.
1397  * @param ee The Ecore_Evas to set callbacks on
1398  * @param func The function to call
1399
1400  * A call to this function will set a callback on an Ecore_Evas, causing
1401  * @p func to be called just before the evas in @p ee is rendered.
1402  *
1403  * @warning If and when this function is called depends on the underlying
1404  * windowing system.
1405  */
1406 EAPI void        ecore_evas_callback_pre_render_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1407 /**
1408  * Set a callback for Ecore_Evas mouse post render events.
1409  * @param ee The Ecore_Evas to set callbacks on
1410  * @param func The function to call
1411
1412  * A call to this function will set a callback on an Ecore_Evas, causing
1413  * @p func to be called just after the evas in @p ee is rendered.
1414  *
1415  * @warning If and when this function is called depends on the underlying
1416  * windowing system.
1417  */
1418 EAPI void        ecore_evas_callback_post_render_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1419 /**
1420  * Set a callback for Ecore_Evas pre-free event.
1421  * @param ee The Ecore_Evas to set callbacks on
1422  * @param func The function to call
1423  *
1424  * A call to this function will set a callback on an Ecore_Evas, causing
1425  * @p func to be called just before the instance @p ee is freed.
1426  *
1427  * @warning If and when this function is called depends on the underlying
1428  * windowing system.
1429  */
1430 EAPI void        ecore_evas_callback_pre_free_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1431 /**
1432  * Set a callback for Ecore_Evas state changes.
1433  * @param ee The Ecore_Evas to set callbacks on
1434  * @param func The function to call
1435
1436  * A call to this function will set a callback on an Ecore_Evas, causing
1437  * @p func to be called whenever @p ee changes state.
1438  *
1439  * @since 1.2
1440  * @warning If and when this function is called depends on the underlying
1441  * windowing system.
1442  */
1443 EAPI void        ecore_evas_callback_state_change_set(Ecore_Evas *ee, Ecore_Evas_Event_Cb func);
1444
1445 /**
1446  * Get an Ecore_Evas's Evas
1447  * @param ee The Ecore_Evas whose Evas you wish to get
1448  * @return The Evas wrapped by @p ee
1449  *
1450  * This function returns the Evas contained within @p ee.
1451  */
1452 EAPI Evas       *ecore_evas_get(const Ecore_Evas *ee);
1453
1454 /**
1455  * Provide Managed move co-ordinates for an Ecore_Evas
1456  * @param ee The Ecore_Evas to move
1457  * @param x The x coordinate to set as the managed location
1458  * @param y The y coordinate to set as the managed location
1459  *
1460  * This sets the managed geometry position of the @p ee to (@p x, @p y)
1461  */
1462 EAPI void        ecore_evas_managed_move(Ecore_Evas *ee, int x, int y);
1463
1464 /**
1465  * Set whether an Ecore_Evas is shaped or not.
1466  *
1467  * @param ee The Ecore_Evas to shape.
1468  * @param shaped @c EINA_TRUE to shape, @c EINA_FALSE to not.
1469  *
1470  * This function allows one to make an Ecore_Evas shaped to the contents of the
1471  * evas. If @p shaped is @c EINA_TRUE, @p ee will be transparent in parts of
1472  * the evas that contain no objects. If @p shaped is @c EINA_FALSE, then @p ee
1473  * will be rectangular, and parts with no data will show random framebuffer
1474  * artifacting. For non-shaped Ecore_Evases, it is recommended to cover the
1475  * entire evas with a background object.
1476  */
1477 EAPI void        ecore_evas_shaped_set(Ecore_Evas *ee, Eina_Bool shaped);
1478
1479 /**
1480  * Query whether an Ecore_Evas is shaped or not.
1481  *
1482  * @param ee The Ecore_Evas to query.
1483  * @return @c EINA_TRUE if shaped, @c EINA_FALSE if not.
1484  *
1485  * This function returns @c EINA_TRUE if @p ee is shaped, and @c EINA_FALSE if not.
1486  */
1487 EAPI Eina_Bool   ecore_evas_shaped_get(const Ecore_Evas *ee);
1488 /**
1489  * @brief Show an Ecore_Evas' window
1490  *
1491  * @param ee The Ecore_Evas to show.
1492  *
1493  * This function makes @p ee visible.
1494  */
1495 EAPI void        ecore_evas_show(Ecore_Evas *ee);
1496 /**
1497  * @brief Hide an Ecore_Evas' window
1498  *
1499  * @param ee The Ecore_Evas to hide.
1500  *
1501  * This function makes @p ee hidden(not visible).
1502  */
1503 EAPI void        ecore_evas_hide(Ecore_Evas *ee);
1504
1505 /**
1506  * Activate (set focus to, via the window manager) an Ecore_Evas' window.
1507  * @param ee The Ecore_Evas to activate.
1508  *
1509  * This functions activates the Ecore_Evas.
1510  */
1511 EAPI void        ecore_evas_activate(Ecore_Evas *ee);
1512
1513
1514 /**
1515  * Set the minimum size of a given @c Ecore_Evas window
1516  *
1517  * @param ee An @c Ecore_Evas window's handle
1518  * @param w The minimum width
1519  * @param h The minimum height
1520  *
1521  * This function sets the minimum size of @p ee to be @p w x @p h.
1522  * One won't be able to resize that window to dimensions smaller than
1523  * the ones set.
1524  *
1525  * @note When base sizes are set, via ecore_evas_size_base_set(),
1526  * they'll be used to calculate a window's minimum size, instead of
1527  * those set by this function.
1528  *
1529  * @see ecore_evas_size_min_get()
1530  */
1531 EAPI void        ecore_evas_size_min_set(Ecore_Evas *ee, int w, int h);
1532
1533 /**
1534  * Get the minimum size set for a given @c Ecore_Evas window
1535  *
1536  * @param ee An @c Ecore_Evas window's handle
1537  * @param w A pointer to an int to place the minimum width in.
1538  * @param h A pointer to an int to place the minimum height in.
1539  *
1540  * @note Use @c NULL pointers on the size components you're not
1541  * interested in: they'll be ignored by the function.
1542  *
1543  * @see ecore_evas_size_min_set() for more details
1544  */
1545 EAPI void        ecore_evas_size_min_get(const Ecore_Evas *ee, int *w, int *h);
1546
1547 /**
1548  * Set the maximum size of a given @c Ecore_Evas window
1549  *
1550  * @param ee An @c Ecore_Evas window's handle
1551  * @param w The maximum width
1552  * @param h The maximum height
1553  *
1554  * This function sets the maximum size of @p ee to be @p w x @p h.
1555  * One won't be able to resize that window to dimensions bigger than
1556  * the ones set.
1557  *
1558  * @see ecore_evas_size_max_get()
1559  */
1560 EAPI void        ecore_evas_size_max_set(Ecore_Evas *ee, int w, int h);
1561
1562 /**
1563  * Get the maximum size set for a given @c Ecore_Evas window
1564  *
1565  * @param ee An @c Ecore_Evas window's handle
1566  * @param w A pointer to an int to place the maximum width in.
1567  * @param h A pointer to an int to place the maximum height in.
1568  *
1569  * @note Use @c NULL pointers on the size components you're not
1570  * interested in: they'll be ignored by the function.
1571  *
1572  * @see ecore_evas_size_max_set() for more details
1573  */
1574 EAPI void        ecore_evas_size_max_get(const Ecore_Evas *ee, int *w, int *h);
1575
1576 /**
1577  * Set the base size for a given @c Ecore_Evas window
1578  *
1579  * @param ee An @c Ecore_Evas window's handle
1580  * @param w The base width
1581  * @param h The base height
1582  *
1583  * This function sets the @b base size of @p ee to be @p w x @p h.
1584  * When base sizes are set, they'll be used to calculate a window's
1585  * @b minimum size, instead of those set by ecore_evas_size_min_get().
1586  *
1587  * @see ecore_evas_size_base_get()
1588  */
1589 EAPI void        ecore_evas_size_base_set(Ecore_Evas *ee, int w, int h);
1590
1591 /**
1592  * Get the base size set for a given @c Ecore_Evas window
1593  *
1594  * @param ee An @c Ecore_Evas window's handle
1595  * @param w A pointer to an int to place the base width in.
1596  * @param h A pointer to an int to place the base height in.
1597  *
1598  * @note Use @c NULL pointers on the size components you're not
1599  * interested in: they'll be ignored by the function.
1600  *
1601  * @see ecore_evas_size_base_set() for more details
1602  */
1603 EAPI void        ecore_evas_size_base_get(const Ecore_Evas *ee, int *w, int *h);
1604
1605 /**
1606  * Set the "size step" for a given @c Ecore_Evas window
1607  *
1608  * @param ee An @c Ecore_Evas window's handle
1609  * @param w The step width
1610  * @param h The step height
1611  *
1612  * This function sets the size steps of @p ee to be @p w x @p h. This
1613  * limits the size of this @c Ecore_Evas window to be @b always an
1614  * integer multiple of the step size, for each axis.
1615  */
1616 EAPI void        ecore_evas_size_step_set(Ecore_Evas *ee, int w, int h);
1617
1618 /**
1619  * Get the "size step" set for a given @c Ecore_Evas window
1620  *
1621  * @param ee An @c Ecore_Evas window's handle
1622  * @param w A pointer to an int to place the step width in.
1623  * @param h A pointer to an int to place the step height in.
1624  *
1625  * @note Use @c NULL pointers on the size components you're not
1626  * interested in: they'll be ignored by the function.
1627  *
1628  * @see ecore_evas_size_base_set() for more details
1629  */
1630 EAPI void        ecore_evas_size_step_get(const Ecore_Evas *ee, int *w, int *h);
1631
1632 /**
1633  * @brief Set the cursor of an Ecore_Evas.
1634  *
1635  * @param ee The Ecore_Evas
1636  * @param file  The path to an image file for the cursor.
1637  * @param layer The layer in which the cursor will appear.
1638  * @param hot_x The x coordinate of the cursor's hot spot.
1639  * @param hot_y The y coordinate of the cursor's hot spot.
1640  *
1641  * This function makes the mouse cursor over @p ee be the image specified by
1642  * @p file. The actual point within the image that the mouse is at is specified
1643  * by @p hot_x and @p hot_y, which are coordinates with respect to the top left
1644  * corner of the cursor image.
1645  *
1646  * @note This function creates an object from the image and uses
1647  * ecore_evas_object_cursor_set().
1648  *
1649  * @see ecore_evas_object_cursor_set()
1650  */
1651 EAPI void        ecore_evas_cursor_set(Ecore_Evas *ee, const char *file, int layer, int hot_x, int hot_y);
1652 /**
1653  * @brief Get information about an Ecore_Evas' cursor
1654  *
1655  * @param ee The Ecore_Evas to set
1656  * @param obj A pointer to an Evas_Object to place the cursor Evas_Object.
1657  * @param layer A pointer to an int to place the cursor's layer in.
1658  * @param hot_x A pointer to an int to place the cursor's hot_x coordinate in.
1659  * @param hot_y A pointer to an int to place the cursor's hot_y coordinate in.
1660  *
1661  * This function queries information about an Ecore_Evas' cursor.
1662  *
1663  * @see ecore_evas_cursor_set()
1664  * @see ecore_evas_object_cursor_set()
1665  */
1666 EAPI void        ecore_evas_cursor_get(const Ecore_Evas *ee, Evas_Object **obj, int *layer, int *hot_x, int *hot_y);
1667 /**
1668  * @brief Set the cursor of an Ecore_Evas
1669  *
1670  * @param ee The Ecore_Evas
1671  *
1672  * @param obj The Evas_Object which will be the cursor.
1673  * @param layer The layer in which the cursor will appear.
1674  * @param hot_x The x coordinate of the cursor's hot spot.
1675  * @param hot_y The y coordinate of the cursor's hot spot.
1676  *
1677  * This function makes the mouse cursor over @p ee be the object specified by
1678  * @p obj. The actual point within the object that the mouse is at is specified
1679  * by @p hot_x and @p hot_y, which are coordinates with respect to the top left
1680  * corner of the cursor object.
1681  *
1682  * @see ecore_evas_cursor_set()
1683  */
1684 EAPI void        ecore_evas_object_cursor_set(Ecore_Evas *ee, Evas_Object *obj, int layer, int hot_x, int hot_y);
1685
1686 /**
1687  * Tell the WM whether or not to ignore an Ecore_Evas' window
1688  *
1689  * @param ee The Ecore_Evas.
1690  * @param on @c EINA_TRUE to ignore, @c EINA_FALSE to not.
1691  *
1692  * This function causes the window manager to ignore @p ee if @p on is
1693  * @c EINA_TRUE, or not ignore @p ee if @p on is @c EINA_FALSE.
1694  */
1695 EAPI void        ecore_evas_override_set(Ecore_Evas *ee, Eina_Bool on);
1696
1697 /**
1698  * Query whether an Ecore_Evas' window is overridden or not
1699  *
1700  * @param ee The Ecore_Evas to set.
1701  * @return @c EINA_TRUE if @p ee is overridden, @c EINA_FALSE if not.
1702  */
1703 EAPI Eina_Bool   ecore_evas_override_get(const Ecore_Evas *ee);
1704
1705 /**
1706  * Set whether or not an Ecore_Evas' window should avoid damage
1707  *
1708  * @param ee The Ecore_Evas
1709  * @param on The type of the damage management
1710  *
1711  * This option causes updates of the Ecore_Evas to be done on a pixmap, and
1712  * then copied to the window, or the pixmap used directly on the window,
1713  * depending on the setting. Possible options are:
1714  *
1715  * @li @ref ECORE_EVAS_AVOID_DAMAGE_NONE - every expose event triggers a new
1716  * damage and consequently render of the affected area. The rendering of things
1717  * happens directly on the window;
1718  *
1719  * @li @ref ECORE_EVAS_AVOID_DAMAGE_EXPOSE - there's a pixmap where everything
1720  * is rendered into, and then copied to the window. On expose events, there's
1721  * no need to render things again, just to copy the exposed region to the
1722  * window;
1723  *
1724  * @li @ref ECORE_EVAS_AVOID_DAMAGE_BUILT_IN - there's the same pixmap as the
1725  * previous one, but it is set as a "background pixmap" of the window.  The
1726  * rendered things appear directly on the window, with no need to copy
1727  * anything, but would stay stored on the pixmap, so there's no need to render
1728  * things again on expose events. This option can be faster than the previous
1729  * one, but may lead to artifacts during resize of the window.
1730  */
1731 EAPI void        ecore_evas_avoid_damage_set(Ecore_Evas *ee, Ecore_Evas_Avoid_Damage_Type on);
1732
1733 /**
1734  * Query whether an Ecore_Evas' window avoids damage or not
1735  * @param ee The Ecore_Evas to set
1736  * @return The type of the damage management
1737  *
1738  */
1739 EAPI Ecore_Evas_Avoid_Damage_Type ecore_evas_avoid_damage_get(const Ecore_Evas *ee);
1740
1741 /**
1742  * Set the withdrawn state of an Ecore_Evas' window.
1743  * @param ee The Ecore_Evas whose window's withdrawn state is set.
1744  * @param withdrawn The Ecore_Evas window's new withdrawn state.
1745  *
1746  */
1747 EAPI void        ecore_evas_withdrawn_set(Ecore_Evas *ee, Eina_Bool withdrawn);
1748
1749 /**
1750  * Returns the withdrawn state of an Ecore_Evas' window.
1751  * @param ee The Ecore_Evas whose window's withdrawn state is returned.
1752  * @return The Ecore_Evas window's withdrawn state.
1753  *
1754  */
1755 EAPI Eina_Bool   ecore_evas_withdrawn_get(const Ecore_Evas *ee);
1756
1757 /**
1758  * Set the sticky state of an Ecore_Evas window.
1759  *
1760  * @param ee The Ecore_Evas whose window's sticky state is set.
1761  * @param sticky The Ecore_Evas window's new sticky state.
1762  *
1763  */
1764 EAPI void        ecore_evas_sticky_set(Ecore_Evas *ee, Eina_Bool sticky);
1765
1766 /**
1767  * Returns the sticky state of an Ecore_Evas' window.
1768  *
1769  * @param ee The Ecore_Evas whose window's sticky state is returned.
1770  * @return The Ecore_Evas window's sticky state.
1771  *
1772  */
1773 EAPI Eina_Bool   ecore_evas_sticky_get(const Ecore_Evas *ee);
1774 EAPI void        ecore_evas_manual_render_set(Ecore_Evas *ee, Eina_Bool manual_render);
1775 EAPI Eina_Bool   ecore_evas_manual_render_get(const Ecore_Evas *ee);
1776
1777 /**
1778  * @brief Registers an @c Ecore_Evas to receive events through ecore_input_evas.
1779  *
1780  * @param ee The @c Ecore_Evas handle.
1781  *
1782  * This function calls ecore_event_window_register() with the @p ee as its @c
1783  * id argument, @c window argument, and uses its @c Evas too. It is useful when
1784  * no @c window information is available on a given @c Ecore_Evas backend.
1785  *
1786  * @see ecore_evas_input_event_unregister()
1787  * @since 1.1
1788  */
1789 EAPI void        ecore_evas_input_event_register(Ecore_Evas *ee);
1790 /**
1791  * @brief Unregisters an @c Ecore_Evas receiving events through ecore_input_evas.
1792  *
1793  * @param ee The @c Ecore_Evas handle.
1794  *
1795  * @see ecore_evas_input_event_register()
1796  * @since 1.1
1797  */
1798 EAPI void        ecore_evas_input_event_unregister(Ecore_Evas *ee);
1799
1800 /**
1801  * @brief Force immediate rendering on a given @c Ecore_Evas window
1802  *
1803  * @param ee An @c Ecore_Evas handle
1804  *
1805  * Use this call to forcefully flush the @p ee's canvas rendering
1806  * pipeline, thus bring its window to an up to date state.
1807  */
1808 EAPI void        ecore_evas_manual_render(Ecore_Evas *ee);
1809 EAPI void        ecore_evas_comp_sync_set(Ecore_Evas *ee, Eina_Bool do_sync);
1810 EAPI Eina_Bool   ecore_evas_comp_sync_get(const Ecore_Evas *ee);
1811
1812 /**
1813  * @brief Get geometry of screen associated with this Ecore_Evas.
1814  *
1815  * @param ee The Ecore_Evas whose window's to query container screen geometry.
1816  * @param x where to return the horizontal offset value. May be @c NULL.
1817  * @param y where to return the vertical offset value. May be @c NULL.
1818  * @param w where to return the width value. May be @c NULL.
1819  * @param h where to return the height value. May be @c NULL.
1820  *
1821  * @since 1.1
1822  */
1823 EAPI void        ecore_evas_screen_geometry_get(const Ecore_Evas *ee, int *x, int *y, int *w, int *h);
1824
1825 /**
1826  * @brief Get the dpi of the screen the Ecore_Evas is primarily on.
1827  *
1828  * @param ee The Ecore_Evas whose window's to query.
1829  * @param xdpi Pointer to integer to store horizontal DPI. May be @c NULL.
1830  * @param ydpi Pointer to integer to store vertical DPI. May be @c NULL.
1831  *
1832  * @since 1.7
1833  */
1834 EAPI void        ecore_evas_screen_dpi_get(const Ecore_Evas *ee, int *xdpi, int *ydpi);
1835
1836 EAPI void        ecore_evas_draw_frame_set(Ecore_Evas *ee, Eina_Bool draw_frame);
1837 EAPI Eina_Bool   ecore_evas_draw_frame_get(const Ecore_Evas *ee);
1838
1839 /**
1840  * @brief Associate the given object to this ecore evas.
1841  *
1842  * @param ee The Ecore_Evas to associate to @a obj
1843  * @param obj The object to associate to @a ee
1844  * @param flags The association flags.
1845  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
1846  *
1847  * Association means that operations on one will affect the other, for
1848  * example moving the object will move the window, resize the object will
1849  * also affect the ecore evas window, hide and show applies as well.
1850  *
1851  * This is meant to simplify development, since you often need to associate
1852  * these events with your "base" objects, background or bottom-most object.
1853  *
1854  * Be aware that some methods might not be what you would like, deleting
1855  * either the window or the object will delete the other. If you want to
1856  * change that behavior, let's say to hide window when it's closed, you
1857  * must use ecore_evas_callback_delete_request_set() and set your own code,
1858  * like ecore_evas_hide(). Just remember that if you override delete_request
1859  * and still want to delete the window/object, you must do that yourself.
1860  *
1861  * Since we now define delete_request, deleting windows will not quit
1862  * main loop, if you wish to do so, you should listen for EVAS_CALLBACK_FREE
1863  * on the object, that way you get notified and you can call
1864  * ecore_main_loop_quit().
1865  *
1866  * Flags can be OR'ed of:
1867  * @li ECORE_EVAS_OBJECT_ASSOCIATE_BASE (or 0): to listen to basic events
1868  *     like delete, resize and move, but no stacking or layer are used.
1869  * @li ECORE_EVAS_OBJECT_ASSOCIATE_STACK: stacking operations will act
1870  *     on the Ecore_Evas, not the object. So evas_object_raise() will
1871  *     call ecore_evas_raise(). Relative operations (stack_above, stack_below)
1872  *     are still not implemented.
1873  * @li ECORE_EVAS_OBJECT_ASSOCIATE_LAYER: stacking operations will act
1874  *     on the Ecore_Evas, not the object. So evas_object_layer_set() will
1875  *     call ecore_evas_layer_set().
1876  * @li ECORE_EVAS_OBJECT_ASSOCIATE_DEL: the object delete will delete the
1877  *     ecore_evas as well as delete_requests on the ecore_evas will delete
1878  *     etc.
1879  */
1880 EAPI Eina_Bool    ecore_evas_object_associate(Ecore_Evas *ee, Evas_Object *obj, Ecore_Evas_Object_Associate_Flags flags);
1881 /**
1882  * @brief Cancel the association set with ecore_evas_object_associate().
1883  *
1884  * @param ee The Ecore_Evas to dissociate from @a obj
1885  * @param obj The object to dissociate from @a ee
1886  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
1887  */
1888 EAPI Eina_Bool    ecore_evas_object_dissociate(Ecore_Evas *ee, Evas_Object *obj);
1889 /**
1890  * @brief Get the object associated with @p ee
1891  *
1892  * @param ee The Ecore_Evas to get the object from.
1893  * @return The associated object, or @c NULL if there is no associated object.
1894  */
1895 EAPI Evas_Object *ecore_evas_object_associate_get(const Ecore_Evas *ee);
1896
1897 /* helper function to be used with ECORE_GETOPT_CALLBACK_*() */
1898 EAPI unsigned char ecore_getopt_callback_ecore_evas_list_engines(const Ecore_Getopt *parser, const Ecore_Getopt_Desc *desc, const char *str, void *data, Ecore_Getopt_Value *storage);
1899
1900 /**
1901  * @brief Get a list of all the ecore_evases.
1902  *
1903  * @return A list of ecore_evases.
1904  *
1905  * The returned list of ecore evases is only valid until the canvases are
1906  * destroyed (and should not be cached for instance). The list can be freed by
1907  * just deleting the list.
1908  */
1909 EAPI Eina_List   *ecore_evas_ecore_evas_list_get(void);
1910
1911 /* specific calls to an x11 environment ecore_evas */
1912 EAPI void           ecore_evas_x11_leader_set(Ecore_Evas *ee, Ecore_X_Window win);
1913 EAPI Ecore_X_Window ecore_evas_x11_leader_get(Ecore_Evas *ee);
1914 EAPI void           ecore_evas_x11_leader_default_set(Ecore_Evas *ee);
1915 EAPI void           ecore_evas_x11_shape_input_rectangle_set(Ecore_Evas *ee, int x, int y, int w, int h);
1916 EAPI void           ecore_evas_x11_shape_input_rectangle_add(Ecore_Evas *ee, int x, int y, int w, int h);
1917 EAPI void           ecore_evas_x11_shape_input_rectangle_subtract(Ecore_Evas *ee, int x, int y, int w, int h);
1918 EAPI void           ecore_evas_x11_shape_input_empty(Ecore_Evas *ee);
1919 EAPI void           ecore_evas_x11_shape_input_reset(Ecore_Evas *ee);
1920 EAPI void           ecore_evas_x11_shape_input_apply(Ecore_Evas *ee);
1921
1922 /**
1923  * @defgroup Ecore_Evas_Ews Ecore_Evas Single Process Windowing System.
1924  *
1925  * These are global scope functions to manage the EWS to be used by
1926  * ecore_evas_ews_new().
1927  *
1928  * @since 1.1
1929  * @{
1930  */
1931
1932 /**
1933  * Sets the engine to be used by the backing store engine.
1934  *
1935  * @param engine The engine to be set.
1936  * @param options The options of the engine to be set.
1937  * @return @c EINA_TRUE on success, @c EINA_FALSE if ews is already in use.
1938  * @since 1.1
1939  */
1940 EAPI Eina_Bool ecore_evas_ews_engine_set(const char *engine, const char *options);
1941
1942 /**
1943  * Reconfigure the backing store used.
1944  *
1945  * @param x The X coordinate to be used.
1946  * @param y The Y coordinate to be used.
1947  * @param w The width of the Ecore_Evas to setup.
1948  * @param h The height of the Ecore_Evas to setup.
1949  * @return @c EINA_TRUE on success, @c EINA_FALSE otherwise.
1950  * @since 1.1
1951  */
1952 EAPI Eina_Bool ecore_evas_ews_setup(int x, int y, int w, int h);
1953
1954 /**
1955  * Return the internal backing store in use.
1956  *
1957  * @return The internal backing store in use.
1958  * @note this will forced it to be created, making future calls to
1959  * ecore_evas_ews_engine_set() void.
1960  *
1961  * @see ecore_evas_ews_evas_get()
1962  * @since 1.1
1963  */
1964 EAPI Ecore_Evas *ecore_evas_ews_ecore_evas_get(void);
1965
1966 /**
1967  * Return the internal backing store in use.
1968  *
1969  * @return The internal backing store in use.
1970  * @note this will forced it to be created, making future calls to
1971  * ecore_evas_ews_engine_set() void.
1972  *
1973  * @see ecore_evas_ews_ecore_evas_get()
1974  * @since 1.1
1975  */
1976 EAPI Evas *ecore_evas_ews_evas_get(void);
1977
1978 /**
1979  * Get the current background.
1980  */
1981 EAPI Evas_Object *ecore_evas_ews_background_get(void);
1982
1983 /**
1984  * Set the current background, must be created at evas ecore_evas_ews_evas_get()
1985  *
1986  * It will be kept at lowest layer (EVAS_LAYER_MIN) and below
1987  * everything else. You can set any object, default is a black
1988  * rectangle.
1989  *
1990  * @note previous object will be deleted!
1991  * @param o The Evas_Object for which to set the background.
1992  */
1993 EAPI void ecore_evas_ews_background_set(Evas_Object *o);
1994
1995 /**
1996  * Return all Ecore_Evas* created by EWS.
1997  *
1998  * @return An eina list of Ecore_evases.
1999  e @note Do not change the returned list or its contents.
2000  * @since 1.1
2001  */
2002 EAPI const Eina_List *ecore_evas_ews_children_get(void);
2003
2004 /**
2005  * Set the identifier of the manager taking care of internal windows.
2006  *
2007  * The ECORE_EVAS_EWS_EVENT_MANAGER_CHANGE event is issued. Consider
2008  * handling it to know if you should stop handling events yourself
2009  * (ie: another manager took over)
2010  *
2011  * @param manager any unique identifier address.
2012  *
2013  * @see ecore_evas_ews_manager_get()
2014  * @since 1.1
2015  */
2016 EAPI void        ecore_evas_ews_manager_set(const void *manager);
2017
2018 /**
2019  * Get the identifier of the manager taking care of internal windows.
2020  *
2021  * @return the value set by ecore_evas_ews_manager_set()
2022  * @since 1.1
2023  */
2024 EAPI const void *ecore_evas_ews_manager_get(void);
2025
2026 EAPI extern int ECORE_EVAS_EWS_EVENT_MANAGER_CHANGE; /**< manager was changed @since 1.1 */
2027 EAPI extern int ECORE_EVAS_EWS_EVENT_ADD; /**< window was created @since 1.1 */
2028 EAPI extern int ECORE_EVAS_EWS_EVENT_DEL; /**< window was deleted, pointer is already invalid but may be used as reference for further cleanup work. @since 1.1 */
2029 EAPI extern int ECORE_EVAS_EWS_EVENT_RESIZE; /**< window was resized @since 1.1 */
2030 EAPI extern int ECORE_EVAS_EWS_EVENT_MOVE; /**< window was moved @since 1.1 */
2031 EAPI extern int ECORE_EVAS_EWS_EVENT_SHOW; /**< window become visible @since 1.1 */
2032 EAPI extern int ECORE_EVAS_EWS_EVENT_HIDE; /**< window become hidden @since 1.1 */
2033 EAPI extern int ECORE_EVAS_EWS_EVENT_FOCUS; /**< window was focused @since 1.1 */
2034 EAPI extern int ECORE_EVAS_EWS_EVENT_UNFOCUS; /**< window lost focus @since 1.1 */
2035 EAPI extern int ECORE_EVAS_EWS_EVENT_RAISE; /**< window was raised @since 1.1 */
2036 EAPI extern int ECORE_EVAS_EWS_EVENT_LOWER; /**< window was lowered @since 1.1 */
2037 EAPI extern int ECORE_EVAS_EWS_EVENT_ACTIVATE; /**< window was activated @since 1.1 */
2038
2039 EAPI extern int ECORE_EVAS_EWS_EVENT_ICONIFIED_CHANGE; /**< window minimized/iconified changed @since 1.1 */
2040 EAPI extern int ECORE_EVAS_EWS_EVENT_MAXIMIZED_CHANGE; /**< window maximized changed @since 1.1 */
2041 EAPI extern int ECORE_EVAS_EWS_EVENT_LAYER_CHANGE; /**< window layer changed @since 1.1 */
2042 EAPI extern int ECORE_EVAS_EWS_EVENT_FULLSCREEN_CHANGE; /**< window fullscreen changed @since 1.1 */
2043 EAPI extern int ECORE_EVAS_EWS_EVENT_CONFIG_CHANGE; /**< some other window property changed (title, name, class, alpha, transparent, shaped...) @since 1.1 */
2044
2045 /**
2046  * @}
2047  */
2048
2049 /**
2050  * @defgroup Ecore_Evas_Extn External plug/socket infrastructure to remote canvases
2051  *
2052  * These functions allow 1 process to create a "socket" was pluged into which another
2053  * process can create a "plug" remotely to plug into.
2054  * Socket can provides content for several plugs.
2055  * This is best for small sized objects (about the size range
2056  * of a small icon up to a few large icons). Sine the plug is actually an
2057  * image object, you can fetch the pixel data
2058  *
2059  * @since 1.2
2060  * @{
2061  */
2062
2063 EAPI extern int ECORE_EVAS_EXTN_CLIENT_ADD; /**< this event is received when a plug has connected to an extn socket @since 1.2 */
2064 EAPI extern int ECORE_EVAS_EXTN_CLIENT_DEL; /**< this event is received when a plug has disconnected from an extn socket @since 1.2 */
2065
2066 /**
2067  * @brief Create a new Ecore_Evas canvas for the new external ecore evas socket
2068  *
2069  * @param w The width of the canvas, in pixels
2070  * @param h The height of the canvas, in pixels
2071  * @return A new @c Ecore_Evas instance or @c NULL, on failure
2072  *
2073  * This creates a new extn_socket canvas wrapper, with image data array
2074  * @b bound to the ARGB format, 8 bits per pixel.
2075  *
2076  * If creation is successful, an Ecore_Evas handle is returned or @c NULL if
2077  * creation fails. Also focus, show, hide etc. callbacks will also be called
2078  * if the plug object is shown, or already visible on connect, or if it is
2079  * hidden later, focused or unfocused.
2080  *
2081  * This function has to be flowed by ecore_evas_extn_socket_listen(),
2082  * for starting ecore ipc service.
2083  *
2084  * @code
2085  * Eina_Bool res = EINA_FALSE;
2086  * Ecore_Evas *ee = ecore_evas_extn_socket_new(1, 1);
2087  *
2088  * res = ecore_evas_extn_socket_listen("svcname", 1, EINA_FALSE);
2089  * if (!res) return;
2090  * ecore_evas_resize(ee, 240, 400);
2091  * @endcode
2092  *
2093  * or
2094  *
2095  * @code
2096  * Eina_Bool res = EINA_FALSE;
2097  * Ecore_Evas *ee = ecore_evas_extn_socket_new(240, 400);
2098  *
2099  * res = ecore_evas_extn_socket_listen("svcname", 1, EINA_FALSE);
2100  * if (!res) return;
2101  * @endcode
2102  *
2103  * When a client(plug) connects, you will get the ECORE_EVAS_EXTN_CLIENT_ADD event
2104  * in the ecore event queue, with event_info being the image object pointer
2105  * passed as a void pointer. When a client disconnects you will get the
2106  * ECORE_EVAS_EXTN_CLIENT_DEL event.
2107  *
2108  * You can set up event handles for these events as follows:
2109  *
2110  * @code
2111  * static void client_add_cb(void *data, int event, void *event_info)
2112  * {
2113  *   Evas_Object *obj = event_info;
2114  *   printf("client added to image object %p\n", obj);
2115  *   evas_object_show(obj);
2116  * }
2117  *
2118  * static void client_del_cb(void *data, int event, void *event_info)
2119  * {
2120  *   Evas_Object *obj = event_info;
2121  *   printf("client deleted from image object %p\n", obj);
2122  *   evas_object_hide(obj);
2123  * }
2124  *
2125  * void setup(void)
2126  * {
2127  *   ecore_event_handler_add(ECORE_EVAS_EXTN_CLIENT_ADD,
2128  *                           client_add_cb, NULL);
2129  *   ecore_event_handler_add(ECORE_EVAS_EXTN_CLIENT_DEL,
2130  *                           client_del_cb, NULL);
2131  * }
2132  * @endcode
2133  *
2134  * Note that events come in later after the event happened. You may want to be
2135  * careful as data structures you had associated with the image object
2136  * may have been freed after deleting, but the object may still be around
2137  * awating cleanup and thus still be valid.You can change the size with something like:
2138  *
2139  * @see ecore_evas_extn_socket_listen()
2140  * @see ecore_evas_extn_plug_new()
2141  * @see ecore_evas_extn_plug_object_data_lock()
2142  * @see ecore_evas_extn_plug_object_data_unlock()
2143  *
2144  * @since 1.2
2145  */
2146 EAPI Ecore_Evas *ecore_evas_extn_socket_new(int w, int h);
2147
2148 /**
2149  * @brief Create a socket to provide the service for external ecore evas
2150  * socket.
2151  *
2152  * @param ee The Ecore_Evas.
2153  * @param svcname The name of the service to be advertised. ensure that it is
2154  * unique (when combined with @p svcnum) otherwise creation may fail.
2155  * @param svcnum A number (any value, @c 0 being the common default) to
2156  * differentiate multiple instances of services with the same name.
2157  * @param svcsys A boolean that if true, specifies to create a system-wide
2158  * service all users can connect to, otherwise the service is private to the
2159  * user ide that created the service.
2160  * @return @c EINA_TRUE if creation is successful, @c EINA_FALSE if it does
2161  * not.
2162  *
2163  * This creates socket specified by @p svcname, @p svcnum and @p svcsys. If
2164  * creation is successful, @c EINA_TRUE is returned or @c EINA_FALSE if
2165  * creation fails.
2166  *
2167  * @see ecore_evas_extn_socket_new()
2168  * @see ecore_evas_extn_plug_new()
2169  * @see ecore_evas_extn_plug_object_data_lock()
2170  * @see ecore_evas_extn_plug_object_data_unlock()
2171  *
2172  * @since 1.2
2173  */
2174 EAPI Eina_Bool ecore_evas_extn_socket_listen(Ecore_Evas *ee, const char *svcname, int svcnum, Eina_Bool svcsys);
2175
2176 /**
2177  * @brief Lock the pixel data so the socket cannot change it
2178  *
2179  * @param obj The image object returned by ecore_evas_extn_plug_new() to lock
2180  *
2181  * You may need to get the image pixel data with evas_object_image_data_get()
2182  * from the image object, but need to ensure that it does not change while
2183  * you are using the data. This function lets you set an advisory lock on the
2184  * image data so the external plug process will not render to it or alter it.
2185  *
2186  * You should only hold the lock for just as long as you need to read out the
2187  * image data or otherwise deal with it, and then unlock it with
2188  * ecore_evas_extn_plug_object_data_unlock(). Keeping a lock over more than
2189  * 1 iteration of the main ecore loop will be problematic, so avoid it. Also
2190  * forgetting to unlock may cause the socket process to freeze and thus create
2191  * odd behavior.
2192  *
2193  * @see ecore_evas_extn_plug_new()
2194  * @see ecore_evas_extn_plug_object_data_unlock()
2195  *
2196  * @since 1.2
2197  */
2198 EAPI void ecore_evas_extn_plug_object_data_lock(Evas_Object *obj);
2199
2200 /**
2201  * @brief Unlock the pixel data so the socket can change it again.
2202  *
2203  * @param obj The image object returned by ecore_evas_extn_plug_new() to unlock
2204  *
2205  * This unlocks after an advisor lock has been taken by
2206  * ecore_evas_extn_plug_object_data_lock().
2207  *
2208  * @see ecore_evas_extn_plug_new()
2209  * @see ecore_evas_extn_plug_object_data_lock()
2210  *
2211  * @since 1.2
2212  */
2213 EAPI void ecore_evas_extn_plug_object_data_unlock(Evas_Object *obj);
2214
2215 /**
2216  * @brief Create a new external ecore evas plug
2217  *
2218  * @param ee_target The Ecore_Evas containing the canvas in which the new image object will live.
2219  * @return An evas image object that will contain the image output of a socket.
2220  *
2221  * This creates an image object that will contain the output of another
2222  * processes socket canvas when it connects. All input will be sent back to
2223  * this process as well, effectively swallowing or placing the socket process
2224  * in the canvas of the plug process in place of the image object. The image
2225  * object by default is created to be filled (equivalent of
2226  * evas_object_image_filled_add() on creation) so image content will scale
2227  * to fill the image unless otherwise reconfigured. The Ecore_Evas size
2228  * of the plug is the master size and determines size in pixels of the
2229  * plug canvas. You can change the size with something like:
2230  *
2231  * @code
2232  * Eina_Bool res = EINA_FALSE;
2233  * Evas_Object *obj = ecore_evas_extn_plug_new(ee);
2234  *
2235  * res = ecore_evas_extn_plug_connect("svcname", 1, EINA_FALSE);
2236  * if (!res) return;
2237  * ecore_evas_resize(ee, 240, 400);
2238  * @endcode
2239  *
2240  * @see ecore_evas_extn_socket_new()
2241  * @see ecore_evas_extn_plug_connect()
2242  * @since 1.2
2243  */
2244 EAPI Evas_Object *ecore_evas_extn_plug_new(Ecore_Evas *ee_target);
2245
2246 /**
2247  * @brief Connect an external ecore evas plug to service provided by external
2248  * ecore evas socket.
2249  *
2250  * @param obj The Ecore_Evas containing the canvas in which the new image
2251  * object will live.
2252  * @param svcname The service name to connect to set up by the socket.
2253  * @param svcnum The service number to connect to (set up by socket).
2254  * @param svcsys Boolean to set if the service is a system one or not (set up
2255  * by socket).
2256  * @return @c EINA_TRUE if creation is successful, @c EINA_FALSE if it does
2257  * not.
2258  *
2259  * @see ecore_evas_extn_plug_new()
2260  *
2261  * @since 1.2
2262  */
2263 EAPI Eina_Bool ecore_evas_extn_plug_connect(Evas_Object *obj, const char *svcname, int svcnum, Eina_Bool svcsys);
2264
2265 /**
2266  * @}
2267  */
2268
2269 /**
2270  * @}
2271  */
2272
2273 #ifdef __cplusplus
2274 }
2275 #endif
2276
2277 #endif