1 #ifndef _EVAS_H
2 # error You shall not include this header directly
3 #endif
4 
5 /**
6  * @ingroup Evas_Canvas
7  *
8  * @{
9  */
10 /**
11  * Creates a new empty evas.
12  *
13  * Note that before you can use the evas, you will to at a minimum:
14  * @li Set its render method with @ref evas_output_method_set .
15  * @li Set its viewport size with @ref evas_output_viewport_set .
16  * @li Set its size of the canvas with @ref evas_output_size_set .
17  * @li Ensure that the render engine is given the correct settings
18  *     with @ref evas_engine_info_set .
19  *
20  * This function should only fail if the memory allocation fails
21  *
22  * @note this function is very low level. Instead of using it
23  *       directly, consider using the high level functions in
24  *       @ref Ecore_Evas_Group such as @c ecore_evas_new(). See
25  *       @ref Ecore.
26  *
27  * @attention it is recommended that one calls evas_init() before
28  *       creating new canvas.
29  *
30  * @return A new uninitialised Evas canvas on success. Otherwise, @c NULL.
31  * @ingroup Evas_Canvas
32  */
33 EAPI Evas             *evas_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
34 
35 /**
36  * Frees the given evas and any objects created on it.
37  *
38  * Any objects with 'free' callbacks will have those callbacks called
39  * in this function.
40  *
41  * @param   e The given evas.
42  *
43  * @ingroup Evas_Canvas
44  */
45 EAPI void              evas_free(Evas *e)  EINA_ARG_NONNULL(1);
46 
47 typedef struct _Evas_Engine_Info /** Generic engine information. Generic info is useless */
48 {
49    int magic; /**< Magic number */
50 } Evas_Engine_Info;
51 
52 /**
53  * @brief Applies the engine settings for the given evas from the given
54  * @c Evas_Engine_Info structure.
55  *
56  * To get the Evas_Engine_Info structure to use, call
57  * @ref evas_engine_info_get. Do not try to obtain a pointer to an
58  * @c Evas_Engine_Info structure in any other way.
59  *
60  * You will need to call this function at least once before you can create
61  * objects on an evas or render that evas. Some engines allow their settings to
62  * be changed more than once.
63  *
64  * Once called, the @c info pointer should be considered invalid.
65  *
66  * @param[in] info The pointer to the engine info to use.
67  *
68  * @return @c true if no error occurred, @c false otherwise.
69  *
70  * @ingroup Evas_Canvas
71  */
72 EAPI Eina_Bool evas_engine_info_set(Evas *obj, Evas_Engine_Info *info);
73 
74 /**
75  * @brief Retrieves the current render engine info struct from the given evas.
76  *
77  * The returned structure is publicly modifiable.  The contents are valid until
78  * either @ref evas_engine_info_set or @ref evas_render are called.
79  *
80  * This structure does not need to be freed by the caller.
81  *
82  * @return The pointer to the engine info to use.
83  *
84  * @ingroup Evas_Canvas
85  */
86 EAPI Evas_Engine_Info *evas_engine_info_get(const Evas *obj);
87 
88 /**
89  * @brief Get the maximum image size evas can possibly handle.
90  *
91  * This function returns the largest image or surface size that evas can handle
92  * in pixels, and if there is one, returns @c true. It returns @c false if no
93  * extra constraint on maximum image size exists. You still should check the
94  * return values of @c maxw and @c maxh as there may still be a limit, just a
95  * much higher one.
96  *
97  * @param[in] obj The object.
98  * @param[out] max The maximum image size (in pixels).
99  *
100  * @return @c true on success, @c false otherwise
101  */
102 EAPI Eina_Bool evas_image_max_size_get(Eo *eo_e, int *w, int *h);
103 
104 
105 #include "canvas/evas_canvas_eo.legacy.h"
106 
107 /**
108  * @}
109  */
110 
111 /** @addtogroup Evas_Keys
112  * @{
113  */
114 
115 /**
116  * An opaque type containing information on which lock keys are registered in
117  * an Evas canvas.
118  */
119 typedef struct _Evas_Lock Evas_Lock;
120 
121 /**
122  * An opaque type containing information on which modifier keys are registered
123  * in an Evas canvas.
124  */
125 typedef struct _Evas_Modifier Evas_Modifier;
126 
127 /**
128  * A bitmask of modifier keys.
129  *
130  * See evas_key_modifier_mask_get() for the keyname to bit conversion.
131  */
132 typedef unsigned long long Evas_Modifier_Mask;
133 
134 /**
135  * @}
136  */
137 
138 
139 /**
140  * @addtogroup Evas_Canvas_Events
141  *
142  * @{
143  */
144 
145 typedef struct _Evas_Event_Mouse_Down    Evas_Event_Mouse_Down; /**< Event structure for #EVAS_CALLBACK_MOUSE_DOWN event callbacks */
146 typedef struct _Evas_Event_Mouse_Up      Evas_Event_Mouse_Up; /**< Event structure for #EVAS_CALLBACK_MOUSE_UP event callbacks */
147 typedef struct _Evas_Event_Mouse_In      Evas_Event_Mouse_In; /**< Event structure for #EVAS_CALLBACK_MOUSE_IN event callbacks */
148 typedef struct _Evas_Event_Mouse_Out     Evas_Event_Mouse_Out; /**< Event structure for #EVAS_CALLBACK_MOUSE_OUT event callbacks */
149 typedef struct _Evas_Event_Mouse_Move    Evas_Event_Mouse_Move; /**< Event structure for #EVAS_CALLBACK_MOUSE_MOVE event callbacks */
150 typedef struct _Evas_Event_Mouse_Wheel   Evas_Event_Mouse_Wheel; /**< Event structure for #EVAS_CALLBACK_MOUSE_WHEEL event callbacks */
151 typedef struct _Evas_Event_Multi_Down    Evas_Event_Multi_Down; /**< Event structure for #EVAS_CALLBACK_MULTI_DOWN event callbacks */
152 typedef struct _Evas_Event_Multi_Up      Evas_Event_Multi_Up; /**< Event structure for #EVAS_CALLBACK_MULTI_UP event callbacks */
153 typedef struct _Evas_Event_Multi_Move    Evas_Event_Multi_Move; /**< Event structure for #EVAS_CALLBACK_MULTI_MOVE event callbacks */
154 typedef struct _Evas_Event_Key_Down      Evas_Event_Key_Down; /**< Event structure for #EVAS_CALLBACK_KEY_DOWN event callbacks */
155 typedef struct _Evas_Event_Key_Up        Evas_Event_Key_Up; /**< Event structure for #EVAS_CALLBACK_KEY_UP event callbacks */
156 typedef struct _Evas_Event_Hold          Evas_Event_Hold; /**< Event structure for #EVAS_CALLBACK_HOLD event callbacks */
157 typedef struct _Evas_Event_Axis_Update   Evas_Event_Axis_Update; /**< Event structure for #EVAS_CALLBACK_AXIS_UPDATE event callbacks @since 1.13 */
158 
159 struct _Evas_Event_Mouse_Down /** Mouse button press event */
160 {
161    int               button; /**< Mouse button number that went down (1 - 32) */
162 
163    Evas_Point        output; /**< The X/Y location of the cursor */
164    Evas_Coord_Point  canvas; /**< The X/Y location of the cursor */
165 
166    void             *data;
167    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
168    Evas_Lock        *locks;
169 
170    Evas_Button_Flags flags; /**< button flags set during the event */
171    unsigned int      timestamp;
172    Evas_Event_Flags  event_flags;
173    Evas_Device      *dev;
174    Evas_Object      *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */
175 };
176 
177 struct _Evas_Event_Mouse_Up /** Mouse button release event */
178 {
179    int               button; /**< Mouse button number that was raised (1 - 32) */
180 
181    Evas_Point        output; /**< The X/Y location of the cursor */
182    Evas_Coord_Point  canvas; /**< The X/Y location of the cursor */
183 
184    void             *data;
185    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
186    Evas_Lock        *locks;
187 
188    Evas_Button_Flags flags; /**< button flags set during the event */
189    unsigned int      timestamp;
190    Evas_Event_Flags  event_flags;
191    Evas_Device      *dev;
192    Evas_Object     *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */
193 };
194 
195 struct _Evas_Event_Mouse_In /** Mouse enter event */
196 {
197    int              buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
198 
199    Evas_Point        output; /**< The X/Y location of the cursor */
200    Evas_Coord_Point  canvas; /**< The X/Y location of the cursor */
201 
202    void            *data;
203    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
204    Evas_Lock       *locks;
205    unsigned int     timestamp;
206    Evas_Event_Flags event_flags;
207    Evas_Device     *dev;
208    Evas_Object     *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */
209 };
210 
211 struct _Evas_Event_Mouse_Out /** Mouse leave event */
212 {
213    int              buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
214 
215    Evas_Point        output; /**< The X/Y location of the cursor */
216    Evas_Coord_Point  canvas; /**< The X/Y location of the cursor */
217 
218    void            *data;
219    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
220    Evas_Lock       *locks;
221    unsigned int     timestamp;
222    Evas_Event_Flags event_flags;
223    Evas_Device     *dev;
224    Evas_Object     *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */
225 };
226 
227 struct _Evas_Event_Mouse_Move /** Mouse move event */
228 {
229    int              buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
230 
231    Evas_Position    cur; /**< Current mouse position */
232    Evas_Position    prev; /**< Previous mouse position */
233 
234    void            *data;
235    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
236    Evas_Lock       *locks;
237    unsigned int     timestamp;
238    Evas_Event_Flags event_flags;
239    Evas_Device     *dev;
240    Evas_Object     *event_src; /**< The Evas Object that actually triggered the event, used in cases of proxy event propagation */
241 };
242 
243 struct _Evas_Event_Mouse_Wheel /** Wheel event */
244 {
245    int              direction; /**< Axis of screen wheel - 0 = default up/down wheel, 1 = horizontal left/right wheel */
246    int              z; /**< The step for the wheel movement relative to the direction above...,-2,-1 = down, 1,2,... = up */
247 
248    Evas_Point        output; /**< The X/Y location of the cursor */
249    Evas_Coord_Point  canvas; /**< The X/Y location of the cursor */
250 
251    void            *data;
252    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
253    Evas_Lock       *locks;
254    unsigned int     timestamp;
255    Evas_Event_Flags event_flags;
256    Evas_Device     *dev;
257 };
258 
259 struct _Evas_Event_Multi_Down /** Multi button press event */
260 {
261    int                        device; /**< Multi device number that went down (1 or more for extra touches) */
262    double                     radius, radius_x, radius_y;
263    double                     pressure, angle;
264 
265    Evas_Point                 output;
266    Evas_Coord_Precision_Point canvas;
267 
268    void                      *data;
269    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
270    Evas_Lock                 *locks;
271 
272    Evas_Button_Flags flags; /**< button flags set during the event */
273    unsigned int               timestamp;
274    Evas_Event_Flags           event_flags;
275    Evas_Device               *dev;
276 };
277 
278 struct _Evas_Event_Multi_Up /** Multi button release event */
279 {
280    int                        device; /**< Multi device number that went up (1 or more for extra touches) */
281    double                     radius, radius_x, radius_y;
282    double                     pressure, angle;
283 
284    Evas_Point                 output;
285    Evas_Coord_Precision_Point canvas;
286 
287    void                      *data;
288    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
289    Evas_Lock                 *locks;
290 
291    Evas_Button_Flags flags; /**< button flags set during the event */
292    unsigned int               timestamp;
293    Evas_Event_Flags           event_flags;
294    Evas_Device               *dev;
295 };
296 
297 struct _Evas_Event_Multi_Move /** Multi button down event */
298 {
299    int                     device; /**< Multi device number that moved (1 or more for extra touches) */
300    double                  radius, radius_x, radius_y;
301    double                  pressure, angle;
302 
303    Evas_Precision_Position cur;
304 
305    void                   *data;
306    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
307    Evas_Lock              *locks;
308    unsigned int            timestamp;
309    Evas_Event_Flags        event_flags;
310    Evas_Device            *dev;
311 };
312 
313 struct _Evas_Event_Key_Down /** Key press event */
314 {
315    char            *keyname; /**< the name string of the key pressed */
316    void            *data;
317    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
318    Evas_Lock       *locks;
319 
320    const char      *key; /**< The logical key : (eg shift+1 == exclamation) */
321    const char      *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */
322    const char      *compose; /**< A UTF8 string if this keystroke has modified a string in the middle of being composed - this string replaces the previous one */
323    unsigned int     timestamp;
324    Evas_Event_Flags event_flags;
325    Evas_Device     *dev;
326 
327    unsigned int     keycode; /**< Key scan code numeric value @since 1.10 */
328 };
329 
330 struct _Evas_Event_Key_Up /** Key release event */
331 {
332    char            *keyname; /**< the name string of the key released */
333    void            *data;
334    Evas_Modifier    *modifiers; /**< modifier keys pressed during the event */
335    Evas_Lock       *locks;
336 
337    const char      *key; /**< The logical key : (eg shift+1 == exclamation) */
338    const char      *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */
339    const char      *compose; /**< A UTF8 string if this keystroke has modified a string in the middle of being composed - this string replaces the previous one */
340    unsigned int     timestamp;
341    Evas_Event_Flags event_flags;
342    Evas_Device     *dev;
343 
344    unsigned int     keycode; /**< Key scan code numeric value @since 1.10 */
345 };
346 
347 struct _Evas_Event_Hold /** Hold change event */
348 {
349    int              hold; /**< The hold flag */
350    void            *data;
351 
352    unsigned int     timestamp;
353    Evas_Event_Flags event_flags;
354    Evas_Device     *dev;
355 };
356 
357 typedef enum _Evas_Axis_Label
358 {
359    EVAS_AXIS_LABEL_UNKNOWN,       /**< Axis containing unknown (or not yet representable) data. Range: Unbounded. Unit: Undefined. @since 1.13 */
360    EVAS_AXIS_LABEL_X,             /**< Position along physical X axis; not window relative. Range: Unbounded. Unit: Undefined. @since 1.13 */
361    EVAS_AXIS_LABEL_Y,             /**< Position along physical Y axis; not window relative. Range: Unbounded. Unit: Undefined. @since 1.13 */
362    EVAS_AXIS_LABEL_PRESSURE,      /**< Force applied to tool tip. Range: [0.0, 1.0]. Unit: Unitless. @since 1.13 */
363    EVAS_AXIS_LABEL_DISTANCE,      /**< Relative distance along physical Z axis. Range: [0.0, 1.0]. Unit: Unitless @since 1.13 */
364    EVAS_AXIS_LABEL_AZIMUTH,       /**< Angle of tool about the Z axis from positive X axis. Range: [-PI, PI]. Unit: Radians. @since 1.13 */
365    EVAS_AXIS_LABEL_TILT,          /**< Angle of tool about plane of sensor from positive Z axis. Range: [0.0, PI]. Unit: Radians. @since 1.13 */
366    EVAS_AXIS_LABEL_TWIST,         /**< Rotation of tool about its major axis from its "natural" position. Range: [-PI, PI] Unit: Radians. @since 1.13 */
367    EVAS_AXIS_LABEL_TOUCH_WIDTH_MAJOR,   /**< Length of contact ellipse along AZIMUTH. Range: Unbounded: Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */
368    EVAS_AXIS_LABEL_TOUCH_WIDTH_MINOR,   /**< Length of contact ellipse perpendicular to AZIMUTH. Range: Unbounded. Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */
369    EVAS_AXIS_LABEL_TOOL_WIDTH_MAJOR,    /**< Length of tool ellipse along AZIMUTH. Range: Unbounded. Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */
370    EVAS_AXIS_LABEL_TOOL_WIDTH_MINOR,    /**< Length of tool ellipse perpendicular to AZIMUTH. Range: Unbounded. Unit: Same as EVAS_AXIS_LABEL_{X,Y}. @since 1.13 */
371    EVAS_AXIS_LABEL_WINDOW_X,      /**< X coordinate mapped to the window. @since 1.19 */
372    EVAS_AXIS_LABEL_WINDOW_Y,      /**< Y coordinate mapped to the window. @since 1.19 */
373    EVAS_AXIS_LABEL_NORMAL_X,      /**< X normalized to the [0, 1] range. @since 1.19 */
374    EVAS_AXIS_LABEL_NORMAL_Y,      /**< Y normalized to the [0, 1] range. @since 1.19 */
375 } Evas_Axis_Label; /**< Types of recognized device axes @since 1.13 */
376 
377 typedef struct _Evas_Axis
378 {
379    Evas_Axis_Label label;
380    double value;
381 } Evas_Axis;
382 
383 struct _Evas_Event_Axis_Update
384 {
385    void             *data;
386 
387    unsigned int timestamp;
388    int device;
389    int toolid;
390 
391    int naxis;
392    Evas_Axis *axis;
393    Evas_Device *dev;
394 };
395 
396 /**
397  * Add (register) a callback function to a given canvas event.
398  *
399  * @param e Canvas to attach a callback to
400  * @param type The type of event that will trigger the callback
401  * @param func The (callback) function to be called when the event is
402  *        triggered
403  * @param data The data pointer to be passed to @p func
404  *
405  * This function adds a function callback to the canvas @p e when the
406  * event of type @p type occurs on it. The function pointer is @p
407  * func.
408  *
409  * In the event of a memory allocation error during the addition of
410  * the callback to the canvas, evas_alloc_error() should be used to
411  * determine the nature of the error, if any, and the program should
412  * sensibly try and recover.
413  *
414  * A callback function must have the ::Evas_Event_Cb prototype
415  * definition. The first parameter (@p data) in this definition will
416  * have the same value passed to evas_event_callback_add() as the @p
417  * data parameter, at runtime. The second parameter @p e is the canvas
418  * pointer on which the event occurred. The third parameter @p
419  * event_info is a pointer to a data structure that may or may not be
420  * passed to the callback, depending on the event type that triggered
421  * the callback. This is so because some events don't carry extra
422  * context with them, but others do.
423  *
424  * The event type @p type to trigger the function may be one of
425  * #EVAS_CALLBACK_RENDER_FLUSH_PRE, #EVAS_CALLBACK_RENDER_FLUSH_POST,
426  * #EVAS_CALLBACK_CANVAS_FOCUS_IN, #EVAS_CALLBACK_CANVAS_FOCUS_OUT,
427  * #EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN and
428  * #EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT. This determines the kind of
429  * event that will trigger the callback to be called. Only the last
430  * two of the event types listed here provide useful event information
431  * data -- a pointer to the recently focused Evas object. For the
432  * others the @p event_info pointer is going to be @c NULL.
433  *
434  * Example:
435  * @dontinclude evas-events.c
436  * @skip evas_event_callback_add(d.canvas, EVAS_CALLBACK_RENDER_FLUSH_PRE
437  * @until two canvas event callbacks
438  *
439  * Looking to the callbacks registered above,
440  * @dontinclude evas-events.c
441  * @skip called when our rectangle gets focus
442  * @until let's have our events back
443  *
444  * we see that the canvas flushes its rendering pipeline
445  * (#EVAS_CALLBACK_RENDER_FLUSH_PRE) whenever the @c _resize_cb
446  * routine takes place: it has to redraw that image at a different
447  * size. Also, the callback on an object being focused comes just
448  * after we focus it explicitly, on code.
449  *
450  * See the full @ref Example_Evas_Events "example".
451  *
452  * @note Be careful not to add the same callback multiple times, if
453  * that's not what you want, because Evas won't check if a callback
454  * existed before exactly as the one being registered (and thus, call
455  * it more than once on the event, in this case). This would make
456  * sense if you passed different functions and/or callback data, only.
457  */
458 EAPI void  evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
459 
460 /**
461  * Add (register) a callback function to a given canvas event with a
462  * non-default priority set. Except for the priority field, it's exactly the
463  * same as @ref evas_event_callback_add
464  *
465  * @param e Canvas to attach a callback to
466  * @param type The type of event that will trigger the callback
467  * @param priority The priority of the callback, lower values called first.
468  * @param func The (callback) function to be called when the event is
469  *        triggered
470  * @param data The data pointer to be passed to @p func
471  *
472  * @see evas_event_callback_add
473  * @since 1.1
474  */
475 EAPI void  evas_event_callback_priority_add(Evas *e, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4);
476 
477 /**
478  * Delete a callback function from the canvas.
479  *
480  * @param e Canvas to remove a callback from
481  * @param type The type of event that was triggering the callback
482  * @param func The function that was to be called when the event was triggered
483  * @return The data pointer that was to be passed to the callback
484  *
485  * This function removes the most recently added callback from the
486  * canvas @p e which was triggered by the event type @p type and was
487  * calling the function @p func when triggered. If the removal is
488  * successful it will also return the data pointer that was passed to
489  * evas_event_callback_add() when the callback was added to the
490  * canvas. If not successful @c NULL will be returned.
491  *
492  * Example:
493  * @code
494  * extern Evas *e;
495  * void *my_data;
496  * void focus_in_callback(void *data, Evas *e, void *event_info);
497  *
498  * my_data = evas_event_callback_del(ebject, EVAS_CALLBACK_CANVAS_FOCUS_IN, focus_in_callback);
499  * @endcode
500  */
501 EAPI void *evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) EINA_ARG_NONNULL(1, 3);
502 
503 /**
504  * Delete (unregister) a callback function registered to a given
505  * canvas event.
506  *
507  * @param e Canvas to remove an event callback from
508  * @param type The type of event that was triggering the callback
509  * @param func The function that was to be called when the event was
510  *        triggered
511  * @param data The data pointer that was to be passed to the callback
512  * @return The data pointer that was to be passed to the callback
513  *
514  * This function removes <b>the first</b> added callback from the
515  * canvas @p e matching the event type @p type, the registered
516  * function pointer @p func and the callback data pointer @p data. If
517  * the removal is successful it will also return the data pointer that
518  * was passed to evas_event_callback_add() (that will be the same as
519  * the parameter) when the callback(s) was(were) added to the
520  * canvas. If not successful @c NULL will be returned. A common use
521  * would be to remove an exact match of a callback.
522  *
523  * Example:
524  * @dontinclude evas-events.c
525  * @skip evas_event_callback_del_full(evas, EVAS_CALLBACK_RENDER_FLUSH_PRE,
526  * @until _object_focus_in_cb, NULL);
527  *
528  * See the full @ref Example_Evas_Events "example".
529  *
530  * @note For deletion of canvas events callbacks filtering by just
531  * type and function pointer, user evas_event_callback_del().
532  */
533 EAPI void *evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
534 
535 /**
536  * Push a callback on the post-event callback stack
537  *
538  * @param e Canvas to push the callback on
539  * @param func The function that to be called when the stack is unwound
540  * @param data The data pointer to be passed to the callback
541  *
542  * Evas has a stack of callbacks that get called after all the callbacks for
543  * an event have triggered (all the objects it triggers on and all the callbacks
544  * in each object triggered). When all these have been called, the stack is
545  * unwound from most recently to least recently pushed item and removed from the
546  * stack calling the callback set for it.
547  *
548  * This is intended for doing reverse logic-like processing, example - when a
549  * child object that happens to get the event later is meant to be able to
550  * "steal" functions from a parent and thus on unwind of this stack have its
551  * function called first, thus being able to set flags, or return 0 from the
552  * post-callback that stops all other post-callbacks in the current stack from
553  * being called (thus basically allowing a child to take control, if the event
554  * callback prepares information ready for taking action, but the post callback
555  * actually does the action).
556  *
557  * This function should only be called from inside an evas input event
558  * callback. The event_info data may be kept up until @p func is called, in
559  * order to check the state of the "on-hold" flag for instance. Do not modify
560  * the canvas or otherwise trigger or feed a events to the canvas from inside
561  * @p func. Use jobs to safely modify the canvas.
562  *
563  * @warning Only use this function if you know exactly what you are doing!
564  *
565  */
566 EAPI void  evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
567 
568 /**
569  * Remove a callback from the post-event callback stack
570  *
571  * @param e Canvas to push the callback on
572  * @param func The function that to be called when the stack is unwound
573  *
574  * This removes a callback from the stack added with
575  * evas_post_event_callback_push(). The first instance of the function in
576  * the callback stack is removed from being executed when the stack is
577  * unwound. Further instances may still be run on unwind.
578  */
579 EAPI void  evas_post_event_callback_remove(Evas *e, Evas_Object_Event_Post_Cb func);
580 
581 /**
582  * Remove a callback from the post-event callback stack
583  *
584  * @param e Canvas to push the callback on
585  * @param func The function that to be called when the stack is unwound
586  * @param data The data pointer to be passed to the callback
587  *
588  * This removes a callback from the stack added with
589  * evas_post_event_callback_push(). The first instance of the function and data
590  * in the callback stack is removed from being executed when the stack is
591  * unwound. Further instances may still be run on unwind.
592  */
593 EAPI void  evas_post_event_callback_remove_full(Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
594 
595 /**
596  * @}
597  */
598 
599 /**
600  * @ingroup Evas_Event_Feeding_Group
601  *
602  * @{
603  */
604 
605 /**
606  * Freeze all input events processing.
607  *
608  * @param e The canvas to freeze input events processing on.
609  *
610  * This function will indicate to Evas that the canvas @p e is to have
611  * all input event processing frozen until a matching
612  * evas_event_thaw() function is called on the same canvas. All events
613  * of this kind during the freeze will get @b discarded. Every freeze
614  * call must be matched by a thaw call in order to completely thaw out
615  * a canvas (i.e. these calls may be nested). The most common use is
616  * when you don't want the user to interact with your user interface
617  * when you're populating a view or changing the layout.
618  *
619  * Example:
620  * @dontinclude evas-events.c
621  * @skip freeze input for 3 seconds
622  * @until }
623  * @dontinclude evas-events.c
624  * @skip let's have our events back
625  * @until }
626  *
627  * See the full @ref Example_Evas_Events "example".
628  *
629  * If you run that example, you'll see the canvas ignoring all input
630  * events for 3 seconds, when the "f" key is pressed. In a more
631  * realistic code we would be freezing while a toolkit or Edje was
632  * doing some UI changes, thawing it back afterwards.
633  */
634 EAPI void             evas_event_freeze(Evas *e) EINA_ARG_NONNULL(1);
635 
636 /**
637  * Thaw a canvas out after freezing (for input events).
638  *
639  * @param e The canvas to thaw out.
640  *
641  * This will thaw out a canvas after a matching evas_event_freeze()
642  * call. If this call completely thaws out a canvas, i.e., there's no
643  * other unbalanced call to evas_event_freeze(), events will start to
644  * be processed again, but any "missed" events will @b not be
645  * evaluated.
646  *
647  * See evas_event_freeze() for an example.
648  */
649 EAPI void             evas_event_thaw(Evas *e) EINA_ARG_NONNULL(1);
650 
651 /**
652  * Return the freeze count on input events of a given canvas.
653  *
654  * @param e The canvas to fetch the freeze count from.
655  *
656  * This returns the number of times the canvas has been told to freeze
657  * input events. It is possible to call evas_event_freeze() multiple
658  * times, and these must be matched by evas_event_thaw() calls. This
659  * call allows the program to discover just how many times things have
660  * been frozen in case it may want to break out of a deep freeze state
661  * where the count is high.
662  *
663  * Example:
664  * @code
665  * extern Evas *evas;
666  *
667  * while (evas_event_freeze_get(evas) > 0) evas_event_thaw(evas);
668  * @endcode
669  *
670  */
671 EAPI int              evas_event_freeze_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
672 
673 /**
674  * After thaw of a canvas, re-evaluate the state of objects and call callbacks
675  *
676  * @param e The canvas to evaluate after a thaw
677  *
678  * This is normally called after evas_event_thaw() to re-evaluate mouse
679  * containment and other states and thus also call callbacks for mouse in and
680  * out on new objects if the state change demands it.
681  */
682 EAPI void             evas_event_thaw_eval(Evas *e) EINA_ARG_NONNULL(1);
683 
684 /**
685  * @brief Mouse move event feed.
686  *
687  * This function will set some evas properties that are necessary when the mouse
688  * is moved from its last position. It prepares information to be treated by
689  * the callback function.
690  *
691  * @param[in] y The vertical position of the mouse pointer.
692  * @param[in] timestamp The timestamp of the mouse up event.
693  * @param[in] data The data for canvas.
694  */
695 EAPI void             evas_event_feed_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data);
696 
697 /**
698  * @brief Mouse move event feed from input.
699  *
700  * Similar to the @ref evas_event_feed_mouse_move, this function will inform
701  * Evas about mouse move events which were received by the input system,
702  * relative to the 0,0 of the window, not to the canvas 0,0. It will take care
703  * of doing any special transformation like adding the framespace offset to the
704  * mouse event.
705  *
706  * @param[in] y The vertical position of the mouse pointer relative to the 0,0
707  * of the window/surface.
708  * @param[in] timestamp The timestamp of the mouse move event.
709  * @param[in] data The data for canvas.
710  *
711  * @since 1.8
712  */
713 EAPI void             evas_event_input_mouse_move(Evas *obj, int x, int y, unsigned int timestamp, const void *data);
714 
715 /**
716  * @brief Mouse up event feed.
717  *
718  * This function will set some evas properties that are necessary when the mouse
719  * button is released. It prepares information to be treated by the callback
720  * function.
721  *
722  * @param[in] flags Evas button flags.
723  * @param[in] timestamp The timestamp of the mouse up event.
724  * @param[in] data The data for canvas.
725  */
726 EAPI void             evas_event_feed_mouse_up(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
727 
728 /**
729  * @brief Mouse down event feed.
730  *
731  * This function will set some evas properties that are necessary when the mouse
732  * button is pressed. It prepares information to be treated by the callback
733  * function.
734  *
735  * @param[in] flags Evas button flags.
736  * @param[in] timestamp The timestamp of the mouse up event.
737  * @param[in] data The data for canvas.
738  */
739 EAPI void             evas_event_feed_mouse_down(Evas *obj, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
740 
741 /**
742  * @brief Mouse wheel event feed.
743  *
744  * This function will set some evas properties that are necessary when the mouse
745  * wheel is scrolled up or down. It prepares information to  be treated by the
746  * callback function.
747  *
748  * @param[in] z How much mouse wheel was scrolled up or down.
749  * @param[in] timestamp The timestamp of the mouse up event.
750  * @param[in] data The data for canvas.
751  */
752 EAPI void             evas_event_feed_mouse_wheel(Evas *obj, int direction, int z, unsigned int timestamp, const void *data);
753 
754 /**
755  * @brief Mouse in event feed.
756  *
757  * This function will set some evas properties that are necessary when the mouse
758  * in event happens. It prepares information to be treated by the callback
759  * function.
760  *
761  * @param[in] data The data for canvas.
762  */
763 EAPI void             evas_event_feed_mouse_in(Evas *obj, unsigned int timestamp, const void *data);
764 
765 /**
766  * @brief Mouse out event feed.
767  *
768  * This function will set some evas properties that are necessary when the mouse
769  * out event happens. It prepares information to be treated by the callback
770  * function.
771  *
772  * @param[in] data The data for canvas.
773  */
774 EAPI void             evas_event_feed_mouse_out(Evas *obj, unsigned int timestamp, const void *data);
775 
776 /**
777  * @brief Mouse cancel event feed.
778  *
779  * This function will call generate a mouse up event.
780  *
781  * @param[in] data The data for canvas.
782  */
783 EAPI void             evas_event_feed_mouse_cancel(Evas *obj, unsigned int timestamp, const void *data);
784 
785 /* multi touch events - no doc */
786 EAPI void             evas_event_input_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
787 EAPI void             evas_event_input_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data);
788 EAPI void             evas_event_input_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
789 EAPI void             evas_event_feed_multi_down(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
790 EAPI void             evas_event_feed_multi_move(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, unsigned int timestamp, const void *data);
791 EAPI void             evas_event_feed_multi_up(Evas *obj, int d, int x, int y, double rad, double radx, double rady, double pres, double ang, double fx, double fy, Evas_Button_Flags flags, unsigned int timestamp, const void *data);
792 
793 /**
794  * @brief Key down event feed.
795  *
796  * This function will set some evas properties that are necessary when a key is
797  * pressed. It prepares information to be treated by the callback function.
798  *
799  * @param[in] key The key pressed.
800  * @param[in] string A string.
801  * @param[in] compose The compose string.
802  * @param[in] timestamp Timestamp of the mouse up event.
803  * @param[in] data Data for canvas.
804  */
805 EAPI void             evas_event_feed_key_down(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data);
806 
807 /**
808  * @brief Key up event feed.
809  *
810  * This function will set some evas properties that are necessary when a key is
811  * released. It prepares information to be treated by the callback function.
812  *
813  * @param[in] key The key released.
814  * @param[in] string A string.
815  * @param[in] compose Compose.
816  * @param[in] timestamp Timestamp of the mouse up event.
817  * @param[in] data Data for canvas.
818  */
819 EAPI void             evas_event_feed_key_up(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data);
820 
821 /**
822  * @brief Key down event feed with keycode.
823  *
824  * This function will set some evas properties that are necessary when a key is
825  * pressed. It prepares information to be treated by the callback function.
826  *
827  * @param[in] key The key released.
828  * @param[in] string A string.
829  * @param[in] compose Compose.
830  * @param[in] timestamp Timestamp of the mouse up event.
831  * @param[in] data Data for canvas.
832  * @param[in] keycode Key scan code numeric value for canvas.
833  *
834  * @since 1.10
835  */
836 EAPI void             evas_event_feed_key_down_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode);
837 
838 /**
839  * @brief Key up event feed with keycode.
840  *
841  * This function will set some evas properties that are necessary when a key is
842  * released. It prepares information to be treated by the callback function.
843  *
844  * @param[in] key The key released.
845  * @param[in] string A string.
846  * @param[in] compose Compose.
847  * @param[in] timestamp Timestamp of the mouse up event.
848  * @param[in] data Data for canvas.
849  * @param[in] keycode Key scan code numeric value for canvas.
850  *
851  * @since 1.10
852  */
853 EAPI void             evas_event_feed_key_up_with_keycode(Evas *obj, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data, unsigned int keycode);
854 
855 /**
856  * @brief Input device axis update event feed.
857  *
858  * This function will set some evas properties that are necessary when an e.g.
859  * stylus axis is updated. It prepares information to be treated by the
860  * callback function.
861  *
862  * @param[in] device System-provided device identifier.
863  * @param[in] toolid Type of tool currently being used.
864  * @param[in] naxes Number of elements in the \p axis array.
865  * @param[in] axis Array containing the current value of all updated axes.
866  * @param[in] data Data for canvas.
867  *
868  * @since 1.13
869  */
870 EAPI void             evas_event_feed_axis_update(Evas *obj, unsigned int timestamp, int device, int toolid, int naxes, const Evas_Axis *axis, const void *data);
871 
872 /**
873  * @brief Hold event feed.
874  *
875  * This function makes the object to stop sending events.
876  *
877  * @param[in] timestamp The timestamp of the mouse up event.
878  * @param[in] data The data for canvas.
879  */
880 EAPI void             evas_event_feed_hold(Evas *obj, int hold, unsigned int timestamp, const void *data);
881 
882 /**
883  * @brief Re feed event.
884  *
885  * This function re-feeds the event pointed by event_copy.
886  *
887  * This function call evas_event_feed_* functions, so it can cause havoc if not
888  * used wisely. Please use it responsibly.
889  *
890  * @param[in] event_type Event type.
891  */
892 EAPI void             evas_event_refeed_event(Evas *obj, void *event_copy, Evas_Callback_Type event_type);
893 
894 /**
895  * @}
896  */
897 
898 /**
899  * @addtogroup Evas_Keys
900  * @{
901  */
902 
903 /**
904  * @brief Returns a handle to the list of modifier keys registered in the
905  * canvas @c e.
906  *
907  * This is required to check for which modifiers are set at a given time with
908  * the @ref evas_key_modifier_is_set function.
909  *
910  * See also @ref evas_key_modifier_add, @ref evas_key_modifier_del,
911  * @ref evas_key_modifier_on, @ref evas_key_modifier_off,
912  * @ref evas_seat_key_modifier_on, @ref evas_seat_key_modifier_off.
913  *
914  * @return An Evas_Modifier handle to query Evas' keys subsystem with @ref
915  * evas_key_modifier_is_set or @ref evas_seat_key_modifier_is_set, or @c null
916  * on error.
917  *
918  * @ingroup Evas_Canvas
919  */
920 EAPI const Evas_Modifier *evas_key_modifier_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
921 
922 /**
923  * @brief Creates a bit mask from the @c keyname modifier key. Values returned
924  * from different calls to it may be ORed together, naturally.
925  *
926  * This function is meant to be using in conjunction with @ref
927  * evas_object_key_grab/\@ref evas_object_key_ungrab. Go check their
928  * documentation for more information.
929  *
930  * See also @ref evas_key_modifier_add, @ref evas_key_modifier_get,
931  * @ref evas_key_modifier_on, @ref evas_key_modifier_off,
932  * @ref evas_seat_key_modifier_on, @ref evas_seat_key_modifier_off, @ref
933  * evas_key_modifier_is_set, @ref evas_seat_key_modifier_is_set..
934  *
935  * @param[in] keyname The name of the modifier key to create the mask for.
936  *
937  * @return The bit mask or 0 if the @c keyname key wasn't registered as a
938  * modifier for canvas @c e.
939  *
940  * @ingroup Evas_Canvas
941  */
942 EAPI Evas_Modifier_Mask evas_key_modifier_mask_get(const Evas *evas, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
943 
944 /**
945  * Checks the state of a given modifier of the default seat, at the time of the
946  * call. If the modifier is set, such as shift being pressed, this
947  * function returns @c Eina_True.
948  *
949  * @param m The current modifiers set, as returned by
950  *        evas_key_modifier_get().
951  * @param keyname The name of the modifier key to check status for.
952  *
953  * @return @c Eina_True if the modifier key named @p keyname is on, @c
954  *         Eina_False otherwise.
955  *
956  * @see evas_key_modifier_add
957  * @see evas_key_modifier_del
958  * @see evas_key_modifier_get
959  * @see evas_key_modifier_on
960  * @see evas_key_modifier_off
961  * @see evas_seat_key_modifier_is_set
962  */
963 EAPI Eina_Bool            evas_key_modifier_is_set(const Evas_Modifier *m, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
964 
965 /**
966  * Checks the state of a given modifier key of a given seat, at the time of the
967  * call. If the modifier is set, such as shift being pressed, this
968  * function returns @c Eina_True.
969  *
970  * @param m The current modifiers set, as returned by
971  *        evas_key_modifier_get().
972  * @param keyname The name of the modifier key to check status for.
973  * @param seat The seat to check if the lock is set. Use @c NULL for the default seat.
974  *
975  * @return @c Eina_True if the modifier key named @p keyname is on, @c
976  *         Eina_False otherwise.
977  *
978  * @see evas_key_modifier_add
979  * @see evas_key_modifier_del
980  * @see evas_key_modifier_get
981  * @see evas_key_modifier_on
982  * @see evas_key_modifier_off
983  * @see evas_seat_key_modifier_on
984  * @see evas_seat_key_modifier_off
985  * @see evas_key_modifier_is_set
986  * @since 1.19
987  */
988 EAPI Eina_Bool            evas_seat_key_modifier_is_set(const Evas_Modifier *m, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
989 
990 /**
991  * Checks the state of a given lock key of the default seat, at the time of the call. If
992  * the lock is set, such as caps lock, this function returns @c
993  * Eina_True.
994  *
995  * @param l The current locks set, as returned by evas_key_lock_get().
996  * @param keyname The name of the lock key to check status for.
997  *
998  * @return @c Eina_True if the @p keyname lock key is set, @c
999  *        Eina_False otherwise.
1000  *
1001  * @see evas_key_lock_get
1002  * @see evas_key_lock_add
1003  * @see evas_key_lock_del
1004  * @see evas_key_lock_on
1005  * @see evas_key_lock_off
1006  * @see evas_seat_key_lock_on
1007  * @see evas_seat_key_lock_off
1008  * @see evas_seat_key_lock_is_set
1009  */
1010 EAPI Eina_Bool            evas_key_lock_is_set(const Evas_Lock *l, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
1011 
1012 /**
1013  * Checks the state of a given lock key of a given seat, at the time of the call. If
1014  * the lock is set, such as caps lock, this function returns @c
1015  * Eina_True.
1016  *
1017  * @param l The current locks set, as returned by evas_key_lock_get().
1018  * @param keyname The name of the lock key to check status for.
1019  * @param seat The seat to check if the lock is set. Use @c NULL for the default seat.
1020  *
1021  * @return @c Eina_True if the @p keyname lock key is set, @c
1022  *        Eina_False otherwise.
1023  *
1024  * @see evas_key_lock_get
1025  * @see evas_key_lock_add
1026  * @see evas_key_lock_del
1027  * @see evas_key_lock_on
1028  * @see evas_key_lock_off
1029  * @see evas_key_lock_is_set
1030  * @since 1.19
1031  */
1032 EAPI Eina_Bool            evas_seat_key_lock_is_set(const Evas_Lock *l, const char *keyname, const Evas_Device *seat) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
1033 
1034 /**
1035  * @brief Returns a handle to the list of lock keys registered in the canvas
1036  * @c e.
1037  *
1038  * This is required to check for which locks are set at a given time with the
1039  * @ref evas_key_lock_is_set function.
1040  *
1041  * @return An Evas_Lock handle to query Evas' keys subsystem with @ref
1042  * evas_key_lock_is_set or @ref evas_seat_key_lock_is_set, or @c null on error.
1043  *
1044  * @ingroup Evas_Canvas
1045  */
1046 EAPI const Evas_Lock *evas_key_lock_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
1047 
1048 /**
1049  * @}
1050  */
1051 
1052 /**
1053  * @brief Returns whether the mouse pointer is logically inside the canvas.
1054  *
1055  * @param[in] obj The object.
1056  * @param[in] dev The pointer device.
1057  *
1058  * @return @c true if the pointer is inside, @c false otherwise.
1059  *
1060  * @since 1.19
1061  *
1062  * @ingroup Evas_Canvas
1063  */
1064 EAPI Eina_Bool evas_pointer_inside_by_device_get(const Evas *obj, Efl_Input_Device *dev);
1065 
1066 /**
1067  * @brief Returns whether the default mouse pointer is logically inside the
1068  * canvas.
1069  *
1070  * When this function is called it will return a value of either @c false or
1071  * @c true, depending on if event_feed_mouse_in or event_feed_mouse_out have
1072  * been called to feed in a  mouse enter event into the canvas.
1073  *
1074  * A return value of @c true indicates the mouse is logically inside the
1075  * canvas, and @c false implies it is logically outside the canvas.
1076  *
1077  * A canvas begins with the mouse being assumed outside ($false).
1078  *
1079  * If @c e is not a valid canvas, the return value is undefined.
1080  *
1081  * @param[in] obj The object.
1082  *
1083  * @return @c true if the mouse pointer is inside the canvas, @c false
1084  * otherwise
1085  *
1086  * @ingroup Evas_Canvas
1087  */
1088 EAPI Eina_Bool evas_pointer_inside_get(const Evas *obj) EINA_WARN_UNUSED_RESULT;
1089 
1090 /**
1091  * @defgroup Evas_Touch_Point_List Touch Point List Functions
1092  *
1093  * Functions to get information of touched points in the Evas.
1094  *
1095  * Evas maintains list of touched points on the canvas. Each point has
1096  * its co-ordinates, id and state. You can get the number of touched
1097  * points and information of each point using evas_touch_point_list
1098  * functions.
1099  *
1100  * @ingroup Evas_Canvas
1101  *
1102  * @{
1103  */
1104 
1105 /**
1106  * State of Evas_Coord_Touch_Point
1107  */
1108 typedef enum
1109 {
1110   EVAS_TOUCH_POINT_DOWN = 0, /**< Touch point is pressed down */
1111   EVAS_TOUCH_POINT_UP, /**< Touch point is released */
1112   EVAS_TOUCH_POINT_MOVE, /**< Touch point is moved */
1113   EVAS_TOUCH_POINT_STILL, /**< Touch point is not moved after pressed */
1114   EVAS_TOUCH_POINT_CANCEL /**< Touch point is cancelled */
1115 } Evas_Touch_Point_State;
1116 
1117 /**
1118  * @brief Get the number of touched point in the evas.
1119  *
1120  * New touched point is added to the list whenever touching the evas and point
1121  * is removed whenever removing touched point from the evas.
1122  *
1123  * @return The number of touched point on the evas.
1124  */
1125 EAPI unsigned int evas_touch_point_list_count(Evas *obj);
1126 
1127 /**
1128  * @brief This function returns the @c id of nth touch point.
1129  *
1130  * The point which comes from Mouse Event has @c id 0 and The point which comes
1131  * from Multi Event has @c id that is same as Multi Event's device id.
1132  *
1133  * @param[in] n The number of the touched point (0 being the first).
1134  *
1135  * @return id of nth touch point, if the call succeeded, -1 otherwise.
1136  */
1137 EAPI int evas_touch_point_list_nth_id_get(Evas *obj, unsigned int n);
1138 
1139 /**
1140  * @brief This function returns the @c state of nth touch point.
1141  *
1142  * The point's @c state is EVAS_TOUCH_POINT_DOWN when pressed,
1143  * EVAS_TOUCH_POINT_STILL when the point is not moved after pressed,
1144  * EVAS_TOUCH_POINT_MOVE when moved at least once after pressed and
1145  * EVAS_TOUCH_POINT_UP when released.
1146  *
1147  * @param[in] n The number of the touched point (0 being the first).
1148  *
1149  * @return @c state of nth touch point, if the call succeeded,
1150  * EVAS_TOUCH_POINT_CANCEL otherwise.
1151  */
1152 EAPI Evas_Touch_Point_State evas_touch_point_list_nth_state_get(Evas *obj, unsigned int n);
1153 
1154 /**
1155  * @brief This function returns the nth touch point's coordinates.
1156  *
1157  * Touch point's coordinates is updated whenever moving that point on the
1158  * canvas.
1159  *
1160  * @param[in] n The number of the touched point (0 being the first).
1161  * @param[out] x The pointer to a Evas_Coord to be filled in.
1162  * @param[out] y The pointer to a Evas_Coord to be filled in.
1163  */
1164 EAPI void evas_touch_point_list_nth_xy_get(Evas *eo_e, unsigned int n, Evas_Coord *x, Evas_Coord *y);
1165 
1166 /**
1167  * @}
1168  */
1169 
1170 /**
1171  * @addtogroup Evas_Font_Group
1172  *
1173  * @{
1174  */
1175 
1176 /**
1177  * Free list of font descriptions returned by evas_font_dir_available_list().
1178  *
1179  * @param e The evas instance that returned such list.
1180  * @param available the list returned by evas_font_dir_available_list().
1181  */
1182 EAPI void                    evas_font_available_list_free(Evas *e, Eina_List *available) EINA_ARG_NONNULL(1);
1183 
1184 /** Flags for Font Hinting
1185  */
1186 typedef enum
1187 {
1188   EVAS_FONT_HINTING_NONE = 0, /**< No font hinting */
1189   EVAS_FONT_HINTING_AUTO, /**< Automatic font hinting */
1190   EVAS_FONT_HINTING_BYTECODE /**< Bytecode font hinting */
1191 } Evas_Font_Hinting_Flags;
1192 
1193 /**
1194  * @brief Changes the font hinting for the given evas.
1195  *
1196  * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE.
1197  *
1198  * @param[in] hinting The used hinting, one of #EVAS_FONT_HINTING_NONE,
1199  * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE.
1200  */
1201 EAPI void evas_font_hinting_set(Evas *e, Evas_Font_Hinting_Flags hinting);
1202 
1203 /**
1204  * @brief Retrieves the font hinting used by the given evas.
1205  *
1206  * @return The used hinting, one of #EVAS_FONT_HINTING_NONE,
1207  * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE.
1208  */
1209 EAPI Evas_Font_Hinting_Flags evas_font_hinting_get(const Evas *e);
1210 
1211 /**
1212  * @brief Checks if the font hinting is supported by the given evas.
1213  *
1214  * One of #EVAS_FONT_HINTING_NONE, #EVAS_FONT_HINTING_AUTO,
1215  * #EVAS_FONT_HINTING_BYTECODE.
1216  *
1217  * @param[in] hinting The hinting to use.
1218  *
1219  * @return @c true if it is supported, @c false otherwise.
1220  *
1221  * @ingroup Evas_Canvas
1222  */
1223 EAPI Eina_Bool evas_font_hinting_can_hint(const Evas *e, Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT;
1224 
1225 /**
1226  * @}
1227  */
1228 
1229 /**
1230  * @ingroup Evas_Object_Group_Basic
1231  *
1232  * @{
1233  */
1234 
1235 /**
1236  * Increments object reference count to defer its deletion.
1237  *
1238  * @param obj The given Evas object to reference
1239  *
1240  * This increments the reference count of an object, which if greater
1241  * than 0 will defer deletion by evas_object_del() until all
1242  * references are released back (counter back to 0). References cannot
1243  * go below 0 and unreferencing past that will result in the reference
1244  * count being limited to 0. References are limited to <c>2^32 - 1</c>
1245  * for an object. Referencing it more than this will result in it
1246  * being limited to this value.
1247  *
1248  * @see evas_object_unref()
1249  * @see evas_object_del()
1250  *
1251  * @note This is a <b>very simple</b> reference counting mechanism! For
1252  * instance, Evas is not ready to check for pending references on a
1253  * canvas deletion, or things like that. This is useful on scenarios
1254  * where, inside a code block, callbacks exist which would possibly
1255  * delete an object we are operating on afterwards. Then, one would
1256  * evas_object_ref() it on the beginning of the block and
1257  * evas_object_unref() it on the end. It would then be deleted at this
1258  * point, if it should be.
1259  *
1260  * Example:
1261  * @code
1262  *  evas_object_ref(obj);
1263  *
1264  *  // action here...
1265  *  evas_object_smart_callback_call(obj, SIG_SELECTED, NULL);
1266  *  // more action here...
1267  *  evas_object_unref(obj);
1268  * @endcode
1269  *
1270  * @ingroup Evas_Object_Group_Basic
1271  * @since 1.1
1272  */
1273 EAPI void             evas_object_ref(Evas_Object *obj);
1274 
1275 /**
1276  * Decrements object reference count.
1277  *
1278  * @param obj The given Evas object to unreference
1279  *
1280  * This decrements the reference count of an object. If the object has
1281  * had evas_object_del() called on it while references were more than
1282  * 0, it will be deleted at the time this function is called and puts
1283  * the counter back to 0. See evas_object_ref() for more information.
1284  *
1285  * @see evas_object_ref() (for an example)
1286  * @see evas_object_del()
1287  *
1288  * @ingroup Evas_Object_Group_Basic
1289  * @since 1.1
1290  */
1291 EAPI void             evas_object_unref(Evas_Object *obj);
1292 
1293 /**
1294  * Get the object reference count.
1295  *
1296  * @param obj The given Evas object to query
1297  *
1298  * This gets the reference count for an object (normally 0 until it is
1299  * referenced). Values of 1 or greater mean that someone is holding a
1300  * reference to this object that needs to be unreffed before it can be
1301  * deleted.
1302  *
1303  * @see evas_object_ref()
1304  * @see evas_object_unref()
1305  * @see evas_object_del()
1306  *
1307  * @ingroup Evas_Object_Group_Basic
1308  * @since 1.2
1309  */
1310 EAPI int              evas_object_ref_get(const Evas_Object *obj);
1311 
1312 /**
1313  * Marks the given Evas object for deletion (when Evas will free its
1314  * memory).
1315  *
1316  * @param obj The given Evas object.
1317  *
1318  * This call will mark @p obj for deletion, which will take place
1319  * whenever it has no more references to it (see evas_object_ref() and
1320  * evas_object_unref()).
1321  *
1322  * At actual deletion time, which may or may not be just after this
1323  * call, ::EVAS_CALLBACK_DEL and ::EVAS_CALLBACK_FREE callbacks will
1324  * be called. If the object currently had the focus, its
1325  * ::EVAS_CALLBACK_FOCUS_OUT callback will also be called.
1326  *
1327  * @see evas_object_ref()
1328  * @see evas_object_unref()
1329  *
1330  * @ingroup Evas_Object_Group_Basic
1331  */
1332 EAPI void             evas_object_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
1333 
1334 /**
1335  * @brief Retrieves the type of the given Evas object.
1336  *
1337  * For Evas' builtin types, the return strings will be one of "rectangle",
1338  * "line", "polygon", "text", "textblock" or "image".
1339  *
1340  * For Evas smart objects (see @ref Evas_Smart_Group), the name of the smart
1341  * class itself is returned on this call. For the built-in smart objects, these
1342  * names are "EvasObjectSmartClipped" for the clipped smart object,
1343  * "Evas_Object_Box" for the box object and "Evas_Object_Table for the table
1344  * object.
1345  *
1346  * @return The type of the object.
1347  *
1348  * @ingroup Evas_Object_Group_Basic
1349  * @since 1.18
1350  */
1351 EAPI const char      *evas_object_type_get(const Evas_Object *obj);
1352 
1353 /**
1354  * @brief Sets the name of the given Evas object to the given name.
1355  *
1356  * There might be occasions where one would like to name his/her objects.
1357  *
1358  * @param[in] name The given name.
1359  *
1360  * @ingroup Evas_Object_Group_Basic
1361  */
1362 EAPI void evas_object_name_set(Evas_Object *obj, const char *name);
1363 
1364 /**
1365  * @brief Retrieves the name of the given Evas object.
1366  *
1367  * Return: The name of the object or @c null, if no name has been given to it.
1368  *
1369  * @return The given name.
1370  *
1371  * @ingroup Evas_Object_Group_Basic
1372  */
1373 EAPI const char *evas_object_name_get(const Evas_Object *obj);
1374 
1375 /**
1376  * @brief Retrieves the object from children of the given object with the given
1377  * name.
1378  *
1379  * This looks for the evas object given a name by @ref evas_object_name_set,
1380  * but it ONLY looks at the children of the object *p obj, and will only
1381  * recurse into those children if @c recurse is greater than 0. If the name is
1382  * not unique within immediate children (or the whole child tree) then it is
1383  * not defined which child object will be returned. If @c recurse is set to -1
1384  * then it will recurse without limit.
1385  *
1386  * @param[in] name The given name.
1387  * @param[in] recurse Set to the number of child levels to recurse (0 == don't
1388  * recurse, 1 == only look at the children of @c obj or their immediate
1389  * children, but no further etc.).
1390  *
1391  * @return The Evas object with the given name on success, Otherwise @c null.
1392  *
1393  * @since 1.2
1394  *
1395  * @ingroup Evas_Object_Group_Basic
1396  */
1397 EAPI Evas_Object *evas_object_name_child_find(const Evas_Object *obj, const char *name, int recurse) EINA_WARN_UNUSED_RESULT;
1398 
1399 /**
1400  * Retrieves the position and (rectangular) size of the given Evas
1401  * object.
1402  *
1403  * @param obj The given Evas object.
1404  * @param x Pointer to an integer in which to store the X coordinate
1405  *          of the object.
1406  * @param y Pointer to an integer in which to store the Y coordinate
1407  *          of the object.
1408  * @param w Pointer to an integer in which to store the width of the
1409  *          object.
1410  * @param h Pointer to an integer in which to store the height of the
1411  *          object.
1412  *
1413  * The position, naturally, will be relative to the top left corner of
1414  * the canvas' viewport.
1415  *
1416  * @note Use @c NULL pointers on the geometry components you're not
1417  * interested in: they'll be ignored by the function.
1418  *
1419  * Example:
1420  * @dontinclude evas-events.c
1421  * @skip int w, h, cw, ch;
1422  * @until return
1423  *
1424  * See the full @ref Example_Evas_Events "example".
1425  *
1426  * @ingroup Evas_Object_Group_Basic
1427  */
1428 EAPI void             evas_object_geometry_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1429 
1430 /**
1431  * Set the position and (rectangular) size of the given Evas object.
1432  *
1433  * @param obj The given Evas object.
1434  * @param x   X position to move the object to, in canvas units.
1435  * @param y   Y position to move the object to, in canvas units.
1436  * @param w   The new width of the Evas object.
1437  * @param h   The new height of the Evas object.
1438  *
1439  * The position, naturally, will be relative to the top left corner of
1440  * the canvas' viewport.
1441  *
1442  * If the object get moved, the object's ::EVAS_CALLBACK_MOVE callback
1443  * will be called.
1444  *
1445  * If the object get resized, the object's ::EVAS_CALLBACK_RESIZE callback
1446  * will be called.
1447  *
1448  * @see evas_object_move()
1449  * @see evas_object_resize()
1450  * @see evas_object_geometry_get
1451  *
1452  * @since 1.8
1453  * @ingroup Evas_Object_Group_Basic
1454  */
1455 EAPI void             evas_object_geometry_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
1456 
1457 
1458 /**
1459  * Makes the given Evas object visible.
1460  *
1461  * @param obj The given Evas object.
1462  *
1463  * Besides becoming visible, the object's ::EVAS_CALLBACK_SHOW
1464  * callback will be called.
1465  *
1466  * @see evas_object_hide() for more on object visibility.
1467  * @see evas_object_visible_get()
1468  *
1469  * @ingroup Evas_Object_Group_Basic
1470  */
1471 EAPI void             evas_object_show(Evas_Object *obj) EINA_ARG_NONNULL(1);
1472 
1473 /**
1474  * Makes the given Evas object invisible.
1475  *
1476  * @param obj The given Evas object.
1477  *
1478  * Hidden objects, besides not being shown at all in your canvas,
1479  * won't be checked for changes on the canvas rendering
1480  * process. Furthermore, they will not catch input events. Thus, they
1481  * are much ligher (in processing needs) than an object that is
1482  * invisible due to indirect causes, such as being clipped or out of
1483  * the canvas' viewport.
1484  *
1485  * Besides becoming hidden, @p obj object's ::EVAS_CALLBACK_SHOW
1486  * callback will be called.
1487  *
1488  * @note All objects are created in the hidden state! If you want them
1489  * shown, use evas_object_show() after their creation.
1490  *
1491  * @see evas_object_show()
1492  * @see evas_object_visible_get()
1493  *
1494  * Example:
1495  * @dontinclude evas-object-manipulation.c
1496  * @skip if (evas_object_visible_get(d.clipper))
1497  * @until return
1498  *
1499  * See the full @ref Example_Evas_Object_Manipulation "example".
1500  *
1501  * @ingroup Evas_Object_Group_Basic
1502  */
1503 EAPI void             evas_object_hide(Evas_Object *obj) EINA_ARG_NONNULL(1);
1504 
1505 /**
1506  *
1507  * Sets the general/main color of the given Evas object to the given
1508  * one.
1509  *
1510  * @see evas_object_color_get() (for an example)
1511  * @note These color values are expected to be premultiplied by @p a.
1512  *
1513  * @ingroup Evas_Object_Group_Basic
1514  *
1515  * @param[in] r The red component of the given color.
1516  * @param[in] g The green component of the given color.
1517  * @param[in] b The blue component of the given color.
1518  * @param[in] a The alpha component of the given color.
1519  */
1520 EAPI void evas_object_color_set(Evas_Object *obj, int r, int g, int b, int a);
1521 
1522 /**
1523  *
1524  * Retrieves the general/main color of the given Evas object.
1525  *
1526  * Retrieves the “main” color's RGB component (and alpha channel)
1527  * values, <b>which range from 0 to 255</b>. For the alpha channel,
1528  * which defines the object's transparency level, 0 means totally
1529  * transparent, while 255 means opaque. These color values are
1530  * premultiplied by the alpha value.
1531  *
1532  * Usually you’ll use this attribute for text and rectangle objects,
1533  * where the “main” color is their unique one. If set for objects
1534  * which themselves have colors, like the images one, those colors get
1535  * modulated by this one.
1536  *
1537  * @note All newly created Evas rectangles get the default color
1538  * values of <code>255 255 255 255</code> (opaque white).
1539  *
1540  * @note Use @c NULL pointers on the components you're not interested
1541  * in: they'll be ignored by the function.
1542  *
1543  * Example:
1544  * @dontinclude evas-object-manipulation.c
1545  * @skip int alpha, r, g, b;
1546  * @until return
1547  *
1548  * See the full @ref Example_Evas_Object_Manipulation "example".
1549  *
1550  * @ingroup Evas_Object_Group_Basic
1551  *
1552  * @param[out] r The red component of the given color.
1553  * @param[out] g The green component of the given color.
1554  * @param[out] b The blue component of the given color.
1555  * @param[out] a The alpha component of the given color.
1556  */
1557 EAPI void evas_object_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a);
1558 
1559 /**
1560  * @}
1561  */
1562 
1563 /**
1564  *
1565  * Move the given Evas object to the given location inside its canvas' viewport.
1566  *
1567  * @param[in] x in
1568  * @param[in] y in
1569  * @ingroup Evas_Object_Group
1570  */
1571 EAPI void evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
1572 
1573 /**
1574  *
1575  * Changes the size of the given Evas object.
1576  *
1577  * @param[in] w in
1578  * @param[in] h in
1579  * @ingroup Evas_Object_Group
1580  */
1581 EAPI void evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
1582 
1583 /**
1584  *
1585  * Retrieves whether or not the given Evas object is visible.
1586  *
1587  * @ingroup Evas_Object_Group
1588  */
1589 EAPI Eina_Bool evas_object_visible_get(const Evas_Object *obj);
1590 
1591 /**
1592  * @brief Sets the hints for an object's maximum size.
1593  *
1594  * This is not a size enforcement in any way, it's just a hint that should be
1595  * used whenever appropriate.
1596  *
1597  * Values -1 will be treated as unset hint components, when queried by
1598  * managers.
1599  *
1600  * @note Smart objects (such as elementary) can have their own size hint
1601  * policy. So calling this API may or may not affect the size of smart objects.
1602  *
1603  * @param[in] w Integer to use as the maximum width hint.
1604  * @param[in] h Integer to use as the maximum height hint.
1605  *
1606  * @ingroup Evas_Object_Group
1607  */
1608 EAPI void evas_object_size_hint_max_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
1609 
1610 /**
1611  * @brief Retrieves the hints for an object's maximum size.
1612  *
1613  * These are hints on the maximum sizes @c obj should have. This is not a size
1614  * enforcement in any way, it's just a hint that should be used whenever
1615  * appropriate.
1616  *
1617  * @note Use @c null pointers on the hint components you're not interested in:
1618  * they'll be ignored by the function.
1619  *
1620  * @param[out] w Integer to use as the maximum width hint.
1621  * @param[out] h Integer to use as the maximum height hint.
1622  *
1623  * @ingroup Evas_Object_Group
1624  */
1625 EAPI void evas_object_size_hint_max_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
1626 
1627 /**
1628  * @brief Sets the hints for an object's optimum size.
1629  *
1630  * This is not a size enforcement in any way, it's just a hint that should be
1631  * used whenever appropriate.
1632  *
1633  * Values 0 will be treated as unset hint components, when queried by managers.
1634  *
1635  * @note Smart objects(such as elementary) can have their own size hint policy.
1636  * So calling this API may or may not affect the size of smart objects.
1637  *
1638  * @param[in] w Integer to use as the preferred width hint.
1639  * @param[in] h Integer to use as the preferred height hint.
1640  *
1641  * @ingroup Evas_Object_Group
1642  */
1643 EAPI void evas_object_size_hint_request_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
1644 
1645 /**
1646  * @brief Retrieves the hints for an object's optimum size.
1647  *
1648  * These are hints on the optimum sizes @c obj should have. This is not a size
1649  * enforcement in any way, it's just a hint that should be used whenever
1650  * appropriate.
1651  *
1652  * @note Use @c null pointers on the hint components you're not interested in:
1653  * they'll be ignored by the function.
1654  *
1655  * @param[out] w Integer to use as the preferred width hint.
1656  * @param[out] h Integer to use as the preferred height hint.
1657  *
1658  * @ingroup Evas_Object_Group
1659  */
1660 EAPI void evas_object_size_hint_request_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
1661 
1662 /**
1663  * @brief Sets the hints for an object's minimum size.
1664  *
1665  * This is not a size enforcement in any way, it's just a hint that should be
1666  * used whenever appropriate.
1667  *
1668  * Values 0 will be treated as unset hint components, when queried by managers.
1669  *
1670  * @note Smart objects(such as elementary) can have their own size hint policy.
1671  * So calling this API may or may not affect the size of smart objects.
1672  *
1673  * @param[in] w Integer to use as the minimum width hint.
1674  * @param[in] h Integer to use as the minimum height hint.
1675  *
1676  * @ingroup Evas_Object_Group
1677  */
1678 EAPI void evas_object_size_hint_min_set(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
1679 
1680 /**
1681  * @brief Disable/cease clipping on a clipped @c obj object.
1682  *
1683  * This function disables clipping for the object @c obj, if it was already
1684  * clipped, i.e., its visibility and color get detached from the previous
1685  * clipper. If it wasn't, this has no effect. The object @c obj must be a valid
1686  * Evas_Object.
1687  *
1688  * See also @ref evas_object_clip_set, @ref evas_object_clipees_get and
1689  * @ref evas_object_clip_get.
1690  *
1691  * @ingroup Evas_Object_Group
1692  */
1693 EAPI void evas_object_clip_unset(Evas_Object *obj);
1694 
1695 /**
1696  * @brief Retrieves the hints for an object's minimum size.
1697  *
1698  * These are hints on the minimum sizes @c obj should have. This is not a size
1699  * enforcement in any way, it's just a hint that should be used whenever
1700  * appropriate.
1701  *
1702  * @note Use @c null pointers on the hint components you're not interested in:
1703  * they'll be ignored by the function.
1704  *
1705  * @param[out] w Integer to use as the minimum width hint.
1706  * @param[out] h Integer to use as the minimum height hint.
1707  *
1708  * @ingroup Evas_Object_Group
1709  */
1710 EAPI void evas_object_size_hint_min_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h);
1711 
1712 /**
1713  * @brief Sets the hints for an object's padding space.
1714  *
1715  * This is not a size enforcement in any way, it's just a hint that should be
1716  * used whenever appropriate.
1717  *
1718  * @note Smart objects(such as elementary) can have their own size hint policy.
1719  * So calling this API may or may not affect the size of smart objects.
1720  *
1721  * @param[in] l Integer to specify left padding.
1722  * @param[in] r Integer to specify right padding.
1723  * @param[in] t Integer to specify top padding.
1724  * @param[in] b Integer to specify bottom padding.
1725  *
1726  * @ingroup Evas_Object_Group
1727  */
1728 EAPI void evas_object_size_hint_padding_set(Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b);
1729 
1730 /**
1731  * @brief Retrieves the hints for an object's padding space.
1732  *
1733  * Padding is extra space an object takes on each of its delimiting rectangle
1734  * sides, in canvas units.
1735  *
1736  * This is not a size enforcement in any way, it's just a hint that should be
1737  * used whenever appropriate.
1738  *
1739  * @note Use @c null pointers on the hint components you're not interested in:
1740  * they'll be ignored by the function.
1741  *
1742  * @param[out] l Integer to specify left padding.
1743  * @param[out] r Integer to specify right padding.
1744  * @param[out] t Integer to specify top padding.
1745  * @param[out] b Integer to specify bottom padding.
1746  *
1747  * @ingroup Evas_Object_Group
1748  */
1749 EAPI void evas_object_size_hint_padding_get(const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b);
1750 
1751 /**
1752  * @brief Sets the hints for an object's weight.
1753  *
1754  * This is not a size enforcement in any way, it's just a hint that should be
1755  * used whenever appropriate.
1756  *
1757  * This is a hint on how a container object should resize a given child within
1758  * its area. Containers may adhere to the simpler logic of just expanding the
1759  * child object's dimensions to fit its own (see the #EVAS_HINT_EXPAND helper
1760  * weight macro) or the complete one of taking each child's weight hint as real
1761  * weights to how much of its size to allocate for them in each axis. A
1762  * container is supposed to, after normalizing the weights of its children
1763  * (with weight  hints), distribute the space it has to layout them by those
1764  * factors -- most weighted children get larger in this process than the least
1765  * ones.
1766  *
1767  * @note Default weight hint values are 0.0, for both axis.
1768  *
1769  * @param[in] x Non-negative double value to use as horizontal weight hint.
1770  * @param[in] y Non-negative double value to use as vertical weight hint.
1771  *
1772  * @ingroup Evas_Object_Group
1773  */
1774 EAPI void evas_object_size_hint_weight_set(Evas_Object *obj, double x, double y);
1775 
1776 /**
1777  * @brief Retrieves the hints for an object's weight.
1778  *
1779  * Accepted values are zero or positive values. Some users might use this hint
1780  * as a boolean, but some might consider it as a proportion, see documentation
1781  * of possible users, which in Evas are the @ref Evas_Object_Box "box" and @ref
1782  * Evas_Object_Table_Group "table" smart objects.
1783  *
1784  * This is not a size enforcement in any way, it's just a hint that should be
1785  * used whenever appropriate.
1786  *
1787  * @note Use @c null pointers on the hint components you're not interested in:
1788  * they'll be ignored by the function.
1789  *
1790  * @note If @c obj is invalid, then the hint components will be set with 0.0.
1791  *
1792  * @param[out] x Non-negative double value to use as horizontal weight hint.
1793  * @param[out] y Non-negative double value to use as vertical weight hint.
1794  *
1795  * @ingroup Evas_Object_Group
1796  */
1797 EAPI void evas_object_size_hint_weight_get(const Evas_Object *obj, double *x, double *y);
1798 
1799 /**
1800  * @brief Sets the hints for an object's alignment.
1801  *
1802  * These are hints on how to align an object inside the boundaries of a
1803  * container/manager. Accepted values are in the 0.0 to 1.0 range, with the
1804  * special value #EVAS_HINT_FILL used to specify "justify" or "fill" by some
1805  * users. In this case, maximum size hints should be enforced with higher
1806  * priority, if they are set. Also, any padding hint set on objects should add
1807  * up to the alignment space on the final scene composition.
1808  *
1809  * See documentation of possible users: in Evas, they are the @ref
1810  * Evas_Object_Box "box" and @ref Evas_Object_Table_Group "table" smart objects.
1811  *
1812  * For the horizontal component, 0.0 means to the left, 1.0 means to the right.
1813  * Analogously, for the vertical component, 0.0 to the top, 1.0 means to the
1814  * bottom.
1815  *
1816  * This is not a size enforcement in any way, it's just a hint that should be
1817  * used whenever appropriate.
1818  *
1819  * @note Default alignment hint values are 0.5, for both axis.
1820  *
1821  * @param[in] x Double, ranging from 0.0 to 1.0 or with the special value
1822  * #EVAS_HINT_FILL, to use as horizontal alignment hint.
1823  * @param[in] y Double, ranging from 0.0 to 1.0 or with the special value
1824  * #EVAS_HINT_FILL, to use as vertical alignment hint.
1825  *
1826  * @ingroup Evas_Object_Group
1827  */
1828 EAPI void evas_object_size_hint_align_set(Evas_Object *obj, double x, double y);
1829 
1830 /**
1831  * @brief Retrieves the hints for on object's alignment.
1832  *
1833  * This is not a size enforcement in any way, it's just a hint that should be
1834  * used whenever appropriate.
1835  *
1836  * @note Use @c null pointers on the hint components you're not interested in:
1837  * they'll be ignored by the function.
1838  *
1839  * @note If @c obj is invalid, then the hint components will be set with 0.5
1840  *
1841  * @param[out] x Double, ranging from 0.0 to 1.0 or with the special value
1842  * #EVAS_HINT_FILL, to use as horizontal alignment hint.
1843  * @param[out] y Double, ranging from 0.0 to 1.0 or with the special value
1844  * #EVAS_HINT_FILL, to use as vertical alignment hint.
1845  *
1846  * @ingroup Evas_Object_Group
1847  */
1848 EAPI void evas_object_size_hint_align_get(const Evas_Object *obj, double *x, double *y);
1849 
1850 /**
1851  * @brief Sets the hints for an object's aspect ratio.
1852  *
1853  * This is not a size enforcement in any way, it's just a hint that should be
1854  * used whenever appropriate.
1855  *
1856  * If any of the given aspect ratio terms are 0, the object's container will
1857  * ignore the aspect and scale @c obj to occupy the whole available area, for
1858  * any given policy.
1859  *
1860  * @note Smart objects(such as elementary) can have their own size hint policy.
1861  * So calling this API may or may not affect the size of smart objects.
1862  *
1863  * @param[in] aspect The policy/type of aspect ratio to apply to @c obj.
1864  * @param[in] w Integer to use as aspect width ratio term.
1865  * @param[in] h Integer to use as aspect height ratio term.
1866  *
1867  * @ingroup Evas_Object_Group
1868  */
1869 EAPI void evas_object_size_hint_aspect_set(Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h);
1870 
1871 /**
1872  * @brief Retrieves the hints for an object's aspect ratio.
1873  *
1874  * The different aspect ratio policies are documented in the
1875  * #Evas_Aspect_Control type. A container respecting these size hints would
1876  * resize its children accordingly to those policies.
1877  *
1878  * For any policy, if any of the given aspect ratio terms are 0, the object's
1879  * container should ignore the aspect and scale @c obj to occupy the whole
1880  * available area. If they are both positive integers, that proportion will be
1881  * respected, under each scaling policy.
1882  *
1883  * @note Use @c null pointers on the hint components you're not interested in:
1884  * they'll be ignored by the function.
1885  *
1886  * @param[out] aspect The policy/type of aspect ratio to apply to @c obj.
1887  * @param[out] w Integer to use as aspect width ratio term.
1888  * @param[out] h Integer to use as aspect height ratio term.
1889  *
1890  * @ingroup Evas_Object_Group
1891  */
1892 EAPI void evas_object_size_hint_aspect_get(const Evas_Object *obj, Evas_Aspect_Control *aspect, Evas_Coord *w, Evas_Coord *h);
1893 
1894 /** Display mode size hint. */
1895 typedef enum
1896 {
1897   EFL_GFX_HINT_MODE_NONE = 0, /**< Default mode */
1898   EFL_GFX_HINT_MODE_COMPRESS = 1, /**< Use this mode when you want to give
1899                                         * compress display mode hint to an object */
1900   EFL_GFX_HINT_MODE_EXPAND = 2, /**< Use this mode when you want to give
1901                                       * expand display mode hint to an object */
1902   EFL_GFX_HINT_MODE_DONT_CHANGE = 3 /**< Use this mode when an object
1903                                           * should not change its display mode */
1904 } Efl_Gfx_Hint_Mode;
1905 
1906 typedef Efl_Gfx_Hint_Mode             Evas_Display_Mode;
1907 
1908 #define EVAS_DISPLAY_MODE_NONE             EFL_GFX_HINT_MODE_NONE
1909 #define EVAS_DISPLAY_MODE_COMPRESS         EFL_GFX_HINT_MODE_COMPRESS
1910 #define EVAS_DISPLAY_MODE_EXPAND           EFL_GFX_HINT_MODE_EXPAND
1911 #define EVAS_DISPLAY_MODE_DONT_CHANGE      EFL_GFX_HINT_MODE_DONT_CHANGE
1912 
1913 /**
1914  * @brief Sets the hints for an object's disply mode,
1915  *
1916  * This is not a size enforcement in any way, it's just a hint that can be used
1917  * whenever appropriate.
1918  *
1919  * @param[in] dispmode Display mode hint.
1920  *
1921  * @ingroup Evas_Object_Group
1922  */
1923 EAPI void evas_object_size_hint_display_mode_set(Evas_Object *obj, Evas_Display_Mode dispmode);
1924 
1925 /**
1926  * @brief Retrieves the hints for an object's display mode
1927  *
1928  * These are hints on the display mode @c obj. This is not a size enforcement
1929  * in any way, it's just a hint that can be used whenever appropriate. This
1930  * mode can be used object's display mode like compress or expand.
1931  *
1932  * @return Display mode hint.
1933  *
1934  * @ingroup Evas_Object_Group
1935  */
1936 EAPI Evas_Display_Mode evas_object_size_hint_display_mode_get(const Evas_Object *obj);
1937 
1938 /**
1939  *
1940  * Sets the layer of its canvas that the given object will be part of.
1941  *
1942  * If you don't use this function, you'll be dealing with an @b unique
1943  * layer of objects, the default one. Additional layers are handy when
1944  * you don't want a set of objects to interfere with another set with
1945  * regard to @b stacking. Two layers are completely disjoint in that
1946  * matter.
1947  *
1948  * This is a low-level function, which you'd be using when something
1949  * should be always on top, for example.
1950  *
1951  * @warning Be careful, it doesn't make sense to change the layer of
1952  * smart objects' children. Smart objects have a layer of their own,
1953  * which should contain all their children objects.
1954  *
1955  * @see evas_object_layer_get()
1956  *
1957  * @param[in] l The number of the layer to place the object on.
1958 Must be between #EVAS_LAYER_MIN and #EVAS_LAYER_MAX.
1959  * @ingroup Evas_Object_Group
1960  */
1961 EAPI void evas_object_layer_set(Evas_Object *obj, short l);
1962 
1963 /**
1964  *
1965  * Retrieves the layer of its canvas that the given object is part of.
1966  *
1967  * @return  Number of its layer
1968  *
1969  * @see evas_object_layer_set()
1970  *
1971  * @ingroup Evas_Object_Group
1972  */
1973 EAPI short evas_object_layer_get(const Evas_Object *obj);
1974 
1975 /**
1976  *
1977  * Get the Evas object stacked right below @p obj
1978  *
1979  * @return the #Evas_Object directly below @p obj, if any, or @c NULL,
1980  * if none
1981  *
1982  * This function will traverse layers in its search, if there are
1983  * objects on layers below the one @p obj is placed at.
1984  *
1985  * @see evas_object_layer_get()
1986  * @see evas_object_layer_set()
1987  * @see evas_object_below_get()
1988  *
1989  * @ingroup Evas_Object_Group
1990  */
1991 EAPI Evas_Object *evas_object_below_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
1992 
1993 /**
1994  *
1995  * Get the Evas object stacked right above @p obj
1996  *
1997  * @return the #Evas_Object directly above @p obj, if any, or @c NULL,
1998  * if none
1999  *
2000  * This function will traverse layers in its search, if there are
2001  * objects on layers above the one @p obj is placed at.
2002  *
2003  * @see evas_object_layer_get()
2004  * @see evas_object_layer_set()
2005  * @see evas_object_below_get()
2006  *
2007  * @ingroup Evas_Object_Group
2008  */
2009 EAPI Evas_Object *evas_object_above_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
2010 
2011 /**
2012  *
2013  * Stack @p obj immediately below @p below
2014  *
2015  * Objects, in a given canvas, are stacked in the order they get added
2016  * to it.  This means that, if they overlap, the highest ones will
2017  * cover the lowest ones, in that order. This function is a way to
2018  * change the stacking order for the objects.
2019  *
2020  * This function is intended to be used with <b>objects belonging to
2021  * the same layer</b> in a given canvas, otherwise it will fail (and
2022  * accomplish nothing).
2023  *
2024  * If you have smart objects on your canvas and @p obj is a member of
2025  * one of them, then @p below must also be a member of the same
2026  * smart object.
2027  *
2028  * Similarly, if @p obj is not a member of a smart object, @p below
2029  * must not be either.
2030  *
2031  * @see evas_object_layer_get()
2032  * @see evas_object_layer_set()
2033  * @see evas_object_stack_below()
2034  *
2035  *
2036  * @param[in] below the object below which to stack
2037  * @ingroup Evas_Object_Group
2038  */
2039 EAPI void evas_object_stack_below(Evas_Object *obj, Evas_Object *below) EINA_ARG_NONNULL(2);
2040 
2041 /**
2042  *
2043  * Raise @p obj to the top of its layer.
2044  *
2045  * @p obj will, then, be the highest one in the layer it belongs
2046  * to. Object on other layers won't get touched.
2047  *
2048  * @see evas_object_stack_above()
2049  * @see evas_object_stack_below()
2050  * @see evas_object_lower()
2051  *
2052  * @ingroup Evas_Object_Group
2053  *
2054  */
2055 EAPI void evas_object_raise(Evas_Object *obj);
2056 
2057 /**
2058  *
2059  * Stack @p obj immediately above @p above
2060  *
2061  * Objects, in a given canvas, are stacked in the order they get added
2062  * to it.  This means that, if they overlap, the highest ones will
2063  * cover the lowest ones, in that order. This function is a way to
2064  * change the stacking order for the objects.
2065  *
2066  * This function is intended to be used with <b>objects belonging to
2067  * the same layer</b> in a given canvas, otherwise it will fail (and
2068  * accomplish nothing).
2069  *
2070  * If you have smart objects on your canvas and @p obj is a member of
2071  * one of them, then @p above must also be a member of the same
2072  * smart object.
2073  *
2074  * Similarly, if @p obj is not a member of a smart object, @p above
2075  * must not be either.
2076  *
2077  * @see evas_object_layer_get()
2078  * @see evas_object_layer_set()
2079  * @see evas_object_stack_below()
2080  *
2081  *
2082  * @param[in] above the object above which to stack
2083  * @ingroup Evas_Object_Group
2084  */
2085 EAPI void evas_object_stack_above(Evas_Object *obj, Evas_Object *above) EINA_ARG_NONNULL(2);
2086 
2087 /**
2088  *
2089  * Lower @p obj to the bottom of its layer.
2090  *
2091  * @p obj will, then, be the lowest one in the layer it belongs
2092  * to. Objects on other layers won't get touched.
2093  *
2094  * @see evas_object_stack_above()
2095  * @see evas_object_stack_below()
2096  * @see evas_object_raise()
2097  *
2098  * @ingroup Evas_Object_Group
2099  *
2100  */
2101 EAPI void evas_object_lower(Evas_Object *obj);
2102 
2103 /**
2104  * @brief Set a hint flag on the given Evas object that it's used as a "static
2105  * clipper".
2106  *
2107  * This is a hint to Evas that this object is used as a big static clipper and
2108  * shouldn't be moved with children and otherwise considered specially. The
2109  * default value for new objects is @c false.
2110  *
2111  * @param[in] is_static_clip @c true if it's to be used as a static clipper,
2112  * @c false otherwise.
2113  *
2114  * @ingroup Evas_Object_Group
2115  */
2116 EAPI void evas_object_static_clip_set(Evas_Object *obj, Eina_Bool is_static_clip);
2117 
2118 /**
2119  * @brief Return a list of objects currently clipped by @c obj.
2120  *
2121  * This returns the internal list handle that contains all objects clipped by
2122  * the object @c obj. If none are clipped by it, the call returns @c null. This
2123  * list is only valid until the clip list is changed and should be fetched
2124  * again with another call to this function if any objects being clipped by
2125  * this object are unclipped, clipped by a new object, deleted or get the
2126  * clipper deleted. These operations will invalidate the list returned, so it
2127  * should not be used anymore after that point. Any use of the list after this
2128  * may have undefined results, possibly leading to crashes. The object @c obj
2129  * must be a valid Evas_Object.
2130  *
2131  * See also @ref evas_object_clip_set, @ref evas_object_clip_unset and
2132  * @ref evas_object_clip_get.
2133  *
2134  * @return A list of objects being clipped by @c obj.
2135  *
2136  * @ingroup Evas_Object_Group
2137  */
2138 EAPI const Eina_List *evas_object_clipees_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
2139 
2140 /**
2141  * @brief Test if any object is clipped by @c obj.
2142  *
2143  * @param[in] obj The object.
2144  *
2145  * @return @c true if any object is clipped by @c obj, @c false otherwise
2146  *
2147  * @since 1.8
2148  *
2149  * @ingroup Evas_Object_Group
2150  */
2151 EAPI Eina_Bool evas_object_clipees_has(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
2152 
2153 /** How the object should be rendered to output.
2154  *
2155  * @ingroup Evas_Object_Group
2156  */
2157 typedef enum
2158 {
2159   EVAS_RENDER_BLEND = 0, /**< Default render operation: d = d*(1-sa) + s. The
2160                           * object will be merged onto the bottom objects using
2161                           * simple alpha compositing (a over b). */
2162   EVAS_RENDER_BLEND_REL = 1, /**< DEPRECATED. d = d*(1 - sa) + s*da */
2163   EVAS_RENDER_COPY = 2, /**< Copy mode, d = s. The object's pixels will replace
2164                          * everything that was below, effectively hiding them.
2165                          */
2166   EVAS_RENDER_COPY_REL = 3, /**< DEPRECATED. d = s*da */
2167   EVAS_RENDER_ADD = 4, /**< DEPRECATED. d = d + s */
2168   EVAS_RENDER_ADD_REL = 5, /**< DEPRECATED. d = d + s*da */
2169   EVAS_RENDER_SUB = 6, /**< DEPRECATED. d = d - s */
2170   EVAS_RENDER_SUB_REL = 7, /**< DEPRECATED. d = d - s*da */
2171   EVAS_RENDER_TINT = 8, /**< DEPRECATED. d = d*s + d*(1 - sa) + s*(1 - da) */
2172   EVAS_RENDER_TINT_REL = 9, /**< DEPRECATED. d = d*(1 - sa + s) */
2173   EVAS_RENDER_MASK = 10, /**< DEPRECATED. d = d*sa. For masking support, please
2174                           * use Efl.Canvas.Object.clip_set or EDC "clip_to" instead.
2175                           */
2176   EVAS_RENDER_MUL = 11 /**< DEPRECATED. d = d*s */
2177 } Evas_Render_Op;
2178 
2179 /**
2180  * @brief Sets the render mode to be used for compositing the Evas object.
2181  *
2182  * Note that only copy and blend modes are actually supported: -
2183  * @ref Evas_Render_Op.EVAS_RENDER_BLEND means the object will be merged on top
2184  * of objects below it using simple alpha compositing. -
2185  * @ref Evas_Render_Op.EVAS_RENDER_COPY means this object's pixels will replace
2186  * everything that is below, making this object opaque.
2187  *
2188  * Please do not assume that @ref Evas_Render_Op.EVAS_RENDER_COPY mode can be
2189  * used to "poke" holes in a window (to see through it), as only the compositor
2190  * can ensure that. Copy mode should only be used with otherwise opaque
2191  * widgets, or inside non-window surfaces (eg. a transparent background inside
2192  * an Ecore.Evas.Buffer).
2193  *
2194  * @param[in] render_op One of the Evas_Render_Op values. Only blend (default)
2195  * and copy modes are supported.
2196  *
2197  * @ingroup Evas_Object_Group
2198  */
2199 EAPI void evas_object_render_op_set(Evas_Object *obj, Evas_Render_Op render_op);
2200 
2201 /**
2202  * @brief Retrieves the current value of the operation used for rendering the
2203  * Evas object.
2204  *
2205  * @return One of the Evas_Render_Op values. Only blend (default) and copy
2206  * modes are supported.
2207  *
2208  * @ingroup Evas_Object_Group
2209  */
2210 EAPI Evas_Render_Op evas_object_render_op_get(const Evas_Object *obj);
2211 
2212 /**
2213  * @brief Get the "static clipper" hint flag for a given Evas object.
2214  *
2215  * @return @c true if it's to be used as a static clipper, @c false otherwise.
2216  *
2217  * @ingroup Evas_Object_Group
2218  */
2219 EAPI Eina_Bool evas_object_static_clip_get(const Evas_Object *obj);
2220 
2221 /**
2222  * @brief Sets the scaling factor for an Evas object. Does not affect all
2223  * objects.
2224  *
2225  * This will multiply the object's dimension by the given factor, thus altering
2226  * its geometry (width and height). Useful when you want scalable UI elements,
2227  * possibly at run time.
2228  *
2229  * @note Only text and textblock objects have scaling change handlers. Other
2230  * objects won't change visually on this call.
2231  *
2232  * @param[in] obj The object.
2233  * @param[in] scale The scaling factor. 1.0 means no scaling, default size.
2234  *
2235  * @ingroup Evas_Object_Group
2236  */
2237 EAPI void evas_object_scale_set(Evas_Object *obj, double scale);
2238 
2239 /**
2240  * @brief Retrieves the scaling factor for the given Evas object.
2241  *
2242  * @param[in] obj The object.
2243  *
2244  * @return The scaling factor. 1.0 means no scaling, default size.
2245  *
2246  * @ingroup Evas_Object_Group
2247  */
2248 EAPI double evas_object_scale_get(const Evas_Object *obj);
2249 
2250 /**
2251  * @brief Returns whether the mouse pointer is logically inside the object.
2252  *
2253  * @param[in] dev The pointer device.
2254  *
2255  * @return @c true if the pointer is inside, @c false otherwise.
2256  *
2257  * @since 1.20
2258  *
2259  * @ingroup Evas_Object_Group
2260  */
2261 EAPI Eina_Bool evas_object_pointer_inside_by_device_get(const Evas_Object *obj, Efl_Input_Device * dev);
2262 
2263 /**
2264  * @brief Returns whether the default mouse pointer is logically inside the
2265  * object.
2266  *
2267  * When this function is called it will return a value of either @c false or
2268  * @c true, depending on if event_feed_mouse_in or event_feed_mouse_out have
2269  * been called to feed in a mouse enter event into the object.
2270  *
2271  * A return value of @c true indicates the mouse is logically inside the
2272  * object, and @c false implies it is logically outside the object.
2273  *
2274  * If @c e is not a valid object, the return value is undefined.
2275  *
2276  * @return @c true if the mouse pointer is inside the object, @c false
2277  * otherwise
2278  *
2279  * @ingroup Evas_Object_Group
2280  */
2281 EAPI Eina_Bool evas_object_pointer_inside_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
2282 
2283 /**
2284  * @brief Returns whether the coords are logically inside the object.
2285  *
2286  * When this function is called it will return a value of either @c false or
2287  * @c true, depending on if the coords are inside the object's current
2288  * geometry.
2289  *
2290  * A return value of @c true indicates the position is logically inside the
2291  * object, and @c false implies it is logically outside the object.
2292  *
2293  * If @c e is not a valid object, the return value is undefined.
2294  *
2295  * @param[in] x The canvas-relative x coordinate.
2296  * @param[in] y The canvas-relative y coordinate.
2297  *
2298  * @return @c true if the coords are inside the object, @c false otherwise
2299  *
2300  * @ingroup Evas_Object_Group
2301  */
2302 
2303 EAPI Eina_Bool evas_object_pointer_coords_inside_get(const Evas_Object *eo_obj, int x, int y) EINA_WARN_UNUSED_RESULT;
2304 
2305 #include "canvas/efl_canvas_object_eo.legacy.h"
2306 
2307 /**
2308  * @brief Get the Evas to which this object belongs to
2309  *
2310  * The object may be an evas object, an elementary object or window, or an
2311  * evas 3D / VG object.
2312  * @ingroup Evas_Object_Group
2313  */
2314 EAPI Evas *evas_object_evas_get(const Eo *obj);
2315 
2316 /**
2317  * @brief Retrieve a list of objects lying over a given position in a canvas.
2318  *
2319  * This function will traverse all the layers of the given canvas, from top to
2320  * bottom, querying for objects with areas covering the given position. The
2321  * user can remove from query objects which are hidden and/or which are set to
2322  * pass events.
2323  *
2324  * @warning This function will skip objects parented by smart objects, acting
2325  * only on the ones at the "top level", with regard to object parenting.
2326  *
2327  * @param[in] obj The object.
2328  * @param[in] x The pixel position.
2329  * @param[in] y The pixel position.
2330  * @param[in] include_pass_events_objects Boolean flag to include or not
2331  * objects which pass events in this calculation.
2332  * @param[in] include_hidden_objects Boolean flag to include or not hidden
2333  * objects in this calculation.
2334  *
2335  * @return The list of objects that are over the given position in @c e.
2336  *
2337  * @ingroup Evas_Canvas
2338  */
2339  EAPI Eina_List *evas_objects_at_xy_get(Eo *eo_e, int x, int y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects);
2340 
2341 
2342 /**
2343  * @brief Retrieve the object stacked at the top of a given position in a
2344  * canvas.
2345  *
2346  * This function will traverse all the layers of the given canvas, from top to
2347  * bottom, querying for objects with areas covering the given position. The
2348  * user can remove from the query objects which are hidden and/or which are set
2349  * to pass events.
2350  *
2351  * @warning This function will skip objects parented by smart objects, acting
2352  * only on the ones at the "top level", with regard to object parenting.
2353  *
2354  * @param[in] obj The object.
2355  * @param[in] x The pixel position.
2356  * @param[in] y The pixel position.
2357  * @param[in] include_pass_events_objects Boolean flag to include or not
2358  * objects which pass events in this calculation.
2359  * @param[in] include_hidden_objects Boolean flag to include or not hidden
2360  * objects in this calculation.
2361  *
2362  * @return The Evas object that is over all other objects at the given
2363  * position.
2364  * @ingroup Evas_Canvas
2365  */
2366  EAPI Evas_Object* evas_object_top_at_xy_get(Eo *eo_e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects);
2367 
2368 
2369 /**
2370  * @brief Get all objects in the given rectangle
2371  *
2372  * @param[in] obj The object.
2373  * @param[in] x X coordinate
2374  * @param[in] y Y coordinate
2375  * @param[in] w Width
2376  * @param[in] h Height
2377  * @param[in] include_pass_events_objects @c true if the list should include
2378  * objects which pass events
2379  * @param[in] include_hidden_objects @c true if the list should include hidden
2380  * objects
2381  *
2382  * @return List of objects
2383  * @ingroup Evas_Canvas
2384  */
2385 EAPI Eina_List *evas_objects_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT;
2386 
2387 /**
2388  * @brief Retrieve the Evas object stacked at the top of a given rectangular
2389  * region in a canvas
2390  *
2391  * This function will traverse all the layers of the given canvas, from top to
2392  * bottom, querying for objects with areas overlapping with the given
2393  * rectangular region inside @c e. The user can remove from the query objects
2394  * which are hidden and/or which are set to pass events.
2395  *
2396  * @warning This function will skip objects parented by smart objects, acting
2397  * only on the ones at the "top level", with regard to object parenting.
2398  *
2399  * @param[in] obj The object.
2400  * @param[in] x The top left corner's horizontal coordinate for the rectangular
2401  * region.
2402  * @param[in] y The top left corner's vertical coordinate for the rectangular
2403  * region.
2404  * @param[in] w The width of the rectangular region.
2405  * @param[in] h The height of the rectangular region.
2406  * @param[in] include_pass_events_objects Boolean flag to include or not
2407  * objects which pass events in this calculation.
2408  * @param[in] include_hidden_objects Boolean flag to include or not hidden
2409  * objects in this calculation.
2410  *
2411  * @return The Evas object that is over all other objects at the given
2412  * rectangular region.
2413  *
2414  * @ingroup Evas_Canvas
2415  */
2416 EAPI Evas_Object *evas_object_top_in_rectangle_get(const Eo *obj, int x, int y, int w, int h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT;
2417 
2418 /**
2419  * @ingroup Evas_Object_Group_Events
2420  *
2421  * @{
2422  */
2423 
2424 /**
2425  * Add (register) a callback function to a given Evas object event.
2426  *
2427  * @param obj Object to attach a callback to
2428  * @param type The type of event that will trigger the callback
2429  * @param func The function to be called when the event is triggered
2430  * @param data The data pointer to be passed to @p func
2431  *
2432  * This function adds a function callback to an object when the event
2433  * of type @p type occurs on object @p obj. The function is @p func.
2434  *
2435  * In the event of a memory allocation error during addition of the
2436  * callback to the object, evas_alloc_error() should be used to
2437  * determine the nature of the error, if any, and the program should
2438  * sensibly try and recover.
2439  *
2440  * A callback function must have the ::Evas_Object_Event_Cb prototype
2441  * definition. The first parameter (@p data) in this definition will
2442  * have the same value passed to evas_object_event_callback_add() as
2443  * the @p data parameter, at runtime. The second parameter @p e is the
2444  * canvas pointer on which the event occurred. The third parameter is
2445  * a pointer to the object on which event occurred. Finally, the
2446  * fourth parameter @p event_info is a pointer to a data structure
2447  * that may or may not be passed to the callback, depending on the
2448  * event type that triggered the callback. This is so because some
2449  * events don't carry extra context with them, but others do.
2450  *
2451  * The event type @p type to trigger the function may be one of
2452  * #EVAS_CALLBACK_MOUSE_IN, #EVAS_CALLBACK_MOUSE_OUT,
2453  * #EVAS_CALLBACK_MOUSE_DOWN, #EVAS_CALLBACK_MOUSE_UP,
2454  * #EVAS_CALLBACK_MOUSE_MOVE, #EVAS_CALLBACK_MOUSE_WHEEL,
2455  * #EVAS_CALLBACK_MULTI_DOWN, #EVAS_CALLBACK_MULTI_UP,
2456  * #EVAS_CALLBACK_AXIS_UPDATE,
2457  * #EVAS_CALLBACK_MULTI_MOVE, #EVAS_CALLBACK_FREE,
2458  * #EVAS_CALLBACK_KEY_DOWN, #EVAS_CALLBACK_KEY_UP,
2459  * #EVAS_CALLBACK_FOCUS_IN, #EVAS_CALLBACK_FOCUS_OUT,
2460  * #EVAS_CALLBACK_SHOW, #EVAS_CALLBACK_HIDE, #EVAS_CALLBACK_MOVE,
2461  * #EVAS_CALLBACK_RESIZE, #EVAS_CALLBACK_RESTACK, #EVAS_CALLBACK_DEL,
2462  * #EVAS_CALLBACK_HOLD, #EVAS_CALLBACK_CHANGED_SIZE_HINTS,
2463  * #EVAS_CALLBACK_IMAGE_PRELOADED or #EVAS_CALLBACK_IMAGE_UNLOADED.
2464  *
2465  * This determines the kind of event that will trigger the callback.
2466  * What follows is a list explaining better the nature of each type of
2467  * event, along with their associated @p event_info pointers:
2468  *
2469  * - #EVAS_CALLBACK_MOUSE_IN: @p event_info is a pointer to an
2470  *   #Evas_Event_Mouse_In struct\n\n
2471  *   This event is triggered when the mouse pointer enters the area
2472  *   (not shaded by other objects) of the object @p obj. This may
2473  *   occur by the mouse pointer being moved by
2474  *   evas_event_feed_mouse_move() calls, or by the object being shown,
2475  *   raised, moved, resized, or other objects being moved out of the
2476  *   way, hidden or lowered, whatever may cause the mouse pointer to
2477  *   get on top of @p obj, having been on top of another object
2478  *   previously.
2479  *
2480  * - #EVAS_CALLBACK_MOUSE_OUT: @p event_info is a pointer to an
2481  *   #Evas_Event_Mouse_Out struct\n\n
2482  *   This event is triggered exactly like #EVAS_CALLBACK_MOUSE_IN is,
2483  *   but it occurs when the mouse pointer exits an object's area. Note
2484  *   that no mouse out events will be reported if the mouse pointer is
2485  *   implicitly grabbed to an object (mouse buttons are down, having
2486  *   been pressed while the pointer was over that object). In these
2487  *   cases, mouse out events will be reported once all buttons are
2488  *   released, if the mouse pointer has left the object's area. The
2489  *   indirect ways of taking off the mouse pointer from an object,
2490  *   like cited above, for #EVAS_CALLBACK_MOUSE_IN, also apply here,
2491  *   naturally.
2492  *
2493  * - #EVAS_CALLBACK_MOUSE_DOWN: @p event_info is a pointer to an
2494  *   #Evas_Event_Mouse_Down struct\n\n
2495  *   This event is triggered by a mouse button being pressed while the
2496  *   mouse pointer is over an object. If the pointer mode for Evas is
2497  *   #EVAS_OBJECT_POINTER_MODE_AUTOGRAB (default), this causes this
2498  *   object to <b>passively grab the mouse</b> until all mouse buttons
2499  *   have been released: all future mouse events will be reported to
2500  *   only this object until no buttons are down. That includes mouse
2501  *   move events, mouse in and mouse out events, and further button
2502  *   presses. When all buttons are released, event propagation will
2503  *   occur as normal (see #Evas_Object_Pointer_Mode).
2504  *
2505  * - #EVAS_CALLBACK_MOUSE_UP: @p event_info is a pointer to an
2506  *   #Evas_Event_Mouse_Up struct\n\n
2507  *   This event is triggered by a mouse button being released while
2508  *   the mouse pointer is over an object's area (or when passively
2509  *   grabbed to an object).
2510  *
2511  * - #EVAS_CALLBACK_MOUSE_MOVE: @p event_info is a pointer to an
2512  *   #Evas_Event_Mouse_Move struct\n\n
2513  *   This event is triggered by the mouse pointer being moved while
2514  *   over an object's area (or while passively grabbed to an object).
2515  *
2516  * - #EVAS_CALLBACK_MOUSE_WHEEL: @p event_info is a pointer to an
2517  *   #Evas_Event_Mouse_Wheel struct\n\n
2518  *   This event is triggered by the mouse wheel being rolled while the
2519  *   mouse pointer is over an object (or passively grabbed to an
2520  *   object).
2521  *
2522  * - #EVAS_CALLBACK_MULTI_DOWN: @p event_info is a pointer to an
2523  *   #Evas_Event_Multi_Down struct
2524  *
2525  * - #EVAS_CALLBACK_MULTI_UP: @p event_info is a pointer to an
2526  *   #Evas_Event_Multi_Up struct
2527  *
2528  * - #EVAS_CALLBACK_MULTI_MOVE: @p event_info is a pointer to an
2529  *   #Evas_Event_Multi_Move struct
2530  *
2531  * - #EVAS_CALLBACK_AXIS_UPDATE: @p event_info is a pointer to an
2532  *   #Evas_Event_Axis_Update struct
2533  *
2534  * - #EVAS_CALLBACK_FREE: @p event_info is @c NULL \n\n
2535  *   This event is triggered just before Evas is about to free all
2536  *   memory used by an object and remove all references to it. This is
2537  *   useful for programs to use if they attached data to an object and
2538  *   want to free it when the object is deleted. The object is still
2539  *   valid when this callback is called, but after it returns, there
2540  *   is no guarantee on the object's validity.
2541  *
2542  * - #EVAS_CALLBACK_KEY_DOWN: @p event_info is a pointer to an
2543  *   #Evas_Event_Key_Down struct\n\n
2544  *   This callback is called when a key is pressed and the focus is on
2545  *   the object, or a key has been grabbed to a particular object
2546  *   which wants to intercept the key press regardless of what object
2547  *   has the focus.
2548  *
2549  * - #EVAS_CALLBACK_KEY_UP: @p event_info is a pointer to an
2550  *   #Evas_Event_Key_Up struct \n\n
2551  *   This callback is called when a key is released and the focus is
2552  *   on the object, or a key has been grabbed to a particular object
2553  *   which wants to intercept the key release regardless of what
2554  *   object has the focus.
2555  *
2556  * - #EVAS_CALLBACK_FOCUS_IN: @p event_info is @c NULL \n\n
2557  *   This event is called when an object gains the focus. When it is
2558  *   called the object has already gained the focus.
2559  *
2560  * - #EVAS_CALLBACK_FOCUS_OUT: @p event_info is @c NULL \n\n
2561  *   This event is triggered when an object loses the focus. When it
2562  *   is called the object has already lost the focus.
2563  *
2564  * - #EVAS_CALLBACK_SHOW: @p event_info is @c NULL \n\n
2565  *   This event is triggered by the object being shown by
2566  *   evas_object_show().
2567  *
2568  * - #EVAS_CALLBACK_HIDE: @p event_info is @c NULL \n\n
2569  *   This event is triggered by an object being hidden by
2570  *   evas_object_hide().
2571  *
2572  * - #EVAS_CALLBACK_MOVE: @p event_info is @c NULL \n\n
2573  *   This event is triggered by an object being
2574  *   moved. evas_object_move() can trigger this, as can any
2575  *   object-specific manipulations that would mean the object's origin
2576  *   could move.
2577  *
2578  * - #EVAS_CALLBACK_RESIZE: @p event_info is @c NULL \n\n
2579  *   This event is triggered by an object being resized. Resizes can
2580  *   be triggered by evas_object_resize() or by any object-specific
2581  *   calls that may cause the object to resize.
2582  *
2583  * - #EVAS_CALLBACK_RESTACK: @p event_info is @c NULL \n\n
2584  *   This event is triggered by an object being re-stacked. Stacking
2585  *   changes can be triggered by
2586  *   evas_object_stack_below()/evas_object_stack_above() and others.
2587  *
2588  * - #EVAS_CALLBACK_DEL: @p event_info is @c NULL.
2589  *
2590  * - #EVAS_CALLBACK_HOLD: @p event_info is a pointer to an
2591  *   #Evas_Event_Hold struct
2592  *
2593  * - #EVAS_CALLBACK_CHANGED_SIZE_HINTS: @p event_info is @c NULL.
2594  *
2595  * - #EVAS_CALLBACK_IMAGE_PRELOADED: @p event_info is @c NULL.
2596  *
2597  * - #EVAS_CALLBACK_IMAGE_UNLOADED: @p event_info is @c NULL.
2598  *
2599  * @note Be careful not to add the same callback multiple times, if
2600  * that's not what you want, because Evas won't check if a callback
2601  * existed before exactly as the one being registered (and thus, call
2602  * it more than once on the event, in this case). This would make
2603  * sense if you passed different functions and/or callback data, only.
2604  *
2605  * Example:
2606  * @dontinclude evas-events.c
2607  * @skip evas_object_event_callback_add(
2608  * @until }
2609  *
2610  * See the full example @ref Example_Evas_Events "here".
2611  *
2612  */
2613 EAPI void      evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
2614 
2615 /**
2616  * Add (register) a callback function to a given Evas object event with a
2617  * non-default priority set. Except for the priority field, it's exactly the
2618  * same as @ref evas_object_event_callback_add
2619  *
2620  * @param obj Object to attach a callback to
2621  * @param type The type of event that will trigger the callback
2622  * @param priority The priority of the callback, lower values called first.
2623  * @param func The function to be called when the event is triggered
2624  * @param data The data pointer to be passed to @p func
2625  *
2626  * @see evas_object_event_callback_add
2627  * @since 1.1
2628  */
2629 EAPI void      evas_object_event_callback_priority_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Callback_Priority priority, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 4);
2630 
2631 /**
2632  * Delete a callback function from an object
2633  *
2634  * @param obj Object to remove a callback from
2635  * @param type The type of event that was triggering the callback
2636  * @param func The function that was to be called when the event was triggered
2637  * @return The data pointer that was to be passed to the callback
2638  *
2639  * This function removes the most recently added callback from the
2640  * object @p obj which was triggered by the event type @p type and was
2641  * calling the function @p func when triggered. If the removal is
2642  * successful it will also return the data pointer that was passed to
2643  * evas_object_event_callback_add() when the callback was added to the
2644  * object. If not successful @c NULL will be returned.
2645  *
2646  * Example:
2647  * @code
2648  * extern Evas_Object *object;
2649  * void *my_data;
2650  * void up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info);
2651  *
2652  * my_data = evas_object_event_callback_del(object, EVAS_CALLBACK_MOUSE_UP, up_callback);
2653  * @endcode
2654  */
2655 EAPI void     *evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func) EINA_ARG_NONNULL(1, 3);
2656 
2657 /**
2658  * Delete (unregister) a callback function registered to a given
2659  * Evas object event.
2660  *
2661  * @param obj Object to remove a callback from
2662  * @param type The type of event that was triggering the callback
2663  * @param func The function that was to be called when the event was
2664  * triggered
2665  * @param data The data pointer that was to be passed to the callback
2666  * @return The data pointer that was to be passed to the callback
2667  *
2668  * This function removes the most recently added callback from the
2669  * object @p obj, which was triggered by the event type @p type and was
2670  * calling the function @p func with data @p data, when triggered. If
2671  * the removal is successful it will also return the data pointer that
2672  * was passed to evas_object_event_callback_add() (that will be the
2673  * same as the parameter) when the callback was added to the
2674  * object. In errors, @c NULL will be returned.
2675  *
2676  * @note For deletion of Evas object events callbacks filtering by
2677  * just type and function pointer, use
2678  * evas_object_event_callback_del().
2679  *
2680  * Example:
2681  * @code
2682  * extern Evas_Object *object;
2683  * void *my_data;
2684  * void up_callback(void *data, Evas *e, Evas_Object *obj, void *event_info);
2685  *
2686  * my_data = evas_object_event_callback_del_full(object, EVAS_CALLBACK_MOUSE_UP, up_callback, data);
2687  * @endcode
2688  */
2689 EAPI void     *evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
2690 
2691 /**
2692  * @brief Requests @c keyname key events be directed to @c obj.
2693  *
2694  * Key grabs allow one or more objects to receive key events for specific key
2695  * strokes even if other objects have focus. Whenever a key is grabbed, only
2696  * the objects grabbing it will get the events for the given keys.
2697  *
2698  * @c keyname is a platform dependent symbolic name for the key pressed (see
2699  * @ref Evas_Keys for more information).
2700  *
2701  * @c modifiers and @c not_modifiers are bit masks of all the modifiers that
2702  * must and mustn't, respectively, be pressed along with @c keyname key in
2703  * order to trigger this new key grab. Modifiers can be things such as Shift
2704  * and Ctrl as well as user defined types via @ref evas_key_modifier_add.
2705  * Retrieve them with @ref evas_key_modifier_mask_get or use 0 for empty masks.
2706  *
2707  * @c exclusive will make the given object the only one permitted to grab the
2708  * given key. If given @c true, subsequent calls on this function with
2709  * different @c obj arguments will fail, unless the key is ungrabbed again.
2710  *
2711  * @warning Providing impossible modifier sets creates undefined behavior.
2712  *
2713  * See also @ref evas_object_key_ungrab, @ref evas_object_focus_get,
2714  * @ref evas_object_focus_set, @ref evas_focus_get, @ref evas_key_modifier_add.
2715  *
2716  * @param[in] keyname The key to request events for.
2717  * @param[in] modifiers A mask of modifiers that must be present to trigger the
2718  * event.
2719  * @param[in] not_modifiers A mask of modifiers that must not be present to
2720  * trigger the event.
2721  * @param[in] exclusive Request that the @c obj is the only object receiving
2722  * the @c keyname events.
2723  *
2724  * @return @c true if the call succeeded, @c false otherwise.
2725  */
2726 EAPI Eina_Bool evas_object_key_grab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers, Eina_Bool exclusive) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
2727 
2728 /**
2729  * @brief Removes the grab on @c keyname key events by @c obj.
2730  *
2731  * Removes a key grab on @c obj if @c keyname, @c modifiers, and
2732  * @c not_modifiers match.
2733  *
2734  * See also @ref evas_object_key_grab, @ref evas_object_focus_get,
2735  * @ref evas_object_focus_set, @ref evas_focus_get.
2736  *
2737  * @param[in] keyname The key the grab is set for.
2738  * @param[in] modifiers A mask of modifiers that must be present to trigger the
2739  * event.
2740  * @param[in] not_modifiers A mask of modifiers that mus not not be present to
2741  * trigger the event.
2742  */
2743 EAPI void evas_object_key_ungrab(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers) EINA_ARG_NONNULL(2);
2744 
2745 /**
2746  * @}
2747  */
2748 
2749 /**
2750  * @ingroup Evas_Object_Group_Extras
2751  *
2752  * @{
2753  */
2754 
2755 /**
2756  * Set an attached data pointer to an object with a given string key.
2757  *
2758  * @param obj The object to attach the data pointer to
2759  * @param key The string key for the data to access it
2760  * @param data The pointer to the data to be attached
2761  *
2762  * This attaches the pointer @p data to the object @p obj, given the
2763  * access string @p key. This pointer will stay "hooked" to the object
2764  * until a new pointer with the same string key is attached with
2765  * evas_object_data_set() or it is deleted with
2766  * evas_object_data_del(). On deletion of the object @p obj, the
2767  * pointers will not be accessible from the object anymore.
2768  *
2769  * You can find the pointer attached under a string key using
2770  * evas_object_data_get(). It is the job of the calling application to
2771  * free any data pointed to by @p data when it is no longer required.
2772  *
2773  * If @p data is @c NULL, the old value stored at @p key will be
2774  * removed but no new value will be stored. This is synonymous with
2775  * calling evas_object_data_del() with @p obj and @p key.
2776  *
2777  * @note This function is very handy when you have data associated
2778  * specifically to an Evas object, being of use only when dealing with
2779  * it. Than you don't have the burden to a pointer to it elsewhere,
2780  * using this family of functions.
2781  *
2782  * Example:
2783  *
2784  * @code
2785  * int *my_data;
2786  * extern Evas_Object *obj;
2787  *
2788  * my_data = malloc(500);
2789  * evas_object_data_set(obj, "name_of_data", my_data);
2790  * printf("The data that was attached was %p\n", evas_object_data_get(obj, "name_of_data"));
2791  * @endcode
2792  */
2793 EAPI void                     evas_object_data_set(Evas_Object *obj, const char *key, const void *data) EINA_ARG_NONNULL(1, 2);
2794 
2795 /**
2796  * Return an attached data pointer on an Evas object by its given
2797  * string key.
2798  *
2799  * @param obj The object to which the data was attached
2800  * @param key The string key the data was stored under
2801  * @return The data pointer stored, or @c NULL if none was stored
2802  *
2803  * This function will return the data pointer attached to the object
2804  * @p obj, stored using the string key @p key. If the object is valid
2805  * and a data pointer was stored under the given key, that pointer
2806  * will be returned. If this is not the case, @c NULL will be
2807  * returned, signifying an invalid object or a non-existent key. It is
2808  * possible that a @c NULL pointer was stored given that key, but this
2809  * situation is nonsensical and thus can be considered an error as
2810  * well. @c NULL pointers are never stored as this is the return value
2811  * if an error occurs.
2812  *
2813  * Example:
2814  *
2815  * @code
2816  * int *my_data;
2817  * extern Evas_Object *obj;
2818  *
2819  * my_data = evas_object_data_get(obj, "name_of_my_data");
2820  * if (my_data) printf("Data stored was %p\n", my_data);
2821  * else printf("No data was stored on the object\n");
2822  * @endcode
2823  */
2824 EAPI void                    *evas_object_data_get(const Evas_Object *obj, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
2825 
2826 /**
2827  * Delete an attached data pointer from an object.
2828  *
2829  * @param obj The object to delete the data pointer from
2830  * @param key The string key the data was stored under
2831  * @return The original data pointer stored at @p key on @p obj
2832  *
2833  * This will remove the stored data pointer from @p obj stored under
2834  * @p key and return this same pointer, if actually there was data
2835  * there, or @c NULL, if nothing was stored under that key.
2836  *
2837  * Example:
2838  *
2839  * @code
2840  * int *my_data;
2841  * extern Evas_Object *obj;
2842  *
2843  * my_data = evas_object_data_del(obj, "name_of_my_data");
2844  * @endcode
2845  */
2846 EAPI void                    *evas_object_data_del(Evas_Object *obj, const char *key) EINA_ARG_NONNULL(1, 2);
2847 
2848 /**
2849  * @}
2850  */
2851 
2852 /**
2853  * @ingroup Evas_Object_Group_Find
2854  *
2855  * @{
2856  */
2857 
2858 /**
2859  * Retrieve the Evas object stacked at the top at the position of the
2860  * mouse cursor, over a given canvas
2861  *
2862  * @param   e A handle to the canvas.
2863  * @return  The Evas object that is over all other objects at the mouse
2864  * pointer's position
2865  *
2866  * This function will traverse all the layers of the given canvas,
2867  * from top to bottom, querying for objects with areas covering the
2868  * mouse pointer's position, over @p e.
2869  *
2870  * @warning This function will @b skip objects parented by smart
2871  * objects, acting only on the ones at the "top level", with regard to
2872  * object parenting.
2873  */
2874 EAPI Evas_Object *evas_object_top_at_pointer_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2875 
2876 /**
2877  * @}
2878  */
2879 
2880 /**
2881  * @defgroup Evas_Object_Group_Interceptors Object Method Interceptors
2882  *
2883  * Evas provides a way to intercept method calls. The interceptor
2884  * callback may opt to completely deny the call, or may check and
2885  * change the parameters before continuing. The continuation of an
2886  * intercepted call is done by calling the intercepted call again,
2887  * from inside the interceptor callback.
2888  *
2889  * @ingroup Evas_Object_Group
2890  */
2891 
2892 /**
2893  * @ingroup Evas_Object_Group_Interceptors
2894  *
2895  * @{
2896  */
2897 
2898 /**
2899  * Function signature for the resize event of an evas object
2900  *
2901  * @param data is the pointer passed through the callback.
2902  * @param obj the object being shown.
2903  *
2904  * @see evas_object_intercept_show_callback_add()
2905  * @see evas_object_intercept_show_callback_del()
2906  *
2907  */
2908 typedef void (*Evas_Object_Intercept_Show_Cb)(void *data, Evas_Object *obj);
2909 
2910 /**
2911  * Function signature for the hide event of an evas object
2912  *
2913  * @param data is the pointer passed through the callback.
2914  * @param obj the object being hidden.
2915  *
2916  * @see  evas_object_intercept_hide_callback_add()
2917  * @see  evas_object_intercept_hide_callback_del()
2918  *
2919  */
2920 typedef void (*Evas_Object_Intercept_Hide_Cb)(void *data, Evas_Object *obj);
2921 
2922 /**
2923  * Function signature for the move event of an evas object
2924  *
2925  * @param data the pointer passed through the callback.
2926  * @param obj the object being moved.
2927  * @param x move x position
2928  * @param y move y position
2929  *
2930  * @see  evas_object_intercept_move_callback_add()
2931  * @see  evas_object_intercept_move_callback_del()
2932  *
2933  */
2934 typedef void (*Evas_Object_Intercept_Move_Cb)(void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y);
2935 
2936 /**
2937  * Function signature for the resize event of an evas object
2938  *
2939  * @param data the pointer passed through the callback.
2940  * @param obj the object being resized.
2941  * @param width of the object
2942  * @param height of the object
2943  *
2944  * @see  evas_object_intercept_resize_callback_add()
2945  * @see  evas_object_intercept_resize_callback_del()
2946  *
2947  */
2948 typedef void (*Evas_Object_Intercept_Resize_Cb)(void *data, Evas_Object *obj, Evas_Coord w, Evas_Coord h);
2949 
2950 /**
2951  * Function signature for the raise event of an evas object
2952  *
2953  * @param data the pointer passed through the callback.
2954  * @param obj the object being raised.
2955  *
2956  * @see  evas_object_intercept_raise_callback_add()
2957  * @see  evas_object_intercept_raise_callback_del()
2958  *
2959  */
2960 typedef void (*Evas_Object_Intercept_Raise_Cb)(void *data, Evas_Object *obj);
2961 
2962 /**
2963  * Function signature for the lower event of an evas object
2964  *
2965  * @param data the pointer passed through the callback.
2966  * @param obj the object being lowered.
2967  *
2968  * @see  evas_object_intercept_lower_callback_add()
2969  * @see  evas_object_intercept_lower_callback_del()
2970  *
2971  */
2972 typedef void (*Evas_Object_Intercept_Lower_Cb)(void *data, Evas_Object *obj);
2973 
2974 /**
2975  * Function signature for the stack above event of an evas object
2976  *
2977  * @param data the pointer passed through the callback.
2978  * @param obj the object being stacked above.
2979  * @param above the object above which the object is stacked
2980  *
2981  * @see  evas_object_intercept_stack_above_callback_add()
2982  * @see  evas_object_intercept_stack_above_callback_del()
2983  *
2984  */
2985 typedef void (*Evas_Object_Intercept_Stack_Above_Cb)(void *data, Evas_Object *obj, Evas_Object *above);
2986 
2987 /**
2988  * Function signature for the stack below event of an evas object
2989  *
2990  * @param data the pointer passed through the callback.
2991  * @param obj the object being stacked below.
2992  * @param above the object below which the object is stacked
2993  *
2994  * @see  evas_object_intercept_stack_below_callback_add()
2995  * @see  evas_object_intercept_stack_below_callback_del()
2996  *
2997  */
2998 typedef void (*Evas_Object_Intercept_Stack_Below_Cb)(void *data, Evas_Object *obj, Evas_Object *above);
2999 
3000 /**
3001  * Function signature for the layer event of an evas object
3002  *
3003  * @param data the pointer passed through the callback.
3004  * @param obj the object being layered
3005  * @param l the layer value
3006  *
3007  * @see  evas_object_intercept_layer_callback_add()
3008  * @see  evas_object_intercept_layer_callback_del()
3009  *
3010  */
3011 typedef void (*Evas_Object_Intercept_Layer_Set_Cb)(void *data, Evas_Object *obj, int l);
3012 
3013 /**
3014  * Function signature for the focus set event of an evas object
3015  *
3016  * @param data the pointer passed through the callback.
3017  * @param obj the object being focused
3018  * @param focus the focus value, EINA_TRUE if the object is focused, EINA_FALSE otherwise
3019  *
3020  * @see  evas_object_intercept_focus_set_callback_add()
3021  * @see  evas_object_intercept_focus_set_callback_del()
3022  *
3023  */
3024 typedef void (*Evas_Object_Intercept_Focus_Set_Cb)(void *data, Evas_Object *obj, Eina_Bool focus);
3025 
3026 /**
3027  * Function signature for the focus set event of an evas object with seat info
3028  *
3029  * @param data the pointer passed through the callback.
3030  * @param obj the object being focused
3031  * @param focus the focus value, EINA_TRUE if the object is focused, EINA_FALSE otherwise
3032  * @param seat the seat for which focus is being set
3033  *
3034  * @see  evas_object_intercept_device_focus_set_callback_add()
3035  * @see  evas_object_intercept_device_focus_set_callback_del()
3036  *
3037  * @since 1.20
3038  */
3039 typedef void (*Evas_Object_Intercept_Device_Focus_Set_Cb)(void *data, Evas_Object *obj, Eina_Bool focus, Eo *seat);
3040 
3041 /**
3042  * Function signature for the color set event of an evas object
3043  *
3044  * @param data the pointer passed through the callback.
3045  * @param obj the object changing color
3046  * @param r the red component of the color
3047  * @param g the green component of the color
3048  * @param b the blue component of the color
3049  * @param a the alpha component of the color
3050  *
3051  * @see  evas_object_intercept_color_set_callback_add()
3052  * @see  evas_object_intercept_color_set_callback_del()
3053  *
3054  */
3055 typedef void (*Evas_Object_Intercept_Color_Set_Cb)(void *data, Evas_Object *obj, int r, int g, int b, int a);
3056 
3057 /**
3058  * Function signature for the clip set event of an evas object
3059  *
3060  * @param data the pointer passed through the callback.
3061  * @param obj the object being clipped
3062  * @param clip the evas object on which the object is clipped
3063  *
3064  * @see  evas_object_intercept_clip_set_callback_add()
3065  * @see  evas_object_intercept_clip_set_callback_del()
3066  *
3067  */
3068 typedef void (*Evas_Object_Intercept_Clip_Set_Cb)(void *data, Evas_Object *obj, Evas_Object *clip);
3069 
3070 /**
3071  * Function signature for the clip unset event of an evas object
3072  *
3073  * @param data the pointer passed through the callback.
3074  * @param obj the object being unclipped
3075  *
3076  * @see  evas_object_intercept_clip_unset_callback_add()
3077  * @see  evas_object_intercept_clip_unset_callback_del()
3078  *
3079  */
3080 typedef void (*Evas_Object_Intercept_Clip_Unset_Cb)(void *data, Evas_Object *obj);
3081 
3082 /**
3083  * Set the callback function that intercepts a show event of an object.
3084  *
3085  * @param obj The given canvas object pointer.
3086  * @param func The given function to be the callback function.
3087  * @param data The data passed to the callback function.
3088  *
3089  * This function sets a callback function to intercepts a show event
3090  * of a canvas object.
3091  *
3092  * @see evas_object_intercept_show_callback_del().
3093  *
3094  */
3095 EAPI void  evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3096 
3097 /**
3098  * Unset the callback function that intercepts a show event of a object.
3099  *
3100  * @param obj The given canvas object pointer.
3101  * @param func The given callback function.
3102  *
3103  * This function sets a callback function to intercepts a show event
3104  * of a canvas object.
3105  *
3106  * @see evas_object_intercept_show_callback_add().
3107  *
3108  */
3109 EAPI void *evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func) EINA_ARG_NONNULL(1, 2);
3110 
3111 /**
3112  * Set the callback function that intercepts a hide event of a object.
3113  *
3114  * @param obj The given canvas object pointer.
3115  * @param func The given function to be the callback function.
3116  * @param data The data passed to the callback function.
3117  *
3118  * This function sets a callback function to intercepts a hide event
3119  * of a canvas object.
3120  *
3121  * @see evas_object_intercept_hide_callback_del().
3122  *
3123  */
3124 EAPI void  evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3125 
3126 /**
3127  * Unset the callback function that intercepts a hide event of a object.
3128  *
3129  * @param obj The given canvas object pointer.
3130  * @param func The given callback function.
3131  *
3132  * This function sets a callback function to intercepts a hide event
3133  * of a canvas object.
3134  *
3135  * @see evas_object_intercept_hide_callback_add().
3136  *
3137  */
3138 EAPI void *evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func) EINA_ARG_NONNULL(1, 2);
3139 
3140 /**
3141  * Set the callback function that intercepts a move event of an object.
3142  *
3143  * @param obj The given canvas object pointer.
3144  * @param func The given function to be the callback function.
3145  * @param data The data passed to the callback function.
3146  *
3147  * This function sets a callback function to intercepts a move event
3148  * of a canvas object.
3149  *
3150  * @see evas_object_intercept_move_callback_del().
3151  *
3152  */
3153 EAPI void  evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3154 
3155 /**
3156  * Unset the callback function that intercepts a move event of an object.
3157  *
3158  * @param obj The given canvas object pointer.
3159  * @param func The given callback function.
3160  *
3161  * This function sets a callback function to intercepts a move event
3162  * of a canvas object.
3163  *
3164  * @see evas_object_intercept_move_callback_add().
3165  *
3166  */
3167 EAPI void *evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func) EINA_ARG_NONNULL(1, 2);
3168 
3169 /**
3170  * Set the callback function that intercepts a resize event of an object.
3171  *
3172  * @param obj The given canvas object pointer.
3173  * @param func The given function to be the callback function.
3174  * @param data The data passed to the callback function.
3175  *
3176  * This function sets a callback function to intercepts a resize event
3177  * of a canvas object.
3178  *
3179  * @see evas_object_intercept_resize_callback_del().
3180  *
3181  */
3182 EAPI void  evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3183 
3184 /**
3185  * Unset the callback function that intercepts a resize event of an object.
3186  *
3187  * @param obj The given canvas object pointer.
3188  * @param func The given callback function.
3189  *
3190  * This function sets a callback function to intercepts a resize event
3191  * of a canvas object.
3192  *
3193  * @see evas_object_intercept_resize_callback_add().
3194  *
3195  */
3196 EAPI void *evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func) EINA_ARG_NONNULL(1, 2);
3197 
3198 /**
3199  * Set the callback function that intercepts a raise event of an object.
3200  *
3201  * @param obj The given canvas object pointer.
3202  * @param func The given function to be the callback function.
3203  * @param data The data passed to the callback function.
3204  *
3205  * This function sets a callback function to intercepts a raise event
3206  * of a canvas object.
3207  *
3208  * @see evas_object_intercept_raise_callback_del().
3209  *
3210  */
3211 EAPI void  evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3212 
3213 /**
3214  * Unset the callback function that intercepts a raise event of an object.
3215  *
3216  * @param obj The given canvas object pointer.
3217  * @param func The given callback function.
3218  *
3219  * This function sets a callback function to intercepts a raise event
3220  * of a canvas object.
3221  *
3222  * @see evas_object_intercept_raise_callback_add().
3223  *
3224  */
3225 EAPI void *evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func) EINA_ARG_NONNULL(1, 2);
3226 
3227 /**
3228  * Set the callback function that intercepts a lower event of an object.
3229  *
3230  * @param obj The given canvas object pointer.
3231  * @param func The given function to be the callback function.
3232  * @param data The data passed to the callback function.
3233  *
3234  * This function sets a callback function to intercepts a lower event
3235  * of a canvas object.
3236  *
3237  * @see evas_object_intercept_lower_callback_del().
3238  *
3239  */
3240 EAPI void  evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3241 
3242 /**
3243  * Unset the callback function that intercepts a lower event of an object.
3244  *
3245  * @param obj The given canvas object pointer.
3246  * @param func The given callback function.
3247  *
3248  * This function sets a callback function to intercepts a lower event
3249  * of a canvas object.
3250  *
3251  * @see evas_object_intercept_lower_callback_add().
3252  *
3253  */
3254 EAPI void *evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func) EINA_ARG_NONNULL(1, 2);
3255 
3256 /**
3257  * Set the callback function that intercepts a stack above event of an object.
3258  *
3259  * @param obj The given canvas object pointer.
3260  * @param func The given function to be the callback function.
3261  * @param data The data passed to the callback function.
3262  *
3263  * This function sets a callback function to intercepts a stack above event
3264  * of a canvas object.
3265  *
3266  * @see evas_object_intercept_stack_above_callback_del().
3267  *
3268  */
3269 EAPI void  evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3270 
3271 /**
3272  * Unset the callback function that intercepts a stack above event of an object.
3273  *
3274  * @param obj The given canvas object pointer.
3275  * @param func The given callback function.
3276  *
3277  * This function sets a callback function to intercepts a stack above event
3278  * of a canvas object.
3279  *
3280  * @see evas_object_intercept_stack_above_callback_add().
3281  *
3282  */
3283 EAPI void *evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func) EINA_ARG_NONNULL(1, 2);
3284 
3285 /**
3286  * Set the callback function that intercepts a stack below event of an object.
3287  *
3288  * @param obj The given canvas object pointer.
3289  * @param func The given function to be the callback function.
3290  * @param data The data passed to the callback function.
3291  *
3292  * This function sets a callback function to intercepts a stack below event
3293  * of a canvas object.
3294  *
3295  * @see evas_object_intercept_stack_below_callback_del().
3296  *
3297  */
3298 EAPI void  evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3299 
3300 /**
3301  * Unset the callback function that intercepts a stack below event of an object.
3302  *
3303  * @param obj The given canvas object pointer.
3304  * @param func The given callback function.
3305  *
3306  * This function sets a callback function to intercepts a stack below event
3307  * of a canvas object.
3308  *
3309  * @see evas_object_intercept_stack_below_callback_add().
3310  *
3311  */
3312 EAPI void *evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func) EINA_ARG_NONNULL(1, 2);
3313 
3314 /**
3315  * Set the callback function that intercepts a layer set event of an object.
3316  *
3317  * @param obj The given canvas object pointer.
3318  * @param func The given function to be the callback function.
3319  * @param data The data passed to the callback function.
3320  *
3321  * This function sets a callback function to intercepts a layer set event
3322  * of a canvas object.
3323  *
3324  * @see evas_object_intercept_layer_set_callback_del().
3325  *
3326  */
3327 EAPI void  evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3328 
3329 /**
3330  * Unset the callback function that intercepts a layer set event of an object.
3331  *
3332  * @param obj The given canvas object pointer.
3333  * @param func The given callback function.
3334  *
3335  * This function sets a callback function to intercepts a layer set event
3336  * of a canvas object.
3337  *
3338  * @see evas_object_intercept_layer_set_callback_add().
3339  *
3340  */
3341 EAPI void *evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func) EINA_ARG_NONNULL(1, 2);
3342 
3343 /**
3344  * Set the callback function that intercepts a color set event of an object.
3345  *
3346  * @param obj The given canvas object pointer.
3347  * @param func The given function to be the callback function.
3348  * @param data The data passed to the callback function.
3349  *
3350  * This function sets a callback function to intercepts a color set event
3351  * of a canvas object.
3352  *
3353  * @see evas_object_intercept_color_set_callback_del().
3354  *
3355  */
3356 EAPI void  evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3357 
3358 /**
3359  * Unset the callback function that intercepts a color set event of an object.
3360  *
3361  * @param obj The given canvas object pointer.
3362  * @param func The given callback function.
3363  *
3364  * This function sets a callback function to intercepts a color set event
3365  * of a canvas object.
3366  *
3367  * @see evas_object_intercept_color_set_callback_add().
3368  *
3369  */
3370 EAPI void *evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func) EINA_ARG_NONNULL(1, 2);
3371 
3372 /**
3373  * Set the callback function that intercepts a clip set event of an object.
3374  *
3375  * @param obj The given canvas object pointer.
3376  * @param func The given function to be the callback function.
3377  * @param data The data passed to the callback function.
3378  *
3379  * This function sets a callback function to intercepts a clip set event
3380  * of a canvas object.
3381  *
3382  * @see evas_object_intercept_clip_set_callback_del().
3383  *
3384  */
3385 EAPI void  evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3386 
3387 /**
3388  * Unset the callback function that intercepts a clip set event of an object.
3389  *
3390  * @param obj The given canvas object pointer.
3391  * @param func The given callback function.
3392  *
3393  * This function sets a callback function to intercepts a clip set event
3394  * of a canvas object.
3395  *
3396  * @see evas_object_intercept_clip_set_callback_add().
3397  *
3398  */
3399 EAPI void *evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func) EINA_ARG_NONNULL(1, 2);
3400 
3401 /**
3402  * Set the callback function that intercepts a clip unset event of an object.
3403  *
3404  * @param obj The given canvas object pointer.
3405  * @param func The given function to be the callback function.
3406  * @param data The data passed to the callback function.
3407  *
3408  * This function sets a callback function to intercepts a clip unset event
3409  * of a canvas object.
3410  *
3411  * @see evas_object_intercept_clip_unset_callback_del().
3412  *
3413  */
3414 EAPI void  evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3415 
3416 /**
3417  * Unset the callback function that intercepts a clip unset event of an object.
3418  *
3419  * @param obj The given canvas object pointer.
3420  * @param func The given callback function.
3421  *
3422  * This function sets a callback function to intercepts a clip unset event
3423  * of a canvas object.
3424  *
3425  * @see evas_object_intercept_clip_unset_callback_add().
3426  *
3427  */
3428 EAPI void *evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func) EINA_ARG_NONNULL(1, 2);
3429 
3430 /**
3431  * Set the callback function that intercepts a focus set event of an object.
3432  *
3433  * @param obj The given canvas object pointer.
3434  * @param func The given function to be the callback function.
3435  * @param data The data passed to the callback function.
3436  *
3437  * This function sets a callback function to intercepts a focus set event
3438  * of a canvas object.
3439  *
3440  * @see evas_object_intercept_focus_set_callback_del().
3441  *
3442  */
3443 EAPI void  evas_object_intercept_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3444 
3445 /**
3446  * Unset the callback function that intercepts a focus set event of an object.
3447  *
3448  * @param obj The given canvas object pointer.
3449  * @param func The given callback function.
3450  *
3451  * This function sets a callback function to intercepts a focus set event
3452  * of a canvas object.
3453  *
3454  * @see evas_object_intercept_focus_set_callback_add().
3455  *
3456  */
3457 EAPI void *evas_object_intercept_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2);
3458 
3459 /**
3460  * Set the callback function that intercepts a focus set event of an object.
3461  *
3462  * @param obj The given canvas object pointer.
3463  * @param func The given function to be the callback function.
3464  * @param data The data passed to the callback function.
3465  *
3466  * This function sets a callback function to intercepts a focus set event
3467  * of a canvas object and provides seat info.
3468  *
3469  * @see evas_object_intercept_device_focus_set_callback_del().
3470  *
3471  * @since 1.20
3472  *
3473  */
3474 EAPI void  evas_object_intercept_device_focus_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func, const void *data) EINA_ARG_NONNULL(1, 2);
3475 
3476 /**
3477  * Unset the callback function that intercepts a focus set event of an object.
3478  *
3479  * @param obj The given canvas object pointer.
3480  * @param func The given callback function.
3481  *
3482  * This function sets a callback function to intercepts a focus set event
3483  * of a canvas object and provides seat info.
3484  *
3485  * @see evas_object_intercept_device_focus_set_callback_add().
3486  *
3487  * @since 1.20
3488  *
3489  */
3490 EAPI void *evas_object_intercept_device_focus_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Device_Focus_Set_Cb func) EINA_ARG_NONNULL(1, 2);
3491 
3492 /* Internal APIs for legacy compatibility */
3493 #ifdef EFL_CANVAS_OBJECT_PROTECTED
3494 
3495 enum _Evas_Object_Intercept_Cb_Type
3496 {
3497    EVAS_OBJECT_INTERCEPT_CB_VISIBLE,
3498    EVAS_OBJECT_INTERCEPT_CB_MOVE,
3499    EVAS_OBJECT_INTERCEPT_CB_RESIZE,
3500    EVAS_OBJECT_INTERCEPT_CB_RAISE,
3501    EVAS_OBJECT_INTERCEPT_CB_LOWER,
3502    EVAS_OBJECT_INTERCEPT_CB_STACK_ABOVE,
3503    EVAS_OBJECT_INTERCEPT_CB_STACK_BELOW,
3504    EVAS_OBJECT_INTERCEPT_CB_LAYER_SET,
3505    EVAS_OBJECT_INTERCEPT_CB_FOCUS_SET,
3506    EVAS_OBJECT_INTERCEPT_CB_COLOR_SET,
3507    EVAS_OBJECT_INTERCEPT_CB_CLIP_SET,
3508    EVAS_OBJECT_INTERCEPT_CB_DEVICE_FOCUS_SET,
3509 };
3510 typedef enum _Evas_Object_Intercept_Cb_Type Evas_Object_Intercept_Cb_Type;
3511 
3512 EWAPI Eina_Bool _evas_object_intercept_call(Evas_Object *obj, Evas_Object_Intercept_Cb_Type type, int internal, ...);
3513 
3514 #endif
3515 
3516 
3517 /**
3518  * @}
3519  */
3520 
3521 /**
3522  * @ingroup Evas_Object_Rectangle
3523  *
3524  * @{
3525  */
3526 
3527 /**
3528  * Adds a rectangle to the given evas.
3529  * @param   e The given evas.
3530  * @return  The new rectangle object.
3531  *
3532  * @ingroup Evas_Object_Rectangle
3533  */
3534 EAPI Evas_Object *evas_object_rectangle_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
3535 
3536 /**
3537  * @}
3538  */
3539 
3540 /**
3541  * @defgroup Evas_Object_Vg_Group Vector Graphics Object
3542  * @ingroup Evas
3543  *
3544  * @ref Evas_Object_Vg_Group is the scene graph for managing vector graphics objects.
3545  * User can create shape objects as well as fill objects and give them to the
3546  * Evas_Object_Vg for drawing on the screen as well as managing the lifecycle
3547  * of the objects, enabling reuse of shape objects.
3548  *
3549  * Since Evas_Object_Vg is an Evas_Object all operations applicable to
3550  * an Evas_Object can be performed on it (clipping, mapping, etc).
3551  *
3552  * To create complex vector graphics you can create a hierarchy of shape
3553  * and fill objects and give the hierarchy to Evas_Object which will be
3554  * responsible for drawing and showing on the screen.
3555  *
3556  * As the shape object and fill object (linear and radial gradients) have
3557  * retain mode API, you only have to create it once and set the properties
3558  * and give it to Evas_Object_Vg.
3559  *
3560  * Any change in the properties of a shape or fill object are automatically
3561  * notified to Evas_Object_Vg triggering a redraw to reflect the changes.
3562  *
3563  * To create a vector path, you can give a list of path commands to the shape
3564  * object using efl_gfx_shape_path_set() API.
3565  *
3566  * Below are the list of features currently supported by Vector object.
3567  *
3568  * @li Drawing SVG Path.
3569  *     You can construct a path by using api in efl_gfx_utils.h
3570  *
3571  * @li Gradient filling and stroking.
3572  *     You can fill or stroke the path using linear or radial gradient.
3573  *     @see Evas_Vg_Gradient_Linear and Evas_Vg_Gradient_Radial
3574  *
3575  * @li Transformation support for path and gradient fill. You can apply
3576        affine transforms to path objects.
3577  *     @see Eina_Matrix.
3578  *
3579  * @note Below are the list of interfaces and classes that can be used
3580  *       to draw vector graphics using vector objects.
3581  *
3582  * @li Efl.Gfx.Shape
3583  * @li Evas.VG_Shape
3584  * @li Evas.VG_Node
3585  * @li Efl.Gfx.Gradient
3586  * @li Efl.Gfx.Gradient_Radial
3587  * @li Efl.Gfx.Gradient_Linear
3588  *
3589  * Example:
3590  * @code
3591  * vector = evas_object_vg_add(canvas);
3592  * root = evas_obj_vg_root_node_get(vector);
3593  * shape = efl_add(EVAS_VG_SHAPE_CLASS, root);
3594  * Efl_Gfx_Path_Command *path_cmd = NULL;
3595  * double *points = NULL;
3596  * efl_gfx_path_append_circle(&path_cmd, &points);
3597  * *       evas_vg_node_origin_set(shape, 10, 10);
3598  * *       efl_gfx_shape_stroke_width_set(shape, 1.0);
3599  * *       evas_vg_node_color_set(shape, 128, 128, 128, 80);
3600  * *       efl_gfx_shape_path_set(shape, path_cmd, points);
3601  * @endcode
3602  *
3603  * @since 1.14
3604  *
3605  * @{
3606  */
3607 
3608 /**
3609  * @brief Creates a new vector object on the given Evas @p e canvas.
3610  *
3611  * The shape object hierarchy can be added to the evas_object_vg by accessing
3612  * the root node of the vg canvas and adding the hierarchy as child to the root
3613  * node.
3614  *
3615  * @param[in] e The given canvas.
3616  * @return The created vector object handle.
3617  *
3618  * @see evas_obj_vg_root_node_get()
3619  *
3620  * @since 1.14
3621  */
3622 EAPI Evas_Object *evas_object_vg_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
3623 
3624 /**
3625  * Get the total number of frames of the vector, if it's animated.
3626  *
3627  * @return The number of frames. 0, if it's not animated.
3628  *
3629  * @since 1.23
3630  */
3631 EAPI int evas_object_vg_animated_frame_count_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3632 
3633 /**
3634  * Get the duration of a sequence of frames.
3635  *
3636  * This returns total duration in seconds that the specified
3637  * sequence of frames should take.
3638  *
3639  * If @p start_frame is 1 and @p frame_num is 0, this returns the
3640  * duration of frame 1. If @p start_frame is 1 and @p frame_num is 1,
3641  * this returns the total duration of frame 1 + frame 2.
3642  *
3643  * @param[in] start_frame The first frame, ranges from 1 to maximum frame count.
3644  * @param[in] frame_num Number of frames in the sequence, starts from 0.
3645  *
3646  * @return Duration in seconds.
3647  *
3648  * @see evas_object_vg_animated_frame_count_get()
3649  * @since 1.23
3650  */
3651 EAPI double evas_object_vg_animated_frame_duration_get(const Evas_Object *obj, int start_frame EINA_UNUSED, int frame_num EINA_UNUSED) EINA_ARG_NONNULL(1);
3652 
3653 /**
3654  *
3655  * Set the source file from where an vector object must fetch the real
3656  * vector data (it may be one of json, svg, eet files).
3657  *
3658  * If the file supports multiple data stored in it (as Eet files do),
3659  * you can specify the key to be used as the index of the vector in
3660  * this file.
3661  *
3662  * @param[in] file The vector file path.
3663  * @param[in] key The vector key in @p file (if its an Eet one), or @c
3664 NULL, otherwise.
3665  *
3666  * @return @c EINA_TRUE if it's succeed to read file, @c EINA_FALSE otherwise.
3667  *
3668  * @since 1.23
3669  */
3670 EAPI Eina_Bool evas_object_vg_file_set(Evas_Object *obj, const char *file, const char *key);
3671 
3672 /**
3673  * Set current frame of animated vector object.
3674  *
3675  * @param[in] frame_index The index of current frame.
3676  *
3677  * @note the @p frame_index must be in range of animation frames. (0 ~ max frame count)
3678  *
3679  * @return @c EINA_TRUE, if the frame index is valid. @c EINA_FALSE, otherwise.
3680  *
3681  * @see evas_object_vg_animated_frame_count_get()
3682  *
3683  * @since 1.23
3684  */
3685 EAPI Eina_Bool evas_object_vg_animated_frame_set(Evas_Object *obj, int frame_index) EINA_ARG_NONNULL(1, 2);
3686 
3687 /**
3688  * Get the current frame number of animated vector object.
3689  *
3690  * @return The frame index.
3691  *
3692  * @see evas_object_vg_animated_frame_set()
3693  * @see evas_object_vg_animated_frame_count_get()
3694  *
3695  * @since 1.23
3696  */
3697 EAPI int evas_object_vg_animated_frame_get(const Evas_Object *obj) EINA_ARG_NONNULL(1);
3698 
3699 
3700 #include "canvas/efl_canvas_vg_node_eo.legacy.h"
3701 #include "canvas/efl_canvas_vg_object_eo.legacy.h"
3702 #include "canvas/efl_canvas_vg_container_eo.legacy.h"
3703 #include "canvas/efl_canvas_vg_shape_eo.legacy.h"
3704 #include "canvas/efl_canvas_vg_gradient_eo.legacy.h"
3705 
3706 /**
3707  * @brief These values determine how the end of opened sub-paths are rendered in a
3708  * stroke. @ref evas_vg_shape_stroke_cap_set
3709  *
3710  * @since 1.24
3711  */
3712 typedef enum Evas_Vg_Cap_Type
3713 {
3714   EVAS_VG_CAP_BUTT = 0, /**< The end of lines is rendered as a full stop on the
3715                          * last point itself */
3716   EVAS_VG_CAP_ROUND,    /**< The end of lines is rendered as a half-circle
3717                          * around */
3718   EVAS_VG_CAP_SQUARE,   /**< The end of lines is rendered as a square around
3719                          * the last point */
3720   EVAS_VG_CAP_LAST      /**< Sentinel value to indicate last enum field during
3721                          * iteration */
3722 } Evas_Vg_Cap;
3723 
3724 
3725 /**
3726  * @brief These values determine how two joining lines are rendered in a stroker.
3727  * @ref evas_vg_shape_stroke_join_set
3728  *
3729  * @since 1.24
3730  */
3731 typedef enum Evas_Vg_Join_Type
3732 {
3733   EVAS_VG_JOIN_MITER = 0, /**< Used to render mitered line joins. The intersection
3734                            * of the strokes is clipped at a line perpendicular to
3735                            * the bisector of the angle between the strokes, at the
3736                            * distance from the intersection of the segments equal
3737                            * to the product of the miter limit value and the border
3738                            * radius.  This prevents long spikes being created */
3739   EVAS_VG_JOIN_ROUND,     /**< Used to render rounded line joins. Circular arcs
3740                            * are used to join two lines smoothly */
3741   EVAS_VG_JOIN_BEVEL,     /**< Used to render beveled line joins. The outer corner
3742                            * of the joined lines is filled by enclosing the
3743                            * triangular region of the corner with a straight line
3744                            * between the outer corners of each stroke */
3745   EVAS_VG_JOIN_LAST       /**< Sentinel value to indicate last enum field during
3746                            * iteration */
3747 } Evas_Vg_Join;
3748 
3749 /**
3750  * @brief These values determine how the points are interpreted in a stream of points.
3751  *
3752  * @since 1.24
3753  */
3754 typedef enum Evas_Vg_Path_Command_Type
3755 {
3756   EVAS_VG_PATH_COMMAND_END = 0,  /**< The end of stream , no more points to process */
3757   EVAS_VG_PATH_COMMAND_MOVE_TO,  /**< The next point is the start point of a sub path */
3758   EVAS_VG_PATH_COMMAND_LINE_TO,  /**< The next point is used to draw a line from
3759                                   * current point */
3760   EVAS_VG_PATH_COMMAND_CUBIC_TO, /**< The next three point is used to draw
3761                                   * a cubic bezier curve from current point */
3762   EVAS_VG_PATH_COMMAND_CLOSE,    /**< Close the current subpath by drawing a line
3763                                   * between current point and the first point of
3764                                   * current subpath */
3765   EVAS_VG_PATH_COMMAND_LAST      /**< Sentinel value to indicate last enum field
3766                                   * during iteration */
3767 } Evas_Vg_Path_Command;
3768 
3769 /**
3770  * @brief Type defining gradient stops. Describes the location and color of a
3771  * transition point in a gradient.
3772  *
3773  * @since 1.24
3774  */
3775 typedef struct _Evas_Vg_Gradient_Stop
3776 {
3777   double offset; /**< The location of the gradient stop within the gradient
3778                   * vector */
3779   int r; /**< The component R color of the gradient stop */
3780   int g; /**< The component G color of the gradient stop */
3781   int b; /**< The component B color of the gradient stop */
3782   int a; /**< The component A color of the gradient stop */
3783 } Evas_Vg_Gradient_Stop;
3784 
3785 /**
3786  * @brief Specifies how the area outside the gradient area should be filled.
3787  * @ref evas_vg_gradient_spread_set
3788  *
3789  * @since 1.24
3790  */
3791 typedef enum Evas_Vg_Gradient_Spread_Type
3792 {
3793   EVAS_VG_GRADIENT_SPREAD_PAD = 0, /**< The area is filled with the closest stop
3794                                     * color. This is the default */
3795   EVAS_VG_GRADIENT_SPREAD_REFLECT, /**< The gradient is reflected outside the
3796                                     * gradient area */
3797   EVAS_VG_GRADIENT_SPREAD_REPEAT, /**< The gradient is repeated outside the
3798                                    * gradient area */
3799   EVAS_VG_GRADIENT_SPREAD_LAST /**< Sentinel value to indicate last enum field
3800                                 * during iteration */
3801 } Evas_Vg_Gradient_Spread;
3802 
3803 /**
3804  * @brief Type describing dash.
3805  * @ref evas_vg_shape_stroke_dash_set
3806  *
3807  * @since 1.24
3808  */
3809 typedef struct _Evas_Vg_Dash
3810 {
3811   double length; /**< Dash drawing length */
3812   double gap;    /**< Distance between two dashes */
3813 } Evas_Vg_Dash;
3814 
3815 /**
3816  * @brief Creates a new vector shape object.
3817  *
3818  * @param[in] parent The given vector container object.
3819  * @return The created vector shape object handle.
3820  *
3821  * @since 1.14
3822  */
3823 EAPI Evas_Vg_Shape* evas_vg_shape_add(Evas_Vg_Container *parent);
3824 
3825 /**
3826  * @brief Creates a new vector container object.
3827  *
3828  * @param[in] parent The given vector container object.
3829  * @return The created vector container object handle.
3830  *
3831  * @since 1.14
3832  */
3833 
3834 EAPI Evas_Vg_Container* evas_vg_container_add(Evas_Object *parent);
3835 
3836 /**
3837  * @brief Retrieves whether or not the given Evas_Vg_Node object is visible.
3838  *
3839  * @param[in] obj The object.
3840  * @return @c EINA_TRUE if the object is visible, @c EINA_FALSE otherwise.
3841  *
3842  * @since 1.24
3843  */
3844 EAPI Eina_Bool evas_vg_node_visible_get(Evas_Vg_Node *obj);
3845 
3846 /**
3847  * @brief Makes the given Evas_Vg_Node object visible or invisible.
3848  *
3849  * @param[in] obj The object.
3850  * @param[in] v @c EINA_TRUE if to make the object visible, @c EINA_FALSE otherwise.
3851  *
3852  * @since 1.24
3853  */
3854 EAPI void evas_vg_node_visible_set(Evas_Vg_Node *obj, Eina_Bool v);
3855 
3856 /**
3857  * @brief Retrieves the general/main color of the given Evas_Vg_Node object.
3858  *
3859  * Retrieves the “main” color's RGB component (and alpha channel)
3860  * values, <b>which range from 0 to 255</b>. For the alpha channel,
3861  * which defines the object's transparency level, 0 means totally
3862  * transparent, while 255 means opaque. These color values are
3863  * premultiplied by the alpha value.
3864  *
3865  *
3866  * @note Use @c NULL pointers on the components you're not interested
3867  * in: they'll be ignored by the function.
3868  *
3869  * @param[in] obj The object.
3870  * @param[out] r The red component of the given color.
3871  * @param[out] g The green component of the given color.
3872  * @param[out] b The blue component of the given color.
3873  * @param[out] a The alpha component of the given color.
3874  *
3875  * @since 1.24
3876  */
3877 EAPI void evas_vg_node_color_get(Evas_Vg_Node *obj, int *r, int *g, int *b, int *a);
3878 
3879 /**
3880  * @brief Sets the general/main color of the given Evas_Vg_Node object to the given
3881  * one.
3882  *
3883  * @see evas_vg_node_color_get() (for an example)
3884  * @note These color values are expected to be premultiplied by @p a.
3885  *
3886  * @param[in] obj The object.
3887  * @param[in] r The red component of the given color.
3888  * @param[in] g The green component of the given color.
3889  * @param[in] b The blue component of the given color.
3890  * @param[in] a The alpha component of the given color.
3891  *
3892  * @since 1.24
3893  */
3894 EAPI void evas_vg_node_color_set(Evas_Vg_Node *obj, int r, int g, int b, int a);
3895 
3896 /**
3897  * @brief Retrieves the geometry of the given Evas_Vg_Node object.
3898  *
3899  * @param[in] obj The object.
3900  * @param[out] x The x geometry of the given object.
3901  * @param[out] y The y geometry of the given object.
3902  * @param[out] w The w geometry of the given object.
3903  * @param[out] h The h geometry of the given object.
3904  *
3905  * @since 1.24
3906  */
3907 EAPI void evas_vg_node_geometry_get(Evas_Vg_Node *obj, int *x, int *y, int *w, int *h);
3908 
3909 /**
3910  * @brief Changes the geometry of the given Evas_Vg_Node object.
3911  *
3912  * @param[in] obj The object.
3913  * @param[in] x The x geometry of the given object.
3914  * @param[in] y The y geometry of the given object.
3915  * @param[in] w The w geometry of the given object.
3916  * @param[in] h The h geometry of the given object.
3917  *
3918  * @since 1.24
3919  * @deprecated
3920  */
3921 EAPI void evas_vg_node_geometry_set(Evas_Vg_Node *obj, int x, int y, int w, int h) EINA_DEPRECATED;
3922 
3923 /**
3924  * @brief Stack @p obj immediately below @p below.
3925  *
3926  * Objects, in a given canvas, are stacked in the order they get added
3927  * to it.  This means that, if they overlap, the highest ones will
3928  * cover the lowest ones, in that order. This function is a way to
3929  * change the stacking order for the objects.
3930  *
3931  * This function is intended to be used with <b>objects belonging to
3932  * the same layer</b> in a given canvas, otherwise it will fail (and
3933  * accomplish nothing).
3934  *
3935  * If you have smart objects on your canvas and @p obj is a member of
3936  * one of them, then @p below must also be a member of the same
3937  * smart object.
3938  *
3939  * Similarly, if @p obj is not a member of a smart object, @p below
3940  * must not be either.
3941  *
3942  * @see evas_object_layer_get()
3943  * @see evas_object_layer_set()
3944  * @see evas_object_stack_below()
3945  *
3946  * @param[in] obj The object.
3947  * @param[in] below The object below which to stack.
3948  *
3949  * @since 1.24
3950  */
3951 EAPI void evas_vg_node_stack_below(Evas_Vg_Node *obj, Evas_Vg_Node *below);
3952 
3953 /**
3954  * @brief Stack @p obj immediately above @p above.
3955  *
3956  * Objects, in a given canvas, are stacked in the order they get added
3957  * to it.  This means that, if they overlap, the highest ones will
3958  * cover the lowest ones, in that order. This function is a way to
3959  * change the stacking order for the objects.
3960  *
3961  * This function is intended to be used with <b>objects belonging to
3962  * the same layer</b> in a given canvas, otherwise it will fail (and
3963  * accomplish nothing).
3964  *
3965  * If you have smart objects on your canvas and @p obj is a member of
3966  * one of them, then @p above must also be a member of the same
3967  * smart object.
3968  *
3969  * Similarly, if @p obj is not a member of a smart object, @p above
3970  * must not be either.
3971  *
3972  * @see evas_object_layer_get()
3973  * @see evas_object_layer_set()
3974  * @see evas_object_stack_below()
3975  *
3976  * @param[in] obj The object.
3977  * @param[in] above The object above which to stack.
3978  *
3979  * @since 1.24
3980  */
3981 EAPI void evas_vg_node_stack_above(Evas_Vg_Node *obj, Evas_Vg_Node *above);
3982 
3983 /**
3984  * @brief Raise @p obj to the top of its layer.
3985  *
3986  * @p obj will, then, be the highest one in the layer it belongs
3987  * to. Object on other layers won't get touched.
3988  *
3989  * @see evas_object_stack_above()
3990  * @see evas_object_stack_below()
3991  * @see evas_object_lower()
3992  *
3993  * @param[in] obj The object.
3994  *
3995  * @since 1.24
3996  */
3997 EAPI void evas_vg_node_raise(Evas_Vg_Node *obj);
3998 
3999 /**
4000  * @brief Lower @p obj to the bottom of its layer.
4001  *
4002  * @p obj will, then, be the lowest one in the layer it belongs
4003  * to. Objects on other layers won't get touched.
4004  *
4005  * @see evas_object_stack_above()
4006  * @see evas_object_stack_below()
4007  * @see evas_object_raise()
4008  *
4009  * @param[in] obj The object.
4010  *
4011  * @since 1.24
4012  */
4013 EAPI void evas_vg_node_lower(Evas_Vg_Node *obj);
4014 
4015 #include "canvas/efl_canvas_vg_node_eo.legacy.h"
4016 
4017 /**
4018  * @brief Get the stroke scaling factor used for stroking this path.
4019  *
4020  * @param[in] obj The object.
4021  * @return The stroke scale of the given object.
4022  *
4023  * @since 1.14
4024  */
4025 EAPI double evas_vg_shape_stroke_scale_get(Evas_Vg_Shape *obj);
4026 
4027 /**
4028  * @brief Sets the stroke scale to be used for stroking the path.
4029  * the scale property will be used along with stroke width property.
4030  *
4031  * @param[in] obj The object.
4032  * @param[in] s The stroke scale value.
4033  *
4034  * @since 1.14
4035  */
4036 EAPI void evas_vg_shape_stroke_scale_set(Evas_Vg_Shape *obj, double s);
4037 
4038 /**
4039  * @brief Gets the color used for stroking the path.
4040  *
4041  * @param[in] obj The object.
4042  * @param[out] r The red component of the given color.
4043  * @param[out] g The green component of the given color.
4044  * @param[out] b The blue component of the given color.
4045  * @param[out] a The alpha component of the given color.
4046  *
4047  * @since 1.14
4048  */
4049 EAPI void evas_vg_shape_stroke_color_get(Evas_Vg_Shape *obj, int *r, int *g, int *b, int *a);
4050 
4051 /**
4052  * @brief Sets the color to be used for stroking the path.
4053  *
4054  * @param[in] obj The object.
4055  * @param[in] r The red component of the given color.
4056  * @param[in] g The green component of the given color.
4057  * @param[in] b The blue component of the given color.
4058  * @param[in] a The alpha component of the given color.
4059  *
4060  * @since 1.14
4061  */
4062 EAPI void evas_vg_shape_stroke_color_set(Evas_Vg_Shape *obj, int r, int g, int b, int a);
4063 
4064 /**
4065  * @brief Gets the stroke width to be used for stroking the path.
4066  *
4067  * @param[in] obj The object.
4068  * @return The stroke width of the given object.
4069  *
4070  * @since 1.14
4071  */
4072 EAPI double evas_vg_shape_stroke_width_get(Evas_Vg_Shape *obj);
4073 
4074 /**
4075  * @brief Sets the stroke width to be used for stroking the path.
4076  *
4077  * @param[in] obj The object.
4078  * @param[in] w The stroke width to be used.
4079  *
4080  * @since 1.14
4081  */
4082 EAPI void evas_vg_shape_stroke_width_set(Evas_Vg_Shape *obj, double w);
4083 
4084 /**
4085  * @brief Gets the stroke location to be used for stroking the path.
4086  *
4087  * @param[in] obj The object.
4088  * @return The stroke location.
4089  *
4090  * @since 1.24
4091  */
4092 EAPI double evas_vg_shape_stroke_location_get(Evas_Vg_Shape *obj);
4093 
4094 /**
4095  * @brief Sets the stroke location to be used for stroking the path.
4096  *
4097  * @param[in] obj The object.
4098  * @param[in] centered The stroke location.
4099  *
4100  * @since 1.24
4101  */
4102 EAPI void evas_vg_shape_stroke_location_set(Evas_Vg_Shape *obj, double centered);
4103 
4104 /**
4105  * @brief Gets the stroke dash type used for stroking path.
4106  *
4107  * @param[in] obj The object.
4108  * @param[out] dash The dash types.
4109  * @param[out] length The length of dash types.
4110  *
4111  * @since 1.24
4112  */
4113 EAPI void evas_vg_shape_stroke_dash_get(Evas_Vg_Shape *obj, const Evas_Vg_Dash **dash, unsigned int *length);
4114 
4115 /**
4116  * @brief Sets the stroke dash type to be used for stroking the path.
4117  *
4118  * @param[in] obj The object.
4119  * @param[in] dash The dash types.
4120  * @param[in] length The length of dash types.
4121  *
4122  * @since 1.24
4123  */
4124 EAPI void evas_vg_shape_stroke_dash_set(Evas_Vg_Shape *obj, const Evas_Vg_Dash *dash, unsigned int length);
4125 
4126 /**
4127  * @brief Gets the cap style used for stroking path.
4128  *
4129  * @param[in] obj The object.
4130  * @return The cap style of the given object.
4131  *
4132  * @since 1.14
4133  */
4134 EAPI Evas_Vg_Cap evas_vg_shape_stroke_cap_get(Evas_Vg_Shape *obj);
4135 
4136 /**
4137  * @brief Sets the cap style to be used for stroking the path.
4138  *
4139  * The cap will be used for capping the end point of a
4140  * open subpath.
4141  *
4142  * @see Evas_Vg_Cap
4143  *
4144  * @param[in] obj The object.
4145  * @param[in] c The cap style to use , default is EVAS_VG_CAP_BUTT
4146  *
4147  * @since 1.14
4148  */
4149 EAPI void evas_vg_shape_stroke_cap_set(Evas_Vg_Shape *obj, Evas_Vg_Cap c);
4150 
4151 /**
4152  * @brief Gets the join style used for stroking path.
4153  *
4154  * @param[in] obj The object.
4155  * @return The join style of the given object.
4156  *
4157  * @since 1.14
4158  */
4159 EAPI Evas_Vg_Join evas_vg_shape_stroke_join_get(Evas_Vg_Shape *obj);
4160 
4161 /**
4162  * @brief Sets the join style to be used for stroking the path.
4163  *
4164  * The join style will be used for joining the two line segment
4165  * while stroking the path.
4166  *
4167  * @see Evas_Vg_Join
4168  *
4169  * @param[in] obj The object.
4170  * @param[in] j The join style to use, default is EVAS_VG_JOIN_MITER.
4171  *
4172  * @since 1.14
4173  */
4174 EAPI void evas_vg_shape_stroke_join_set(Evas_Vg_Shape *obj, Evas_Vg_Join j);
4175 
4176 /**
4177  * @brief Set the list of commands and points to be used to create the
4178  * content of shape.
4179  *
4180  * @see Evas_Vg_Path_Command
4181  *
4182  * @param[in] obj The object.
4183  * @param[in] op The command list.
4184  * @param[in] points The point list.
4185  *
4186  * @since 1.14
4187  */
4188 EAPI void evas_vg_shape_path_set(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command *op, const double *points);
4189 
4190 /**
4191  * @brief Gets the command and points list.
4192  *
4193  * @param[in] obj The object.
4194  * @param[out] op The command list.
4195  * @param[out] points The point list.
4196  *
4197  * @since 1.14
4198  */
4199 
4200 EAPI void evas_vg_shape_path_get(Evas_Vg_Shape *obj, const Evas_Vg_Path_Command **op, const double **points);
4201 
4202 /**
4203  * @brief Gets the command and points length.
4204  *
4205  * @param[in] obj The object.
4206  * @param[out] commands The command length.
4207  * @param[out] points The points length.
4208  *
4209  * @since 1.14
4210  */
4211 EAPI void evas_vg_shape_path_length_get(Evas_Vg_Shape *obj, unsigned int *commands, unsigned int *points);
4212 
4213 /**
4214  * @brief Gets the current points.
4215  *
4216  * @param[in] obj The object.
4217  * @param[out] x The x co-ordinate of current point.
4218  * @param[out] y The y co-ordinate of current point.
4219  *
4220  * @since 1.14
4221  */
4222 EAPI void evas_vg_shape_current_get(Evas_Vg_Shape *obj, double *x, double *y);
4223 
4224 /**
4225  * @brief Gets the current control points.
4226  *
4227  * @param[in] obj The object.
4228  * @param[out] x The x co-ordinate of control point.
4229  * @param[out] y The y co-ordinate of control point.
4230  *
4231  * @since 1.14
4232  */
4233 EAPI void evas_vg_shape_current_ctrl_get(Evas_Vg_Shape *obj, double *x, double *y);
4234 
4235 /**
4236  * @brief Copy the shape data from the object specified.
4237  *
4238  * @param[in] obj The object.
4239  * @param[in] dup_from The Shape object from where data will be copied.
4240  *
4241  * @since 1.14
4242  */
4243 EAPI void evas_vg_shape_dup(Evas_Vg_Shape *obj, Evas_Vg_Shape *dup_from);
4244 
4245 /**
4246  * @brief Reset the shape data of the shape object.
4247  *
4248  * @param[in] obj The object.
4249  *
4250  * @since 1.14
4251  */
4252 EAPI void evas_vg_shape_reset(Evas_Vg_Shape *obj);
4253 
4254 /**
4255  * @brief Moves the current point to the given point,
4256  * implicitly starting a new subpath and closing the previous one.
4257  *
4258  * @see evas_vg_shape_append_close()
4259  *
4260  * @param[in] obj The object.
4261  * @param[in] x The x co-ordinate of the current point.
4262  * @param[in] y The y co-ordinate of the current point.
4263  *
4264  * @since 1.14
4265  */
4266 EAPI void evas_vg_shape_append_move_to(Evas_Vg_Shape *obj, double x, double y);
4267 
4268 /**
4269  * @brief Adds a straight line from the current position to the given endPoint.
4270  * After the line is drawn, the current position is updated to be at the end
4271  * point of the line.
4272  *
4273  * @note if no current position present, it draws a line to itself, basically
4274  * a point.
4275  *
4276  * @see evas_vg_shape_append_move_to()
4277  *
4278  * @param[in] obj The object.
4279  * @param[in] x The x co-ordinate of end point of the line.
4280  * @param[in] y The y co-ordinate of end point of the line.
4281  *
4282  * @since 1.14
4283  */
4284 EAPI void evas_vg_shape_append_line_to(Evas_Vg_Shape *obj, double x, double y);
4285 
4286 /**
4287  * @brief Adds a quadratic Bezier curve between the current position and the
4288  * given end point (x,y) using the control points specified by (ctrl_x, ctrl_y).
4289  * After the path is drawn, the current position is updated to be at the end
4290  * point of the path.
4291  *
4292  * @param[in] obj The object.
4293  * @param[in] x The x co-ordinate of end point of the line.
4294  * @param[in] y The y co-ordinate of end point of the line.
4295  * @param[in] ctrl_x The x co-ordinate of control point.
4296  * @param[in] ctrl_y The y co-ordinate of control point.
4297  *
4298  * @since 1.14
4299  */
4300 EAPI void evas_vg_shape_append_quadratic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y);
4301 
4302 /**
4303  * @brief Same as evas_vg_shape_append_quadratic_to() api only difference is that it
4304  * uses the current control point to draw the bezier.
4305  *
4306  * @see evas_vg_shape_append_quadratic_to()
4307  *
4308  * @param[in] obj The object.
4309  * @param[in] x The x co-ordinate of end point of the line.
4310  * @param[in] y The y co-ordinate of end point of the line.
4311  *
4312  * @since 1.14
4313  */
4314 EAPI void evas_vg_shape_append_squadratic_to(Evas_Vg_Shape *obj, double x, double y);
4315 
4316 /**
4317  * @brief Adds a cubic Bezier curve between the current position and the
4318  * given end point (x,y) using the control points specified by
4319  * (ctrl_x0, ctrl_y0), and (ctrl_x1, ctrl_y1). After the path is drawn,
4320  * the current position is updated to be at the end point of the path.
4321  *
4322  * @param[in] obj The object.
4323  * @param[in] x The x co-ordinate of end point of the line.
4324  * @param[in] y The y co-ordinate of end point of the line.
4325  * @param[in] ctrl_x0 The x co-ordinate of 1st control point.
4326  * @param[in] ctrl_y0 The y co-ordinate of 1st control point.
4327  * @param[in] ctrl_x1 The x co-ordinate of 2nd control point.
4328  * @param[in] ctrl_y1 The y co-ordinate of 2nd control point.
4329  *
4330  * @since 1.14
4331  */
4332 EAPI void evas_vg_shape_append_cubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x0, double ctrl_y0, double ctrl_x1, double ctrl_y1);
4333 
4334 /**
4335  * @brief Same as evas_vg_shape_append_cubic_to() api only difference is that it uses
4336  * the current control point to draw the bezier.
4337  *
4338  * @see evas_vg_shape_append_cubic_to()
4339  *
4340  * @param[in] obj The object.
4341  * @param[in] x The x co-ordinate of end point of the line.
4342  * @param[in] y The x co-ordinate of end point of the line.
4343  * @param[in] ctrl_x The x co-ordinate of 2nd control point.
4344  * @param[in] ctrl_y The y co-ordinate of 2nd control point.
4345  *
4346  * @since 1.14
4347  */
4348 EAPI void evas_vg_shape_append_scubic_to(Evas_Vg_Shape *obj, double x, double y, double ctrl_x, double ctrl_y);
4349 
4350 /**
4351  * @brief Append an arc that connects from the current point int the point list
4352  * to the given point (x,y). The arc is defined by the given radius in
4353  * x-direction (rx) and radius in y direction (ry).
4354  *
4355  * @note Use this api if you know the end point's of the arc otherwise
4356  * use more convenient function evas_vg_shape_append_arc_to()
4357  *
4358  * @see evas_vg_shape_append_arc_to()
4359  *
4360  * @param[in] obj The object.
4361  * @param[in] x The x co-ordinate of end point of the arc.
4362  * @param[in] y The y co-ordinate of end point of the arc.
4363  * @param[in] rx The radius of arc in x direction.
4364  * @param[in] ry The radius of arc in y direction.
4365  * @param[in] angle The x-axis rotation , normally 0.
4366  * @param[in] large_arc Defines whether to draw the larger arc or smaller arc joining two point.
4367  * @param[in] sweep Defines whether the arc will be drawn counter-clockwise or clockwise from current point to the end point taking into account the large_arc property.
4368  *
4369  * @since 1.14
4370  */
4371 EAPI void evas_vg_shape_append_arc_to(Evas_Vg_Shape *obj, double x, double y, double rx, double ry, double angle, Eina_Bool large_arc, Eina_Bool sweep);
4372 
4373 /**
4374  * @brief Append an arc that enclosed in the given rectangle (x, y, w, h). The
4375  * angle is defined in counter clock wise , use -ve angle for clockwise arc.
4376  *
4377  * @param[in] obj The object.
4378  * @param[in] y The x co-ordinate of the rect.
4379  * @param[in] y The y co-ordinate of the rect.
4380  * @param[in] w The width of the rect.
4381  * @param[in] h The height of the rect.
4382  * @param[in] start_angle The angle at which the arc will start.
4383  * @param[in] sweep_length The length of the arc.
4384  *
4385  * @since 1.18
4386  */
4387 EAPI void evas_vg_shape_append_arc(Evas_Vg_Shape *obj, double x, double y, double w, double h, double start_angle, double sweep_length);
4388 
4389 /**
4390  * @brief Closes the current subpath by drawing a line to the beginning of the subpath,
4391  * automatically starting a new path. The current point of the new path is
4392  * (0, 0).
4393  *
4394  * @note If the subpath does not contain any points, this function does nothing.
4395  *
4396  * @param[in] obj The object.
4397  *
4398  * @since 1.14
4399  */
4400 EAPI void evas_vg_shape_append_close(Evas_Vg_Shape *obj);
4401 
4402 /**
4403  * @brief Append a circle with given center and radius.
4404  *
4405  * @see evas_vg_shape_append_arc()
4406  *
4407  * @param[in] obj The object.
4408  * @param[in] x The x co-ordinate of the center of the circle.
4409  * @param[in] y The y co-ordinate of the center of the circle.
4410  * @param[in] radius The radius of the circle.
4411  *
4412  * @since 1.14
4413  */
4414 EAPI void evas_vg_shape_append_circle(Evas_Vg_Shape *obj, double x, double y, double radius);
4415 
4416 /**
4417  * @brief Append the given rectangle with rounded corner to the path.
4418  *
4419  * The xr and yr arguments specify the radii of the ellipses defining the
4420  * corners of the rounded rectangle.
4421  *
4422  * @note xr and yr are specified in terms of width and height respectively.
4423  * @note if xr and yr are 0, then it will draw a rectangle without rounded corner.
4424  *
4425  * @param[in] obj The object.
4426  * @param[in] x The x co-ordinate of the rectangle.
4427  * @param[in] y The y co-ordinate of the rectangle.
4428  * @param[in] w The width of the rectangle.
4429  * @param[in] h The height of the rectangle.
4430  * @param[in] rx The x radius of the rounded corner and should be in range [0 to w/2].
4431  * @param[in] ry The y radius of the rounded corner and should be in range [0 to h/2].
4432  *
4433  * @since 1.14
4434  */
4435 EAPI void evas_vg_shape_append_rect(Evas_Vg_Shape *obj, double x, double y, double w, double h, double rx, double ry);
4436 
4437 /**
4438  * @brief Append the SVG path data.
4439  *
4440  * @param[in] obj The object.
4441  * @param[in] svg_path_data The svg path data to append.
4442  *
4443  * @since 1.24
4444  */
4445 EAPI void evas_vg_shape_append_svg_path(Evas_Vg_Shape *obj, const char *svg_path_data);
4446 
4447 /**
4448  * @brief Creates intermediary path part-way between two paths
4449  *
4450  * Sets the points of the @c obj as the linear interpolation of the points in
4451  * the @c from and @c to paths.  The path's x,y position and control point
4452  * coordinates are likewise interpolated.
4453  *
4454  * The @c from and @c to paths must not already have equivalent points, and
4455  * @c to must contain at least as many points as @c from, else the function
4456  * returns @c false with no interpolation performed.  If @c to has more points
4457  * than @c from, the excess points are ignored.
4458  *
4459  * @param[in] obj The object.
4460  * @param[in] from The source path.
4461  * @param[in] to The destination path.
4462  * @param[in] pos_map The position map in range 0.0 to 1.0.
4463  *
4464  * @since 1.24
4465  */
4466 EAPI Eina_Bool evas_vg_shape_interpolate(Evas_Vg_Shape *obj, const Eo *from, const Eo *to, double pos_map);
4467 
4468 /**
4469  * @brief Check if the given objects have equal commands.
4470  *
4471  * @param[in] obj The object.
4472  * @param[in] with The target object.
4473  *
4474  * @return True on equal, @c false otherwise.
4475  *
4476  * @since 1.24
4477  */
4478 EAPI Eina_Bool evas_vg_shape_equal_commands(Evas_Vg_Shape *obj, const Eo *with);
4479 
4480 /**
4481  * @brief Set a vg object as the fill property.
4482  *
4483  * @param[in] obj The object whose fill property gets modified.
4484  * @param[in] f The object content to be used for filling.
4485  *
4486  * @since 1.24
4487  */
4488 EAPI void evas_vg_shape_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f);
4489 
4490 /**
4491  * @brief Returns the object that is set for the fill property.
4492  *
4493  * @param[in] obj The object whose fill property is inspected.
4494  * @return The object that is set as fill property.
4495  *
4496  * @since 1.24
4497  */
4498 EAPI Evas_Vg_Node* evas_vg_shape_fill_get(const Evas_Vg_Shape *obj);
4499 
4500 /**
4501  * @brief Set a vg object as the stroke fill property.
4502  *
4503  * @param[in] obj The object whose stroke fill property gets modified.
4504  * @param[in] f The object content will be used for stroke filling.
4505  *
4506  * @since 1.24
4507  */
4508 EAPI void evas_vg_shape_stroke_fill_set(Evas_Vg_Shape *obj, Evas_Vg_Node *f);
4509 
4510 /**
4511  * @brief Returns the object that is set for the stroke fill property.
4512  *
4513  * @param[in] obj The object whose stroke fill property is inspected.
4514  * @return The object that is set as stroke fill property.
4515  *
4516  * @since 1.24
4517  */
4518 EAPI Evas_Vg_Node* evas_vg_shape_stroke_fill_get(const Evas_Vg_Shape *obj);
4519 
4520 #include "canvas/efl_canvas_vg_shape_eo.legacy.h"
4521 
4522 /**
4523  * @brief Set the list of color stops for the gradient.
4524  *
4525  * @param[in] obj The object.
4526  * @param[in] colors The color stops list.
4527  * @param[in] length The length of the list.
4528  *
4529  * @since 1.14
4530  */
4531 EAPI void evas_vg_gradient_stop_set(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop *colors, unsigned int length);
4532 
4533 /**
4534  * @brief Get the list of color stops.
4535  *
4536  * @param[in] obj The object.
4537  * @param[out] colors The color stops list.
4538  * @param[out] length The length of the list.
4539  *
4540  * @since 1.14
4541  */
4542 EAPI void evas_vg_gradient_stop_get(Evas_Vg_Gradient *obj, const Evas_Vg_Gradient_Stop **colors, unsigned int *length);
4543 
4544 /**
4545  * @brief Specifies the spread method that should be used for this gradient.
4546  *
4547  * @param[in] obj The object.
4548  * @param[in] s The spread type to be used.
4549  *
4550  * @since 1.14
4551  */
4552 EAPI void evas_vg_gradient_spread_set(Evas_Vg_Gradient *obj, Evas_Vg_Gradient_Spread s);
4553 
4554 /**
4555  * @brief Returns the spread method use by this gradient. The default is
4556  * EVAS_VG_GRADIENT_SPREAD_PAD.
4557  *
4558  * @param[in] obj The object.
4559  * @return The spread type of the given object.
4560  *
4561  * @since 1.14
4562  */
4563 EAPI Evas_Vg_Gradient_Spread evas_vg_gradient_spread_get(Evas_Vg_Gradient *obj);
4564 
4565 /**
4566  * @brief Creates a new linear gradient object.
4567  *
4568  * @param[in] parent The given vector container object.
4569  * @return The created linear gradient object handle.
4570  *
4571  * @since 1.24
4572  */
4573 EAPI Evas_Vg_Gradient_Linear* evas_vg_gradient_linear_add(Evas_Vg_Container *parent);
4574 
4575 /**
4576  * @brief Sets the start point of this linear gradient.
4577  *
4578  * @param[in] obj The object.
4579  * @param[in] x The x co-ordinate of start point.
4580  * @param[in] y The y co-ordinate of start point
4581  *
4582  * @since 1.24
4583  */
4584 EAPI void evas_vg_gradient_linear_start_set(Evas_Vg_Gradient_Linear *obj, double x, double y);
4585 
4586 /**
4587  * @brief Gets the start point of this linear gradient.
4588  *
4589  * @param[in] obj The object.
4590  * @param[out] x The x co-ordinate of start point.
4591  * @param[out] y The y co-ordinate of start point.
4592  *
4593  * @since 1.24
4594  */
4595 EAPI void evas_vg_gradient_linear_start_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y);
4596 
4597 /**
4598  * @brief Sets the end point of this linear gradient.
4599  *
4600  * @param[in] obj The object.
4601  * @param[in] x The x co-ordinate of end point.
4602  * @param[in] y The y co-ordinate of end point.
4603  *
4604  * @since 1.24
4605  */
4606 EAPI void evas_vg_gradient_linear_end_set(Evas_Vg_Gradient_Linear *obj, double x, double y);
4607 
4608 /**
4609  * @brief Gets the end point of this linear gradient.
4610  *
4611  * @param[in] obj The object.
4612  * @param[out] x The x co-ordinate of end point.
4613  * @param[out] y The y co-ordinate of end point.
4614  *
4615  * @since 1.24
4616  */
4617 EAPI void evas_vg_gradient_linear_end_get(Evas_Vg_Gradient_Linear *obj, double *x, double *y);
4618 
4619 /**
4620  * @brief Creates a new radial gradient object.
4621  *
4622  * @param[in] parent The given vector container object.
4623  * @return The created radial gradient object handle.
4624  *
4625  * @since 1.24
4626  */
4627 EAPI Evas_Vg_Gradient_Radial* evas_vg_gradient_radial_add(Evas_Vg_Container *parent);
4628 
4629 /**
4630  * @brief Sets the center of this radial gradient.
4631  *
4632  * @param[in] obj The object.
4633  * @param[in] x The x co-ordinate of center point.
4634  * @param[in] y The y co-ordinate of center point.
4635  *
4636  * @since 1.24
4637  */
4638 EAPI void evas_vg_gradient_radial_center_set(Evas_Vg_Gradient_Radial *obj, double x, double y);
4639 
4640 /**
4641  * @brief Gets the center of this radial gradient.
4642  *
4643  * @param[in] obj The object.
4644  * @param[out] x The x co-ordinate of center point.
4645  * @param[out] y The y co-ordinate of center point.
4646  *
4647  * @since 1.24
4648  */
4649 EAPI void evas_vg_gradient_radial_center_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y);
4650 
4651 /**
4652  * @brief Sets the center radius of this radial gradient.
4653  *
4654  * @param[in] obj The object.
4655  * @param[in] r The center radius.
4656  *
4657  * @since 1.24
4658  */
4659 EAPI void evas_vg_gradient_radial_radius_set(Evas_Vg_Gradient_Radial *obj, double r);
4660 
4661 /**
4662  * @brief Gets the center radius of this radial gradient.
4663  *
4664  * @param[in] obj The object.
4665  * @return The center radius of the given object.
4666  *
4667  * @since 1.24
4668  */
4669 EAPI double evas_vg_gradient_radial_radius_get(Evas_Vg_Gradient_Radial *obj);
4670 
4671 /**
4672  * @brief Sets the focal point of this radial gradient.
4673  *
4674  * @param[in] obj The object.
4675  * @param[in] x The x co-ordinate of focal point.
4676  * @param[in] y The y co-ordinate of focal point.
4677  *
4678  * @since 1.24
4679  */
4680 EAPI void evas_vg_gradient_radial_focal_set(Evas_Vg_Gradient_Radial *obj, double x, double y);
4681 
4682 /**
4683  * @brief Gets the focal point of this radial gradient.
4684  *
4685  * @param[in] obj The object.
4686  * @param[out] x The x co-ordinate of focal point.
4687  * @param[out] y The y co-ordinate of focal point.
4688  *
4689  * @since 1.24
4690  */
4691 EAPI void evas_vg_gradient_radial_focal_get(Evas_Vg_Gradient_Radial *obj, double *x, double *y);
4692 
4693 /**
4694  * @}
4695  */
4696 
4697 /**
4698  * @addtogroup Evas_Object_Image
4699  *
4700  * @{
4701  */
4702 
4703 /**
4704  * Creates a new image object on the given Evas @p e canvas.
4705  *
4706  * @param e The given canvas.
4707  * @return The created image object handle.
4708  *
4709  * @note If you intend to @b display an image somehow in a GUI,
4710  * besides binding it to a real image file/source (with
4711  * evas_object_image_file_set(), for example), you'll have to tell
4712  * this image object how to fill its space with the pixels it can get
4713  * from the source. See evas_object_image_filled_add(), for a helper
4714  * on the common case of scaling up an image source to the whole area
4715  * of the image object.
4716  *
4717  * @see evas_object_image_fill_set()
4718  *
4719  * Example:
4720  * @code
4721  * img = evas_object_image_add(canvas);
4722  * evas_object_image_file_set(img, "/path/to/img", NULL);
4723  * @endcode
4724  */
4725 EAPI Evas_Object                  *evas_object_image_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
4726 
4727 /**
4728  * Creates a new image object that @b automatically scales its bound
4729  * image to the object's area, on both axis.
4730  *
4731  * @param e The given canvas.
4732  * @return The created image object handle.
4733  *
4734  * This is a helper function around evas_object_image_add() and
4735  * evas_object_image_filled_set(). It has the same effect of applying
4736  * those functions in sequence, which is a very common use case.
4737  *
4738  * @note Whenever this object gets resized, the bound image will be
4739  * rescaled, too.
4740  *
4741  * @see evas_object_image_add()
4742  * @see evas_object_image_filled_set()
4743  * @see evas_object_image_fill_set()
4744  */
4745 EAPI Evas_Object                  *evas_object_image_filled_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
4746 
4747 /**
4748  * Sets the data for an image from memory to be loaded
4749  *
4750  * This is the same as evas_object_image_file_set() but the file to be loaded
4751  * may exist at an address in memory (the data for the file, not the filename
4752  * itself). The @p data at the address is copied and stored for future use, so
4753  * no @p data needs to be kept after this call is made. It will be managed and
4754  * freed for you when no longer needed. The @p size is limited to 2 gigabytes
4755  * in size, and must be greater than 0. A @c NULL @p data pointer is also
4756  * invalid. Set the filename to @c NULL to reset to empty state and have the
4757  * image file data freed from memory using evas_object_image_file_set().
4758  *
4759  * The @p format is optional (pass @c NULL if you don't need/use it). It is
4760  * used to help Evas guess better which loader to use for the data. It may
4761  * simply be the "extension" of the file as it would normally be on disk
4762  * such as "jpg" or "png" or "gif" etc.
4763  *
4764  * @param obj The given image object.
4765  * @param data The image file data address
4766  * @param size The size of the image file data in bytes
4767  * @param format The format of the file (optional), or @c NULL if not needed
4768  * @param key The image key in file, or @c NULL.
4769  */
4770 EAPI void                          evas_object_image_memfile_set(Evas_Object *obj, void *data, int size, char *format, char *key) EINA_ARG_NONNULL(1, 2);
4771 
4772 /**
4773  * @def EVAS_NATIVE_SURFACE_VERSION
4774  * Magic version number to know what the native surface struct looks like
4775  */
4776 
4777 #define EVAS_NATIVE_SURFACE_VERSION 5
4778 
4779 /**
4780  * Native surface types that image object supports
4781  *
4782  * @see Evas_Native_Surface
4783  * @see evas_object_image_native_surface_set()
4784  */
4785 typedef enum _Evas_Native_Surface_Type
4786 {
4787    EVAS_NATIVE_SURFACE_NONE, /**< No surface type */
4788    EVAS_NATIVE_SURFACE_X11,  /**< X Window system based type. pixmap id or visual of the pixmap */
4789    EVAS_NATIVE_SURFACE_OPENGL, /**< OpenGL system based type. texture or framebuffer id*/
4790    EVAS_NATIVE_SURFACE_WL, /**< Wayland system based type. buffer of surface */
4791    EVAS_NATIVE_SURFACE_TBM, /**< Tizen system based type. tbm surface @since 1.14  */
4792    EVAS_NATIVE_SURFACE_EVASGL, /**< Evas GL based type. evas gl surface @since 1.14 */
4793    EVAS_NATIVE_SURFACE_WL_DMABUF, /**< Wayland system based type. using dmabuf @since 1.18 */
4794 } Evas_Native_Surface_Type;
4795 
4796 /**
4797  * Native surface types that image object supports
4798  *
4799  * @see Evas_Native_Surface
4800  * @see evas_object_image_native_surface_set()
4801  */
4802 typedef enum _Evas_Native_Surface_Status
4803 {
4804    EVAS_NATIVE_SURFACE_STATUS_SCANOUT_ON,
4805    EVAS_NATIVE_SURFACE_STATUS_SCANOUT_OFF,
4806    EVAS_NATIVE_SURFACE_STATUS_PLANE_ASSIGN,
4807    EVAS_NATIVE_SURFACE_STATUS_PLANE_RELEASE,
4808 } Evas_Native_Surface_Status;
4809 
4810 typedef void (*Evas_Native_Scanout_Handler)(void *scanout_data, Evas_Native_Surface_Status status);
4811 
4812 typedef struct _Evas_Native_Scanout
4813 {
4814    Evas_Native_Scanout_Handler handler;
4815    void *data;
4816 } Evas_Native_Scanout;
4817 
4818 /**
4819  * @brief A generic datatype for engine specific native surface information.
4820  *
4821  * Please fill up Evas_Native_Surface fields that regarded with current surface
4822  * type. If you want to set the native surface type to
4823  * EVAS_NATIVE_SURFACE_X11, you need to set union data with x11.visual or
4824  * x11.pixmap. If you need to set the native surface as
4825  * EVAS_NATIVE_SURFACE_OPENGL, on the other hand, you need to set union data
4826  * with opengl.texture_id or opengl.framebuffer_id and so on.
4827  * If you need to set the native surface as EVAS_NATIVE_SURFACE_WL,
4828  * you need to set union data with wl.legacy_buffer.
4829  * If you need to set the native surface as EVAS_NATIVE_SURFACE_TBM,
4830  * you need to set union data with tbm surface. The version field
4831  * should be set with EVAS_NATIVE_SURFACE_VERSION in order to check abi
4832  * break in your application on the different efl library versions.
4833  *
4834  * @warning Native surface types totally depend on the system. Please
4835  *          be aware that the types are supported on your system before using
4836  *          them.
4837  *
4838  * @note The information stored in an @c Evas_Native_Surface returned by
4839  *       @ref evas_gl_native_surface_get() is not meant to be used by
4840  *       applications except for passing it to
4841  *       @ref evas_object_image_native_surface_set().
4842  *
4843  * @see evas_object_image_native_surface_set()
4844  */
4845 typedef struct _Evas_Native_Surface
4846 {
4847    int                      version; /**< Current Native Surface Version. Use EVAS_NATIVE_SURFACE_VERSION */
4848    Evas_Native_Surface_Type type; /**< Surface type. @see Evas_Native_Surface_Type */
4849    union {
4850       struct
4851       {
4852          void         *visual; /**< visual of the pixmap to use (Visual) */
4853          unsigned long pixmap; /**< pixmap id to use (Pixmap) */
4854          unsigned int  multiple_buffer; /**< From version 4. 1 if pixmap is multiple buffer pixmap such as named pixmap created by enlightenment. driver dependent. @since 1.19 */
4855       } x11; /**< Set this struct fields if surface data is X11 based. */
4856 
4857       struct
4858       {
4859          unsigned int texture_id; /**< opengl texture id to use from glGenTextures() */
4860          unsigned int framebuffer_id; /**< 0 if not a FBO, FBO id otherwise from glGenFramebuffers() */
4861          unsigned int internal_format; /**< same as 'internalFormat' for glTexImage2D() */
4862          unsigned int format; /**< same as 'format' for glTexImage2D() */
4863          unsigned int x, y, w, h; /**< region inside the texture to use (image size is assumed as texture size, with 0, 0 being the top-left and co-ordinates working down to the right and bottom being positive) */
4864       } opengl; /**< Set this struct fields if surface data is OpenGL based. */
4865       struct
4866       {
4867          void *legacy_buffer; /**< wayland client buffer to use */
4868       } wl; /**< Set this struct fields if surface data is Wayland based. */
4869       struct
4870       {
4871          void *attr; /**< Pointer to dmabuf attributes - contents copied */
4872          void *resource; /**< Wayland resource pointer, kept as is */
4873          Evas_Native_Scanout scanout;
4874       } wl_dmabuf; /**< Set this struct fields if surface data is Wayland dmabuf based. @since 1.18 */
4875       struct
4876       {
4877          void *buffer; /**< tbm surface buffer to use @since 1.14 */
4878       } tbm; /**< Set this struct fields if surface data is Tizen based. @since 1.14 */
4879       struct
4880       {
4881          void *surface; /**< evas gl surface to use @since 1.14 */
4882       } evasgl; /**< Set this struct fields if surface data is Evas GL based. @since 1.14 */
4883    } data; /**< Choose one union data according to your surface. */
4884 } Evas_Native_Surface;
4885 
4886 /**
4887  * Set the native surface of a given image of the canvas
4888  *
4889  * @param obj The given canvas pointer.
4890  * @param surf The new native surface.
4891  *
4892  * This function sets a native surface of a given canvas image.
4893  *
4894  */
4895 EAPI void                          evas_object_image_native_surface_set(Evas_Object *obj, Evas_Native_Surface *surf) EINA_ARG_NONNULL(1, 2);
4896 
4897 /**
4898  * @brief Get the native surface of a given image of the canvas
4899  *
4900  * This function returns the native surface of a given canvas image.
4901  *
4902  * @return The native surface.
4903  */
4904 EAPI Evas_Native_Surface          *evas_object_image_native_surface_get(const Evas_Object *obj);
4905 
4906 /**
4907  * Possible orientation options for evas_object_image_orient_set().
4908  *
4909  * @since 1.14
4910  */
4911 typedef enum
4912 {
4913   EVAS_IMAGE_ORIENT_NONE = 0, /**< no orientation change */
4914   EVAS_IMAGE_ORIENT_0 = 0, /**< no orientation change */
4915   EVAS_IMAGE_ORIENT_90 = 1, /**< rotate 90 degrees clockwise */
4916   EVAS_IMAGE_ORIENT_180 = 2, /**< rotate 180 degrees clockwise */
4917   EVAS_IMAGE_ORIENT_270 = 3, /**< rotate 90 degrees counter-clockwise (i.e. 270 degrees clockwise) */
4918   EVAS_IMAGE_FLIP_HORIZONTAL = 4, /**< flip image horizontally (along the x = width / 2 line) */
4919   EVAS_IMAGE_FLIP_VERTICAL = 5, /**< flip image vertically (along the y = height / 2 line) */
4920   EVAS_IMAGE_FLIP_TRANSPOSE = 6, /**< flip image along the y = (width - x) line (bottom-left to top-right) */
4921   EVAS_IMAGE_FLIP_TRANSVERSE = 7 /**< flip image along the y = x line (top-left to bottom-right) */
4922 } Evas_Image_Orient;
4923 
4924 /**
4925  * Preload an image object's image data in the background
4926  *
4927  * @param obj The given image object.
4928  * @param cancel @c EINA_FALSE will add it the preloading work queue,
4929  *               @c EINA_TRUE will remove it (if it was issued before).
4930  *
4931  * This function requests the preload of the data image in the
4932  * background. The work is queued before being processed (because
4933  * there might be other pending requests of this type).
4934  *
4935  * Whenever the image data gets loaded, Evas will call
4936  * #EVAS_CALLBACK_IMAGE_PRELOADED registered callbacks on @p obj (what
4937  * may be immediately, if the data was already preloaded before).
4938  *
4939  * Use @c EINA_TRUE for @p cancel on scenarios where you don't need
4940  * the image data preloaded anymore.
4941  *
4942  * @note Any evas_object_show() call after evas_object_image_preload()
4943  * will make the latter to be @b cancelled, with the loading process
4944  * now taking place @b synchronously (and, thus, blocking the return
4945  * of the former until the image is loaded). It is highly advisable,
4946  * then, that the user preload an image with it being @b hidden, just
4947  * to be shown on the #EVAS_CALLBACK_IMAGE_PRELOADED event's callback.
4948  */
4949 EAPI void                          evas_object_image_preload(Evas_Object *obj, Eina_Bool cancel) EINA_ARG_NONNULL(1);
4950 
4951 /**
4952  * Clear the source object on a proxy image object.
4953  *
4954  * @param obj Image object to clear source of.
4955  * @return @c EINA_TRUE on success, @c EINA_FALSE on error.
4956  *
4957  * This is equivalent to calling evas_object_image_source_set() with a
4958  * @c NULL source.
4959  */
4960 EAPI Eina_Bool                     evas_object_image_source_unset(Evas_Object *obj) EINA_ARG_NONNULL(1);
4961 
4962 /**
4963  *
4964  * Set the source file from where an image object must fetch the real
4965  * image data (it may be an Eet file, besides pure image ones).
4966  *
4967  * If the file supports multiple data stored in it (as Eet files do),
4968  * you can specify the key to be used as the index of the image in
4969  * this file.
4970  *
4971  * Example:
4972  * @code
4973  * img = evas_object_image_add(canvas);
4974  * evas_object_image_file_set(img, "/path/to/img", NULL);
4975  * err = evas_object_image_load_error_get(img);
4976  * if (err != EVAS_LOAD_ERROR_NONE)
4977  * {
4978  * fprintf(stderr, "could not load image '%s'. error string is \"%s\"\n",
4979  * valid_path, evas_load_error_str(err));
4980  * }
4981  * else
4982  * {
4983  * evas_object_image_fill_set(img, 0, 0, w, h);
4984  * evas_object_resize(img, w, h);
4985  * evas_object_show(img);
4986  * }
4987  * @endcode
4988  *
4989  * @param[in] obj The object
4990  * @param[in] file The image file path.
4991  * @param[in] key The image key in @p file (if its an Eet one), or @c
4992  *                NULL, otherwise.
4993  */
4994 EAPI void evas_object_image_file_set(Eo *obj, const char *file, const char *key);
4995 
4996 /**
4997  *
4998  * Retrieve the source file from where an image object is to fetch the
4999  * real image data (it may be an Eet file, besides pure image ones).
5000  *
5001  * You must @b not modify the strings on the returned pointers.
5002  *
5003  * @note Use @c NULL pointers on the file components you're not
5004  * interested in: they'll be ignored by the function.
5005  *
5006  * @param[in] obj The object
5007  * @param[out] file The image file path.
5008  * @param[out] key The image key in @p file (if its an Eet one), or @c
5009  *                 NULL, otherwise.
5010  */
5011 EAPI void evas_object_image_file_get(const Eo *obj, const char **file, const char **key);
5012 
5013 /**
5014  *
5015  * Set the source mmaped file from where an image object must fetch the real
5016  * image data (it must be an Eina_File).
5017  *
5018  * If the file supports multiple data stored in it (as Eet files do),
5019  * you can specify the key to be used as the index of the image in
5020  * this file.
5021  *
5022  * @since 1.8
5023  *
5024  * @param[in] obj The object
5025  * @param[in] f The mmaped file
5026  * @param[in] key The image key in @p file (if its an Eet one), or @c
5027  *                NULL, otherwise.
5028  */
5029 EAPI void evas_object_image_mmap_set(Eo *obj, const Eina_File *f, const char *key);
5030 
5031 /**
5032  *
5033  * Get the source mmaped file from where an image object must fetch the real
5034  * image data (it must be an Eina_File).
5035  *
5036  * If the file supports multiple data stored in it (as Eet files do),
5037  * you can get the key to be used as the index of the image in
5038  * this file.
5039  *
5040  * @since 1.10
5041  *
5042  * @param[in] obj The object
5043  * @param[out] f The mmaped file
5044  * @param[out] key The image key in @p file (if its an Eet one), or @c
5045  *                 NULL, otherwise.
5046  */
5047 EAPI void evas_object_image_mmap_get(const Eo *obj, const Eina_File **f, const char **key);
5048 
5049 /**
5050  *
5051  * Save the given image object's contents to an (image) file.
5052  * Proxy object is image object, but it doesn't have contents. So you can't use this function for proxy objects.
5053  *
5054  * The extension suffix on @p file will determine which <b>saver
5055  * module</b> Evas is to use when saving, thus the final file's
5056  * format. If the file supports multiple data stored in it (Eet ones),
5057  * you can specify the key to be used as the index of the image in it.
5058  *
5059  * You can specify some flags when saving the image.  Currently
5060  * acceptable flags are @c quality and @c compress. Eg.: @c
5061  * "quality=100 compress=9"
5062  *
5063  * quality is hint for the quality of image,0-100. 0 means low quality
5064  * and saved image size is small. 100 means high quality and saved image size is big.
5065  *
5066  * compress is hint for the compression modes (Eet ones) or for the compression flags (Png one)
5067  * (1 == compress, 0 = don't compress).
5068  *
5069  * @param[in] obj The object
5070  * @param[in] file The filename to be used to save the image (extension
5071  *                 obligatory).
5072  * @param[in] key The image key in the file (if an Eet one), or @c NULL,
5073  *                otherwise.
5074  * @param[in] flags String containing the flags to be used (@c NULL for
5075 none).
5076  */
5077 EAPI Eina_Bool evas_object_image_save(const Eo *obj, const char *file, const char *key, const char *flags) EINA_ARG_NONNULL(2);
5078 
5079 /**
5080  *
5081  * Check if an image object can be animated (have multiple frames)
5082  *
5083  * @param[in] obj The object
5084  * @return whether obj support animation
5085  *
5086  * This returns if the image file of an image object is capable of animation
5087  * such as an animated gif file might. This is only useful to be called once
5088  * the image object file has been set.
5089  *
5090  * Example:
5091  * @code
5092  * extern Evas_Object *obj;
5093  *
5094  * if (evas_object_image_animated_get(obj))
5095  * {
5096  * int frame_count;
5097  * int loop_count;
5098  * Evas_Image_Animated_Loop_Hint loop_type;
5099  * double duration;
5100  *
5101  * frame_count = evas_object_image_animated_frame_count_get(obj);
5102  * printf("This image has %d frames\n",frame_count);
5103  *
5104  * duration = evas_object_image_animated_frame_duration_get(obj,1,0);
5105  * printf("Frame 1's duration is %f. You had better set object's frame to 2 after this duration using timer\n");
5106  *
5107  * loop_count = evas_object_image_animated_loop_count_get(obj);
5108  * printf("loop count is %d. You had better run loop %d times\n",loop_count,loop_count);
5109  *
5110  * loop_type = evas_object_image_animated_loop_type_get(obj);
5111  * if (loop_type == EVAS_IMAGE_ANIMATED_HINT_LOOP)
5112  * printf("You had better set frame like 1->2->3->1->2->3...\n");
5113  * else if (loop_type == EVAS_IMAGE_ANIMATED_HINT_PINGPONG)
5114  * printf("You had better set frame like 1->2->3->2->1->2...\n");
5115  * else
5116  * printf("Unknown loop type\n");
5117  *
5118  * evas_object_image_animated_frame_set(obj,1);
5119  * printf("You set image object's frame to 1. You can see frame 1\n");
5120  * }
5121  * @endcode
5122  *
5123  * @see evas_object_image_animated_get()
5124  * @see evas_object_image_animated_frame_count_get()
5125  * @see evas_object_image_animated_loop_type_get()
5126  * @see evas_object_image_animated_loop_count_get()
5127  * @see evas_object_image_animated_frame_duration_get()
5128  * @see evas_object_image_animated_frame_set()
5129  * @since 1.1
5130  *
5131  */
5132 EAPI Eina_Bool evas_object_image_animated_get(const Eo *obj);
5133 
5134 /**
5135  * @brief Set the frame to current frame of an image object.
5136  *
5137  * This set image object's current frame to frame_num with 1 being the first
5138  * frame.
5139  *
5140  * See also @ref evas_object_image_animated_get,
5141  * @ref evas_object_image_animated_frame_count_get,
5142  * @ref evas_object_image_animated_loop_type_get,
5143  * @ref evas_object_image_animated_loop_count_get,
5144  * @ref evas_object_image_animated_frame_duration_get.
5145  * @ref evas_object_image_animated_frame_get.
5146  *
5147  * @param[in] obj The object
5148  * @param[in] frame_index The index of current frame.
5149  *
5150  * @since 1.1
5151  */
5152 EAPI void evas_object_image_animated_frame_set(Evas_Object *obj, int frame_index);
5153 
5154 /**
5155  * @brief Get the frame to current frame of an image object.
5156  *
5157  * This returns image object's current frame.
5158  *
5159  * See also @ref evas_object_image_animated_get,
5160  * @ref evas_object_image_animated_frame_count_get,
5161  * @ref evas_object_image_animated_loop_type_get,
5162  * @ref evas_object_image_animated_loop_count_get,
5163  * @ref evas_object_image_animated_frame_duration_get.
5164  * @ref evas_object_image_animated_frame_set.
5165  *
5166  * @param[in] obj The object
5167  * @return The index of current frame.
5168  *
5169  * @since 1.24
5170  */
5171 EAPI int evas_object_image_animated_frame_get(Evas_Object *obj);
5172 
5173 /**
5174  * @brief Get the total number of frames of the image object.
5175  *
5176  * This returns total number of frames the image object supports (if animated).
5177  *
5178  * See also @ref evas_object_image_animated_get,
5179  * @ref evas_object_image_animated_loop_type_get,
5180  * @ref evas_object_image_animated_loop_count_get,
5181  * @ref evas_object_image_animated_frame_duration_get.
5182  *
5183  * @return The number of frames.
5184  *
5185  * @since 1.1
5186  */
5187 EAPI int evas_object_image_animated_frame_count_get(const Evas_Object *obj);
5188 
5189 /**
5190  * @brief Get the kind of looping the image object does.
5191  *
5192  * This returns the kind of looping the image object wants to do.
5193  *
5194  * If it returns EVAS_IMAGE_ANIMATED_HINT_LOOP, you should display frames in a
5195  * sequence like: 1->2->3->1->2->3->1...
5196  *
5197  * If it returns EVAS_IMAGE_ANIMATED_HINT_PINGPONG, it is better to display
5198  * frames in a sequence like: 1->2->3->2->1->2->3->1...
5199  *
5200  * The default type is EVAS_IMAGE_ANIMATED_HINT_LOOP.
5201  *
5202  * See also @ref evas_object_image_animated_get,
5203  * @ref evas_object_image_animated_frame_count_get,
5204  * @ref evas_object_image_animated_loop_count_get,
5205  * @ref evas_object_image_animated_frame_duration_get.
5206  *
5207  * @param[in] obj The object
5208  * @return Loop type of the image object.
5209  *
5210  * @since 1.1
5211  */
5212 EAPI Evas_Image_Animated_Loop_Hint evas_object_image_animated_loop_type_get(const Evas_Object *obj);
5213 
5214 /**
5215  * @brief Get the number times the animation of the object loops.
5216  *
5217  * This returns loop count of image. The loop count is the number of times the
5218  * animation will play fully from first to last frame until the animation
5219  * should stop (at the final frame).
5220  *
5221  * If 0 is returned, then looping should happen indefinitely (no limit to the
5222  * number of times it loops).
5223  *
5224  * See also @ref evas_object_image_animated_get,
5225  * @ref evas_object_image_animated_frame_count_get,
5226  * @ref evas_object_image_animated_loop_type_get,
5227  * @ref evas_object_image_animated_frame_duration_get.
5228  *
5229  * @param[in] obj The object
5230  * @return The number of loop of an animated image object.
5231  *
5232  * @since 1.1
5233  */
5234 EAPI int evas_object_image_animated_loop_count_get(const Evas_Object *obj);
5235 
5236 /**
5237  * @brief Get the duration of a sequence of frames.
5238  *
5239  * This returns total duration that the specified sequence of frames should
5240  * take in seconds.
5241  *
5242  * If you set start_frame to 1 and frame_num 0, you get frame 1's duration. If
5243  * you set start_frame to 1 and frame_num 1, you get frame 1's duration +
5244  * frame2's duration.
5245  *
5246  * See also @ref evas_object_image_animated_get,
5247  * @ref evas_object_image_animated_frame_count_get,
5248  * @ref evas_object_image_animated_loop_type_get,
5249  * @ref evas_object_image_animated_loop_count_get,
5250  *
5251  * @param[in] obj The object
5252  * @param[in] frame_num Number of frames in the sequence.
5253  *
5254  * @since 1.1
5255  */
5256 EAPI double evas_object_image_animated_frame_duration_get(const Evas_Object *obj, int start_frame, int frame_num);
5257 
5258 /**
5259  * @brief Set the DPI resolution of an image object's source image.
5260  *
5261  * This function sets the DPI resolution of a given loaded canvas image. Most
5262  * useful for the SVG image loader.
5263  *
5264  * @param[in] obj The object
5265  * @param[in] dpi The DPI resolution.
5266  */
5267 EAPI void evas_object_image_load_dpi_set(Evas_Object *obj, double dpi);
5268 
5269 /**
5270  * @brief Get the DPI resolution of a loaded image object in the canvas.
5271  *
5272  * This function returns the DPI resolution of the given canvas image.
5273  *
5274  * @param[in] obj The object
5275  * @return The DPI resolution.
5276  */
5277 EAPI double evas_object_image_load_dpi_get(const Evas_Object *obj);
5278 
5279 /**
5280  *
5281  * Set the load size of a given image object's source image.
5282  *
5283  * This function sets a new geometry size for the given canvas image.
5284  * The image will be loaded into memory as if it was the set size instead of
5285  * the original size.
5286  *
5287  * @note The size of a given image object's source image will be less than or
5288  * equal to the size of @p w and @p h.
5289  *
5290  * @see evas_object_image_load_size_get()
5291  *
5292  * @param[in] obj The object
5293  * @param[in] w The new width of the image's load size.
5294  * @param[in] h The new height of the image's load size.
5295  */
5296 EAPI void evas_object_image_load_size_set(Eo *obj, int w, int h);
5297 
5298 /**
5299  *
5300  * Get the load size of a given image object's source image.
5301  *
5302  * This function gets the geometry size set manually for the given canvas image.
5303  *
5304  * @note Use @c NULL pointers on the size components you're not
5305  * interested in: they'll be ignored by the function.
5306  * @note @p w and @p h will be set with the image's loading size only if
5307  * the image's load size is set manually: if evas_object_image_load_size_set()
5308  * has not been called, @p w and @p h will be set with 0.
5309  *
5310  * @see evas_object_image_load_size_set() for more details
5311  *
5312  * @param[in] obj The object
5313  * @param[out] w The new width of the image's load size.
5314  * @param[out] h The new height of the image's load size.
5315  */
5316 EAPI void evas_object_image_load_size_get(const Eo *obj, int *w, int *h);
5317 
5318 /**
5319  * @brief Inform a given image object to load a selective region of its source
5320  * image.
5321  *
5322  * This function is useful when one is not showing all of an image's area on
5323  * its image object.
5324  *
5325  * @note The image loader for the image format in question has to support
5326  * selective region loading in order to this function to take effect.
5327  *
5328  * @param[in] obj The object
5329  * @param[in] x X-offset of the region to be loaded.
5330  * @param[in] y Y-offset of the region to be loaded.
5331  * @param[in] w Width of the region to be loaded.
5332  * @param[in] h Height of the region to be loaded.
5333  */
5334 EAPI void evas_object_image_load_region_set(Evas_Object *obj, int x, int y, int w, int h);
5335 
5336 /**
5337  * @brief Retrieve the coordinates of a given image object's selective (source
5338  * image) load region.
5339  *
5340  * @note Use @c null pointers on the coordinates you're not interested in:
5341  * they'll be ignored by the function.
5342  *
5343  * @param[in] obj The object
5344  * @param[out] x X-offset of the region to be loaded.
5345  * @param[out] y Y-offset of the region to be loaded.
5346  * @param[out] w Width of the region to be loaded.
5347  * @param[out] h Height of the region to be loaded.
5348  */
5349 EAPI void evas_object_image_load_region_get(const Evas_Object *obj, int *x, int *y, int *w, int *h);
5350 
5351 /**
5352  * @brief Get the support state of a given image.
5353  *
5354  * @param[in] obj The object
5355  * @return The region support state.
5356  *
5357  * @since 1.2
5358  *
5359  * @ingroup Evas_Image
5360  */
5361 EAPI Eina_Bool evas_object_image_region_support_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
5362 
5363 /**
5364  * @brief Define if the orientation information in the image file should be
5365  * honored.
5366  *
5367  * @param[in] obj The object
5368  * @param[in] enable @c true means that it should honor the orientation
5369  * information.
5370  *
5371  * @since 1.1
5372  */
5373 EAPI void evas_object_image_load_orientation_set(Evas_Object *obj, Eina_Bool enable);
5374 
5375 /**
5376  * @brief Get if the orientation information in the image file should be
5377  * honored.
5378  *
5379  * @param[in] obj The object
5380  * @return @c true means that it should honor the orientation information.
5381  *
5382  * @since 1.1
5383  */
5384 EAPI Eina_Bool evas_object_image_load_orientation_get(const Evas_Object *obj);
5385 
5386 /**
5387  * @brief Set the scale down factor of a given image object's source image,
5388  * when loading it.
5389  *
5390  * This function sets the scale down factor of a given canvas image. Most
5391  * useful for the SVG image loader.
5392  *
5393  * @param[in] obj The object
5394  * @param[in] scale_down The scale down factor.
5395  */
5396 EAPI void evas_object_image_load_scale_down_set(Evas_Object *obj, int scale_down);
5397 
5398 /**
5399  * @brief Get the scale down factor of a given image object's source image,
5400  * when loading it.
5401  *
5402  * @param[in] obj The object
5403  * @return The scale down factor.
5404  */
5405 EAPI int evas_object_image_load_scale_down_get(const Evas_Object *obj);
5406 
5407 /**
5408  * @brief Set a load option to skip initial header load and defer to preload
5409  *
5410  * This is meant to be used in conjunction with evas_object_image_file_set()
5411  * and evas_object_image_preload() by deferring any header loading until
5412  * a evas_object_image_preload() is issued making the file file set simply
5413  * set up the file to refer to without any validation of its type or
5414  * file existence or even inspecting the image header to get size or alpha
5415  * channel flags etc. All of this will then be done as part of the preload
5416  * stage.
5417  * @param[in] obj The object
5418  *
5419  * @since 1.19
5420  */
5421 EAPI void evas_object_image_load_head_skip_set(Evas_Object *obj, Eina_Bool skip);
5422 
5423 /**
5424  * @brief Get the load option to skip header loads before preload
5425  *
5426  * This gets the head skip value set by evas_object_image_load_head_skip_set()
5427  * @param[in] obj The object
5428  *
5429  * @see evas_object_image_load_head_skip_set
5430  * @since 1.19
5431  */
5432 EAPI Eina_Bool evas_object_image_load_head_skip_get(const Evas_Object *obj);
5433 
5434 /**
5435  * @brief Retrieves a number representing any error that occurred during the
5436  * last loading of the given image object's source image.
5437  *
5438  * @param[in] obj The object
5439  * @return A value giving the last error that occurred. It should be one of the
5440  * @ref Evas_Load_Error values. #EVAS_LOAD_ERROR_NONE is returned if there was
5441  * no error.
5442  */
5443 EAPI Evas_Load_Error evas_object_image_load_error_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
5444 
5445 /**
5446  *
5447  * Sets whether to use high-quality image scaling algorithm on the
5448  * given image object.
5449  *
5450  * When enabled, a higher quality image scaling algorithm is used when
5451  * scaling images to sizes other than the source image's original
5452  * one. This gives better results but is more computationally
5453  * expensive.
5454  *
5455  * @note Image objects get created originally with smooth scaling @b
5456  * on.
5457  *
5458  * @see evas_object_image_smooth_scale_get()
5459  *
5460  * @param[in] obj The object
5461  * @param[in] smooth_scale Whether to use smooth scale or not.
5462  */
5463 EAPI void evas_object_image_smooth_scale_set(Eo *obj, Eina_Bool smooth_scale);
5464 
5465 /**
5466  *
5467  * Retrieves whether the given image object is using high-quality
5468  * image scaling algorithm.
5469  *
5470  * @return Whether smooth scale is being used.
5471  *
5472  * See @ref evas_object_image_smooth_scale_set() for more details.
5473  *
5474  */
5475 EAPI Eina_Bool evas_object_image_smooth_scale_get(const Eo *obj);
5476 
5477 /* not implemented! removed from the interface, kept as legacy only */
5478 typedef enum _Efl_Gfx_Fill_Spread {
5479    /** Fill spread mode. Warning: support is not implemented!
5480     * @since 1.14 */
5481    EFL_GFX_FILL_REFLECT = 0,          /**< Tiling reflects and repeats */
5482    EFL_GFX_FILL_REPEAT = 1,           /**< Tiling repeats like a mosaic */
5483    EFL_GFX_FILL_RESTRICT = 2,         /**< Tiling clamps, range offset ignored */
5484    EFL_GFX_FILL_RESTRICT_REFLECT = 3, /**< Tiling clamps and any range offset reflects */
5485    EFL_GFX_FILL_RESTRICT_REPEAT = 4,  /**< Tiling clamps and any range offset repeats */
5486    EFL_GFX_FILL_PAD = 5,              /**< Tiling extends with end values */
5487 } Efl_Gfx_Fill_Spread;
5488 
5489 typedef Efl_Gfx_Fill_Spread Evas_Fill_Spread;
5490 #define EVAS_TEXTURE_REFLECT EFL_GFX_FILL_REFLECT
5491 #define EVAS_TEXTURE_REPEAT EFL_GFX_FILL_REPEAT
5492 #define EVAS_TEXTURE_RESTRICT EFL_GFX_FILL_RESTRICT
5493 #define EVAS_TEXTURE_RESTRICT_REFLECT EFL_GFX_FILL_RESTRICT_REFLECT
5494 #define EVAS_TEXTURE_RESTRICT_REPEAT EFL_GFX_FILL_RESTRICT_REPEAT
5495 #define EVAS_TEXTURE_PAD EFL_GFX_FILL_PAD
5496 
5497 /**
5498  *
5499  * Sets the tiling mode for the given evas image object's fill.
5500  * EVAS_TEXTURE_RESTRICT, or EVAS_TEXTURE_PAD.
5501  *
5502  * @param[in] obj The object
5503  * @param[in] spread One of EVAS_TEXTURE_REFLECT, EVAS_TEXTURE_REPEAT,
5504  */
5505 EAPI void evas_object_image_fill_spread_set(Evas_Object *obj, Evas_Fill_Spread spread) EINA_DEPRECATED;
5506 
5507 /**
5508  *
5509  * Retrieves the spread (tiling mode) for the given image object's
5510  * fill.
5511  *
5512  * @param[in] obj The object
5513  * @return  The current spread mode of the image object.
5514  *
5515  */
5516 EAPI Evas_Fill_Spread evas_object_image_fill_spread_get(const Evas_Object *obj) EINA_DEPRECATED;
5517 
5518 /**
5519  *
5520  * Set how to fill an image object's drawing rectangle given the
5521  * (real) image bound to it.
5522  *
5523  * Note that if @p w or @p h are smaller than the dimensions of
5524  * @p obj, the displayed image will be @b tiled around the object's
5525  * area. To have only one copy of the bound image drawn, @p x and @p y
5526  * must be 0 and @p w and @p h need to be the exact width and height
5527  * of the image object itself, respectively.
5528  *
5529  * See the following image to better understand the effects of this
5530  * call. On this diagram, both image object and original image source
5531  * have @c a x @c a dimensions and the image itself is a circle, with
5532  * empty space around it:
5533  *
5534  * @image html image-fill.png
5535  * @image rtf image-fill.png
5536  * @image latex image-fill.eps
5537  *
5538  * @warning The default values for the fill parameters are @p x = 0,
5539  * @p y = 0, @p w = 0 and @p h = 0. Thus, if you're not using the
5540  * evas_object_image_filled_add() helper and want your image
5541  * displayed, you'll have to set valid values with this function on
5542  * your object.
5543  *
5544  * @note evas_object_image_filled_set() is a helper function which
5545  * will @b override the values set here automatically, for you, in a
5546  * given way.
5547  *
5548  * @param[in] obj The object
5549  * @param[in] x The x coordinate (from the top left corner of the bound
5550 image) to start drawing from.
5551  * @param[in] y The y coordinate (from the top left corner of the bound
5552 image) to start drawing from.
5553  * @param[in] w The width the bound image will be displayed at.
5554  * @param[in] h The height the bound image will be displayed at.
5555  */
5556 EAPI void evas_object_image_fill_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
5557 
5558 /**
5559  *
5560  * Retrieve how an image object is to fill its drawing rectangle,
5561  * given the (real) image bound to it.
5562  *
5563  * @note Use @c NULL pointers on the fill components you're not
5564  * interested in: they'll be ignored by the function.
5565  *
5566  * See @ref evas_object_image_fill_set() for more details.
5567  *
5568  * @param[in] obj The object
5569  * @param[out] x The x coordinate (from the top left corner of the bound
5570 image) to start drawing from.
5571  * @param[out] y The y coordinate (from the top left corner of the bound
5572 image) to start drawing from.
5573  * @param[out] w The width the bound image will be displayed at.
5574  * @param[out] h The height the bound image will be displayed at.
5575  */
5576 EAPI void evas_object_image_fill_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
5577 
5578 /**
5579  * @brief Set whether the image object's fill property should track the
5580  * object's size.
5581  *
5582  * If @c setting is @c true, then every @ref evas_object_resize will
5583  * automatically trigger a call to @ref evas_object_image_fill_set with the
5584  * that new size (and 0, 0 as source image's origin), so the bound image will
5585  * fill the whole object's area.
5586  *
5587  * @param[in] obj The object
5588  * @param[in] filled @c true to make the fill property follow object size or
5589  * @c false otherwise.
5590  */
5591 EAPI void evas_object_image_filled_set(Evas_Object *obj, Eina_Bool filled);
5592 
5593 /**
5594  * @brief Retrieve whether the image object's fill property should track the
5595  * object's size.
5596  *
5597  * Returns @c true if it is tracking, @c false if not (and @ref
5598  * evas_object_image_fill_set must be called manually).
5599  *
5600  * @param[in] obj The object
5601  * @return @c true to make the fill property follow object size or @c false
5602  * otherwise.
5603  */
5604 EAPI Eina_Bool evas_object_image_filled_get(const Evas_Object *obj);
5605 
5606 /**
5607  * @brief Retrieve whether alpha channel data is being used on the given image
5608  * object.
5609  *
5610  * This function returns @c true if the image object's alpha channel is being
5611  * used, or @c false otherwise.
5612  *
5613  * @param[in] obj The object
5614  * @return Whether to use alpha channel ($true) data or not ($false).
5615  *
5616  * @ingroup Evas_Image
5617  */
5618 EAPI Eina_Bool evas_object_image_alpha_get(const Evas_Object *obj);
5619 
5620 /**
5621  * @brief Enable or disable alpha channel usage on the given image object.
5622  *
5623  * This function sets a flag on an image object indicating whether or not to
5624  * use alpha channel data. A value of @c true makes it use alpha channel data,
5625  * and @c false makes it ignore that data. Note that this has nothing to do
5626  * with an object's color as  manipulated by @ref evas_object_color_set.
5627  *
5628  * @param[in] obj The object
5629  * @param[in] alpha Whether to use alpha channel ($true) data or not ($false).
5630  */
5631 EAPI void evas_object_image_alpha_set(Evas_Object *obj, Eina_Bool alpha);
5632 
5633 /**
5634  * @brief Dimensions of this image's border, a region that does not scale with
5635  * the center area.
5636  *
5637  * When EFL renders an image, its source may be scaled to fit the size of the
5638  * object. This function sets an area from the borders of the image inwards
5639  * which is not to be scaled. This function is useful for making frames and for
5640  * widget theming, where, for example, buttons may be of varying sizes, but
5641  * their border size must remain constant.
5642  *
5643  * The units used for @c l, @c r, @c t and @c b are canvas units (pixels).
5644  *
5645  * @note The border region itself may be scaled by the
5646  * @ref evas_object_image_border_scale_set function.
5647  *
5648  * @note By default, image objects have no borders set, i.e. @c l, @c r, @c t
5649  * and @c b start as 0.
5650  *
5651  * @note Similar to the concepts of 9-patch images or cap insets.
5652  *
5653  * @param[in] obj The object
5654  * @param[in] l The border's left width.
5655  * @param[in] r The border's right width.
5656  * @param[in] t The border's top height.
5657  * @param[in] b The border's bottom height.
5658  */
5659 EAPI void evas_object_image_border_set(Evas_Object *obj, int l, int r, int t, int b);
5660 
5661 /**
5662  * @brief Dimensions of this image's border, a region that does not scale with
5663  * the center area.
5664  *
5665  * When EFL renders an image, its source may be scaled to fit the size of the
5666  * object. This function sets an area from the borders of the image inwards
5667  * which is not to be scaled. This function is useful for making frames and for
5668  * widget theming, where, for example, buttons may be of varying sizes, but
5669  * their border size must remain constant.
5670  *
5671  * The units used for @c l, @c r, @c t and @c b are canvas units (pixels).
5672  *
5673  * @note The border region itself may be scaled by the
5674  * @ref evas_object_image_border_scale_set function.
5675  *
5676  * @note By default, image objects have no borders set, i.e. @c l, @c r, @c t
5677  * and @c b start as 0.
5678  *
5679  * @note Similar to the concepts of 9-patch images or cap insets.
5680  *
5681  * @param[in] obj The object
5682  * @param[out] l The border's left width.
5683  * @param[out] r The border's right width.
5684  * @param[out] t The border's top height.
5685  * @param[out] b The border's bottom height.
5686  */
5687 EAPI void evas_object_image_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b);
5688 
5689 /**
5690  * @brief Scaling factor applied to the image borders.
5691  *
5692  * This value multiplies the size of the @ref evas_object_image_border_get when
5693  * scaling an object.
5694  *
5695  * Default value is 1.0 (no scaling).
5696  *
5697  * @param[in] obj The object
5698  * @param[in] scale The scale factor.
5699  */
5700 EAPI void evas_object_image_border_scale_set(Evas_Object *obj, double scale);
5701 
5702 /**
5703  * @brief Scaling factor applied to the image borders.
5704  *
5705  * This value multiplies the size of the @ref evas_object_image_border_get when
5706  * scaling an object.
5707  *
5708  * Default value is 1.0 (no scaling).
5709  *
5710  * @param[in] obj The object
5711  * @return The scale factor.
5712  */
5713 EAPI double evas_object_image_border_scale_get(const Evas_Object *obj);
5714 
5715 /**
5716  * How an image's center region (the complement to the border region) should
5717  * be rendered by Evas
5718  */
5719 typedef enum
5720 {
5721   EVAS_BORDER_FILL_NONE = 0, /**< Image's center region is @b not to be rendered */
5722   EVAS_BORDER_FILL_DEFAULT = 1, /**< Image's center region is to be @b blended
5723                                  * with objects underneath it, if it has
5724                                  * transparency. This is the default behavior
5725                                  * for image objects */
5726   EVAS_BORDER_FILL_SOLID = 2 /**< Image's center region is to be made solid,
5727                               * even if it has transparency on it */
5728 } Evas_Border_Fill_Mode;
5729 
5730 /**
5731  * @brief Specifies how the center part of the object (not the borders) should
5732  * be drawn when EFL is rendering it.
5733  *
5734  * This function sets how the center part of the image object's source image is
5735  * to be drawn, which must be one of the values in @ref Evas_Border_Fill_Mode.
5736  * By center we mean the complementary part of that defined by
5737  * @ref evas_object_image_border_set. This one is very useful for making frames
5738  * and decorations.
5739  *
5740  * @param[in] obj The object
5741  * @param[in] fill Fill mode of the center region of @c obj (a value in
5742  *  #Evas_Border_Fill_Mode).
5743  */
5744 EAPI void evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border_Fill_Mode fill);
5745 
5746 /**
5747  * @brief Specifies how the center part of the object (not the borders) should
5748  * be drawn when EFL is rendering it.
5749  *
5750  * This function sets how the center part of the image object's source image is
5751  * to be drawn, which must be one of the values in @ref Evas_Border_Fill_Mode.
5752  * By center we mean the complementary part of that defined by
5753  * @ref evas_object_image_border_set. This one is very useful for making frames
5754  * and decorations.
5755  *
5756  * The default value is
5757  *
5758  * @param[in] obj The object
5759  * @return Fill mode of the center region of @c obj (a value in
5760  *  #Evas_Border_Fill_Mode).
5761  */
5762 EAPI Evas_Border_Fill_Mode evas_object_image_border_center_fill_get(const Evas_Object *obj);
5763 
5764 /**
5765  * @brief Set the image orientation.
5766  *
5767  * This function allows to rotate or flip the image.
5768  *
5769  * @param[in] obj The object
5770  * @param[in] orient The image orientation @ref Evas_Image_Orient. Default is
5771  * #EVAS_IMAGE_ORIENT_NONE.
5772  *
5773  * @since 1.14
5774  *
5775  * @ingroup Evas_Image
5776  */
5777 EAPI void evas_object_image_orient_set(Evas_Object *obj, Evas_Image_Orient orient);
5778 
5779 /**
5780  * @brief Get the image orientation.
5781  *
5782  * @param[in] obj The object
5783  * @return The image orientation @ref Evas_Image_Orient. Default is
5784  * #EVAS_IMAGE_ORIENT_NONE.
5785  *
5786  * @since 1.14
5787  *
5788  * @ingroup Evas_Image
5789  */
5790 EAPI Evas_Image_Orient evas_object_image_orient_get(const Evas_Object *obj);
5791 
5792 /**
5793  * @brief Set the content hint setting of a given image object of the canvas.
5794  *
5795  * This function sets the content hint value of the given image of the canvas.
5796  * For example, if you're on the GL engine and your driver implementation
5797  * supports it, setting this hint to #EVAS_IMAGE_CONTENT_HINT_DYNAMIC will make
5798  * it need zero copies at texture upload time, which is an "expensive"
5799  * operation.
5800  *
5801  * @param[in] obj The object
5802  * @param[in] hint The content hint value, one of the
5803  * @ref Evas_Image_Content_Hint ones.
5804  */
5805 EAPI void evas_object_image_content_hint_set(Evas_Object *obj, Evas_Image_Content_Hint hint);
5806 
5807 /**
5808  * @brief Get the content hint setting of a given image object of the canvas.
5809  *
5810  * This returns #EVAS_IMAGE_CONTENT_HINT_NONE on error.
5811  *
5812  * @param[in] obj The object
5813  * @return The content hint value, one of the @ref Evas_Image_Content_Hint
5814  * ones.
5815  */
5816 EAPI Evas_Image_Content_Hint evas_object_image_content_hint_get(const Evas_Object *obj);
5817 
5818 /**
5819  * @brief Set the scale hint of a given image of the canvas.
5820  *
5821  * This function sets the scale hint value of the given image object in the
5822  * canvas, which will affect how Evas is to cache scaled versions of its
5823  * original source image.
5824  *
5825  * @param[in] obj The object
5826  * @param[in] hint The scale hint, a value in @ref Evas_Image_Scale_Hint.
5827  *
5828  * @ingroup Evas_Image
5829  */
5830 EAPI void evas_object_image_scale_hint_set(Evas_Object *obj, Evas_Image_Scale_Hint hint);
5831 
5832 /**
5833  * @brief Get the scale hint of a given image of the canvas.
5834  *
5835  * This function returns the scale hint value of the given image object of the
5836  * canvas.
5837  *
5838  * @param[in] obj The object
5839  * @return The scale hint, a value in @ref Evas_Image_Scale_Hint.
5840  *
5841  * @ingroup Evas_Image
5842  */
5843 EAPI Evas_Image_Scale_Hint evas_object_image_scale_hint_get(const Evas_Object *obj);
5844 
5845 /**
5846  *
5847  * Sets the size of the given image object.
5848  *
5849  * This function will scale down or crop the image so that it is
5850  * treated as if it were at the given size. If the size given is
5851  * smaller than the image, it will be cropped. If the size given is
5852  * larger, then the image will be treated as if it were in the upper
5853  * left hand corner of a larger image that is otherwise transparent.
5854  *
5855  * @param[in] obj The object
5856  * @param[in] w The new width of the image.
5857  * @param[in] h The new height of the image.
5858  */
5859 EAPI void evas_object_image_size_set(Evas_Object *obj, int w, int h);
5860 
5861 /**
5862  *
5863  * Retrieves the size of the given image object.
5864  *
5865  * See @ref evas_object_image_size_set() for more details.
5866  *
5867  * @param[in] obj The object
5868  * @param[out] w The new width of the image.
5869  * @param[out] h The new height of the image.
5870  */
5871 EAPI void evas_object_image_size_get(const Evas_Object *obj, int *w, int *h);
5872 
5873 /**
5874  * @brief Set the colorspace of a given image of the canvas.
5875  *
5876  * This function sets the colorspace of given canvas image.
5877  *
5878  * @param[in] obj The object
5879  * @param[in] cspace The new color space.
5880  *
5881  * @ingroup Evas_Image
5882  */
5883 EAPI void evas_object_image_colorspace_set(Evas_Object *obj, Evas_Colorspace cspace);
5884 
5885 /**
5886  * @brief Get the colorspace of a given image of the canvas.
5887  *
5888  * This function returns the colorspace of given canvas image.
5889  *
5890  * @param[in] obj The object
5891  * @return The new color space.
5892  *
5893  * @ingroup Evas_Image
5894  */
5895 EAPI Evas_Colorspace evas_object_image_colorspace_get(const Evas_Object *obj);
5896 
5897 /**
5898  * @brief Retrieves the row stride of the given image object.
5899  *
5900  * The row stride is the number of bytes between the start of a row and the
5901  * start of the next row for image data.
5902  *
5903  * @param[in] obj The object
5904  * @return The stride of the image (in bytes).
5905  *
5906  * @ingroup Evas_Image
5907  */
5908 EAPI int evas_object_image_stride_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
5909 
5910 /**
5911  * @brief Replaces the raw image data of the given image object.
5912  *
5913  * This function lets the application replace an image object's internal pixel
5914  * buffer with a user-allocated one. For best results, you should generally
5915  * first call @ref evas_object_image_size_set with the width and height for the
5916  * new buffer.
5917  *
5918  * This call is best suited for when you will be using image data with
5919  * different dimensions than the existing image data, if any. If you only need
5920  * to modify the existing image in some fashion, then using
5921  * @ref evas_object_image_data_get is probably what you are after.
5922  *
5923  * Note that the caller is responsible for freeing the buffer when finished
5924  * with it, as user-set image data will not be automatically freed when the
5925  * image object is deleted.
5926  *
5927  * @param[in] obj The object
5928  * @param[in] data The raw data to replace.
5929  *
5930  * @ingroup Evas_Image
5931  */
5932 EAPI void evas_object_image_data_copy_set(Evas_Object *obj, void *data);
5933 
5934 /**
5935  * @brief Sets the raw image data of the given image object.
5936  *
5937  * Note that the raw data must be of the same size (see @ref
5938  * evas_object_image_size_set, which has to be called before this one) and
5939  * colorspace (see @ref evas_object_image_colorspace_set) of the image. If data is
5940  * @c null, the current image data will be freed. Naturally, if one does not
5941  * set an image object's data manually, it will still have one, allocated by
5942  * Evas.
5943  *
5944  * @param[in] obj The object
5945  * @param[in] data The raw data, or @c null.
5946  *
5947  * @ingroup Evas_Image
5948  */
5949 EAPI void evas_object_image_data_set(Evas_Object *obj, void *data);
5950 
5951 /**
5952  * @brief Get a pointer to the raw image data of the given image object.
5953  *
5954  * This function returns a pointer to an image object's internal pixel buffer,
5955  * for reading only or read/write. If you request it for writing, the image
5956  * will be marked dirty so that it gets redrawn at the next update.
5957  *
5958  * Each time you call this function on an image object, its data buffer will
5959  * have an internal reference counter incremented. Decrement it back by using
5960  * @ref evas_object_image_data_set.
5961  *
5962  * This is best suited for when you want to modify an existing image, without
5963  * changing its dimensions.
5964  *
5965  * @note The contents' format returned by it depend on the color space of the
5966  * given image object.
5967  *
5968  * @note You may want to use @ref evas_object_image_data_update_add to inform data
5969  * changes, if you did any.
5970  *
5971  * @param[in] obj The object
5972  * @param[in] for_writing Whether the data being retrieved will be modified
5973  * ($true) or not ($false).
5974  *
5975  * @return The raw image data.
5976  *
5977  * @ingroup Evas_Image
5978  */
5979 EAPI void *evas_object_image_data_get(const Evas_Object *obj, Eina_Bool for_writing) EINA_WARN_UNUSED_RESULT;
5980 
5981 /**
5982  * @brief Mark a sub-region of the given image object to be redrawn.
5983  *
5984  * This function schedules a particular rectangular region of an image object
5985  * to be updated (redrawn) at the next rendering cycle.
5986  *
5987  * @param[in] obj The object
5988  * @param[in] y Y-offset of the region to be updated.
5989  * @param[in] w Width of the region to be updated.
5990  * @param[in] h Height of the region to be updated.
5991  */
5992 EAPI void evas_object_image_data_update_add(Evas_Object *obj, int x, int y, int w, int h);
5993 
5994 /**
5995  * @brief The content below the Evas_Object_Image will be rendered inside it
5996  * and you can reuse it as a source for any kind of effect.
5997  *
5998  * @param[in] obj The object
5999  * @param[in] s Whether to put the content of the canvas below inside the
6000  * Evas_Object_Image.
6001  *
6002  * @since 1.15
6003  */
6004 EAPI void evas_object_image_snapshot_set(Evas_Object *obj, Eina_Bool s);
6005 
6006 /**
6007  * @brief Determine whether the Evas_Object_Image replicate the content of the
6008  * canvas below.
6009  *
6010  * @param[in] obj The object
6011  * @return Wether to put the content of the canvas below inside the
6012  * Evas_Object_Image.
6013  *
6014  * @since 1.15
6015  */
6016 EAPI Eina_Bool evas_object_image_snapshot_get(const Evas_Object *obj);
6017 
6018 /**
6019  * @brief Set the source object on an image object to used as a proxy.
6020  *
6021  * If an image object is set to behave as a proxy, it will mirror the rendering
6022  * contents of a given source object in its drawing region, without affecting
6023  * that source in any way. The source must be another valid Evas object. Other
6024  * effects may be applied to the proxy, such as a map (see @ref
6025  * evas_object_map_set) to create a reflection of the original object (for
6026  * example).
6027  *
6028  * Any existing source object on @c obj will be removed after this call.
6029  * Setting @c src to @c null clears the proxy object (not in "proxy state"
6030  * anymore).
6031  *
6032  * @warning You cannot set a proxy as another proxy's source.
6033  *
6034  * @param[in] obj The object
6035  * @param[in] src Source object to use for the proxy.
6036  */
6037 EAPI Eina_Bool evas_object_image_source_set(Evas_Object *obj, Evas_Object *src);
6038 
6039 /**
6040  * @brief Get the current source object of an image object.
6041  *
6042  * @param[in] obj The object
6043  * @return Source object to use for the proxy.
6044  */
6045 EAPI Evas_Object *evas_object_image_source_get(const Evas_Object *obj);
6046 
6047 /**
6048  * @brief Clip the proxy object with the source object's clipper.
6049  *
6050  * @param[in] obj The object
6051  * @param[in] source_clip Whether @c obj is clipped by the source clipper
6052  * ($true) or not ($false).
6053  *
6054  * @since 1.8
6055  */
6056 EAPI void evas_object_image_source_clip_set(Evas_Object *obj, Eina_Bool source_clip);
6057 
6058 /**
6059  * @brief Determine whether an object is clipped by source object's clipper.
6060  *
6061  * @param[in] obj The object
6062  * @return Whether @c obj is clipped by the source clipper ($true) or not
6063  * ($false).
6064  *
6065  * @since 1.8
6066  */
6067 EAPI Eina_Bool evas_object_image_source_clip_get(const Evas_Object *obj);
6068 
6069 /**
6070  * @brief Set whether an Evas object is to source events.
6071  *
6072  * Set whether an Evas object is to repeat events to source.
6073  *
6074  * If @c repeat is @c true, it will make events on @c obj to also be repeated
6075  * for the source object (see @ref evas_object_image_source_set). Even the
6076  * @c obj and source geometries are different, the event position will be
6077  * transformed to the source object's space.
6078  *
6079  * If @c repeat is @c false, events occurring on @c obj will be processed only
6080  * on it.
6081  *
6082  * @param[in] obj The object
6083  * @param[in] repeat Whether @c obj is to pass events ($true) or not ($false).
6084  *
6085  * @since 1.8
6086  */
6087 EAPI void evas_object_image_source_events_set(Evas_Object *obj, Eina_Bool repeat);
6088 
6089 /**
6090  * @brief Determine whether an object is set to source events.
6091  *
6092  * @param[in] obj The object
6093  * @return Whether @c obj is to pass events ($true) or not ($false).
6094  *
6095  * @since 1.8
6096  */
6097 EAPI Eina_Bool evas_object_image_source_events_get(const Evas_Object *obj);
6098 
6099 /**
6100  * @brief Set the source object to be visible or not.
6101  *
6102  * If @c visible is set to @c false, the source object of the proxy ($obj) will
6103  * be invisible.
6104  *
6105  * This API works differently to @ref evas_object_show and @ref
6106  * evas_object_hide. Once source object is hidden, the proxy object will be
6107  * hidden as well. Actually in this case both objects are excluded from the
6108  * Evas internal update circle.
6109  *
6110  * By this API, instead, one can toggle the visibility of a proxy's source
6111  *  object remaining the proxy visibility untouched.
6112  *
6113  * @warning If the all of proxies are deleted, then the source visibility of
6114  * the source object will be cancelled.
6115  *
6116  * @param[in] obj The object
6117  * @param[in] visible @c true is source object to be shown, @c false otherwise.
6118  *
6119  * @deprecated Please use evas_object_norender_get() on the source instead.
6120  *
6121  * @since 1.8
6122  */
6123 EAPI void evas_object_image_source_visible_set(Evas_Object *obj, Eina_Bool visible);
6124 
6125 /**
6126  * @brief Get the state of the source object visibility.
6127  *
6128  * @param[in] obj The object
6129  * @return @c true is source object to be shown, @c false otherwise.
6130  *
6131  * @deprecated Please use evas_object_norender_get() on the source instead.
6132  *
6133  * @since 1.8
6134  */
6135 EAPI Eina_Bool evas_object_image_source_visible_get(const Evas_Object *obj);
6136 
6137 /**
6138  * @brief Mark whether the given image object is dirty and needs to request its
6139  * pixels.
6140  *
6141  * This function will only properly work if a pixels get callback has been set.
6142  *
6143  * @warning Use this function if you really know what you are doing.
6144  *
6145  * @param[in] obj The object
6146  * @param[in] dirty Whether the image is dirty.
6147  */
6148 EAPI void evas_object_image_pixels_dirty_set(Evas_Object *obj, Eina_Bool dirty);
6149 
6150 /**
6151  * @brief Retrieves whether the given image object is dirty (needs to be
6152  * redrawn).
6153  *
6154  * @param[in] obj The object
6155  * @return Whether the image is dirty.
6156  */
6157 EAPI Eina_Bool evas_object_image_pixels_dirty_get(const Evas_Object *obj);
6158 
6159 /**
6160  * @brief Set the callback function to get pixels from a canvas' image.
6161  *
6162  * This functions sets a function to be the callback function that get pixels
6163  * from a image of the canvas.
6164  *
6165  * @param[in] obj The object
6166  * @param[in] func The callback function.
6167  * @param[in] data The data pointer to be passed to @c func.
6168  */
6169 EAPI void evas_object_image_pixels_get_callback_set(Evas_Object *obj, Evas_Object_Image_Pixels_Get_Cb func, void *data) EINA_ARG_NONNULL(2);
6170 
6171 
6172 /**
6173  * @typedef Evas_Video_Surface
6174  *
6175  * A generic datatype for video specific surface information
6176  * @see evas_object_image_video_surface_set
6177  * @see evas_object_image_video_surface_get
6178  * @since 1.1
6179  */
6180 typedef struct _Evas_Video_Surface Evas_Video_Surface;
6181 
6182 /**
6183  * @def EVAS_VIDEO_SURFACE_VERSION
6184  * Magic version number to know what the video surf struct looks like
6185  * @since 1.1
6186  */
6187 #define EVAS_VIDEO_SURFACE_VERSION 1
6188 
6189 typedef void (*Evas_Video_Cb)(void *data, Evas_Object *obj, const Evas_Video_Surface *surface);  /**< Evas video callback function signature */
6190 typedef void (*Evas_Video_Coord_Cb)(void *data, Evas_Object *obj, const Evas_Video_Surface *surface, Evas_Coord a, Evas_Coord b);  /**< Evas video coordinates callback function signature */
6191 
6192 struct _Evas_Video_Surface
6193 {
6194    int                 version; /**< The Evas Video surface version in use @see EVAS_VIDEO_SURFACE_VERSION*/
6195 
6196    Evas_Video_Coord_Cb move; /**< Move the video surface to this position */
6197    Evas_Video_Coord_Cb resize; /**< Resize the video surface to that size */
6198    Evas_Video_Cb       show; /**< Show the video overlay surface */
6199    Evas_Video_Cb       hide; /**< Hide the video overlay surface */
6200    Evas_Video_Cb       update_pixels; /**< Please update the Evas_Object_Image pixels when called */
6201 
6202    Evas_Object        *parent; /**< The parent object */
6203    void               *data;
6204 };
6205 
6206 /**
6207  * Enum values for the Video surface capabilities
6208  * @see evas_object_image_video_surface_caps_get()
6209  * @see evas_object_image_video_surface_caps_set()
6210  */
6211 
6212 typedef enum _Evas_Video_Surface_Caps
6213 {
6214    EVAS_VIDEO_SURFACE_MOVE = 1,   /**< Move capability */
6215    EVAS_VIDEO_SURFACE_RESIZE = 2,   /**< Resize capability */
6216    EVAS_VIDEO_SURFACE_CLIP = 4,   /**< Clip capability */
6217    EVAS_VIDEO_SURFACE_BELOW = 8,   /**< Below capability */
6218    EVAS_VIDEO_SURFACE_STACKING_CHECK = 16,   /**< Stacking capability */
6219    EVAS_VIDEO_SURFACE_IGNORE_WINDOW = 32,   /**< Ignore window capability */
6220 } Evas_Video_Surface_Caps;
6221 
6222 /**
6223  * @brief Set the video surface linked to a given image of the canvas.
6224  *
6225  * @param[in] obj The object
6226  * @param[in] surf The new video surface.
6227  *
6228  * @since 1.1
6229  */
6230 EAPI void evas_object_image_video_surface_set(Evas_Object *obj, Evas_Video_Surface *surf);
6231 
6232 /**
6233  * @brief Get the video surface linked to a given image of the canvas.
6234  *
6235  * @param[in] obj The object
6236  * @return The new video surface.
6237  *
6238  * @since 1.1
6239  */
6240 EAPI const Evas_Video_Surface *evas_object_image_video_surface_get(const Evas_Object *obj);
6241 
6242 /**
6243  * @brief Set the video surface capabilities to a given image of the canvas.
6244  *
6245  * @param[in] obj The object
6246  * @param[in] caps Surface capabilities
6247  */
6248 EAPI void evas_object_image_video_surface_caps_set(Evas_Object *obj, unsigned int caps);
6249 
6250 /** Get the video surface capabilities to a given image of the canvas.
6251  * @param[in] obj The object
6252  * @return Surface capabilities
6253  */
6254 EAPI unsigned int evas_object_image_video_surface_caps_get(const Evas_Object *obj);
6255 
6256 
6257 /*
6258  * Converts the raw image data of the given image object to the
6259  * specified colorspace.
6260  *
6261  * Note that this function does not modify the raw image data.  If the
6262  * requested colorspace is the same as the image colorspace nothing is
6263  * done and @c NULL is returned. You should use
6264  * evas_object_image_colorspace_get() to check the current image
6265  * colorspace.
6266  *
6267  * See @ref evas_object_image_colorspace_get.
6268  *
6269  * @return data A newly allocated data in the format specified by to_cspace.
6270  *
6271  * @param[in] obj The object
6272  * @param[in] to_cspace The colorspace to which the image raw data will be converted.
6273  */
6274 /** @deprecated evas_object_image_data_convert */
6275 EAPI void *evas_object_image_data_convert(Evas_Object *obj, Evas_Colorspace to_cspace) EINA_WARN_UNUSED_RESULT EINA_DEPRECATED;
6276 
6277 /*
6278  * Import pixels from given source to a given canvas image object.
6279  *
6280  * This function imports pixels from a given source to a given canvas image.
6281  *
6282  * @param[in] obj The object
6283  * @param[in] pixels The pixel's source to be imported.
6284  */
6285 /** @deprecated evas_object_image_pixels_import */
6286 EAPI Eina_Bool evas_object_image_pixels_import(Evas_Object *obj, Evas_Pixel_Import_Source *pixels) EINA_ARG_NONNULL(2) EINA_DEPRECATED;
6287 
6288 /*
6289  * Reload an image object's image data.
6290  *
6291  * This function reloads the image data bound to image object @p obj.
6292  */
6293 /** @deprecated evas_object_image_reload */
6294 EAPI void evas_object_image_reload(Evas_Object *obj) EINA_DEPRECATED;
6295 
6296 /**
6297  * @deprecated This function has never been implemented. Please use
6298  *             evas_object_clip_set() with an alpha or RGBA image instead
6299  *             of setting this flag.
6300  */
6301 EAPI void evas_object_image_alpha_mask_set(Evas_Object *obj, Eina_Bool ismask) EINA_ARG_NONNULL(1) EINA_DEPRECATED;
6302 
6303 #include "canvas/evas_image_eo.legacy.h"
6304 
6305 /**
6306  * @}
6307  */
6308 
6309 /**
6310  * @addtogroup Evas_Object_Text_Group
6311  *
6312  * @{
6313  */
6314 
6315 /**
6316  * Creates a new text object on the provided canvas.
6317  *
6318  * @param e The canvas to create the text object on.
6319  * @return @c NULL on error, a pointer to a new text object on
6320  * success.
6321  *
6322  * Text objects are for simple, single line text elements. If you want
6323  * more elaborated text blocks, see @ref Evas_Object_Textblock_Group.
6324  *
6325  * @see evas_object_text_font_source_set()
6326  * @see evas_object_text_font_set()
6327  * @see evas_object_text_text_set()
6328  */
6329 EAPI Evas_Object         *evas_object_text_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
6330 
6331 /**
6332  *
6333  * Sets the text string to be displayed by the given text object.
6334  *
6335  * @see evas_object_text_text_get()
6336  *
6337  * @param[in] text Text string to display on it.
6338  */
6339 EAPI void evas_object_text_text_set(Eo *obj, const char *text);
6340 
6341 /**
6342  *
6343  * Retrieves the text string currently being displayed by the given
6344  * text object.
6345  *
6346  * @return The text string currently being displayed on it.
6347  *
6348  * @note Do not free() the return value.
6349  *
6350  * @see evas_object_text_text_set()
6351  *
6352  */
6353 EAPI const char *evas_object_text_text_get(const Eo *obj);
6354 
6355 /**
6356  * Types of styles to be applied on text objects. The
6357  * EVAS_TEXT_STYLE_SHADOW_DIRECTION_* ones are to be OR'ed together with others
6358  * imposing shadow, to change the shadow's direction.
6359  *
6360  * @see evas_object_text_style_set()
6361  * @see evas_object_text_style_get()
6362  */
6363 typedef enum
6364 {
6365    EVAS_TEXT_STYLE_PLAIN = 0, /**< plain, standard text */
6366    EVAS_TEXT_STYLE_SHADOW, /**< text with shadow underneath */
6367    EVAS_TEXT_STYLE_OUTLINE, /**< text with an outline */
6368    EVAS_TEXT_STYLE_SOFT_OUTLINE, /**< text with a soft outline */
6369    EVAS_TEXT_STYLE_GLOW, /**< text with a glow effect */
6370    EVAS_TEXT_STYLE_OUTLINE_SHADOW, /**< text with both outline and shadow effects */
6371    EVAS_TEXT_STYLE_FAR_SHADOW, /**< text with (far) shadow underneath */
6372    EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW, /**< text with outline and soft shadow effects combined */
6373    EVAS_TEXT_STYLE_SOFT_SHADOW, /**< text with (soft) shadow underneath */
6374    EVAS_TEXT_STYLE_FAR_SOFT_SHADOW, /**< text with (far soft) shadow underneath */
6375 
6376    // Shadow direction modifiers
6377    EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_RIGHT = 0 /* 0 >> 4 */, /**< shadow growing to bottom right */
6378    EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM = 16 /* 1 >> 4 */, /**< shadow growing to the bottom */
6379    EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_LEFT = 32 /* 2 >> 4 */, /**< shadow growing to bottom left */
6380    EVAS_TEXT_STYLE_SHADOW_DIRECTION_LEFT = 48 /* 3 >> 4 */, /**< shadow growing to the left */
6381    EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_LEFT = 64 /* 4 >> 4 */, /**< shadow growing to top left */
6382    EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP = 80 /* 5 >> 4 */, /**< shadow growing to the top */
6383    EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_RIGHT = 96 /* 6 >> 4 */, /**< shadow growing to top right */
6384    EVAS_TEXT_STYLE_SHADOW_DIRECTION_RIGHT = 112 /* 7 >> 4 */ /**< shadow growing to the right */
6385 } Evas_Text_Style_Type;
6386 
6387 #include "canvas/evas_text_eo.legacy.h"
6388 
6389 /**
6390  *
6391  * Set the font (source) file to be used on a given text object.
6392  *
6393  * This function allows the font file to be explicitly set for a given
6394  * text object, overriding system lookup, which will first occur in
6395  * the given file's contents.
6396  *
6397  * @see evas_object_text_font_get()
6398  *
6399  * @param[in] font_source The font file's path.
6400  */
6401 EAPI void evas_object_text_font_source_set(Eo *obj, const char *font_source);
6402 
6403 /**
6404  *
6405  * Get the font file's path which is being used on a given text
6406  * object.
6407  *
6408  * @return The font file's path.
6409  *
6410  * @see evas_object_text_font_get() for more details
6411  *
6412  */
6413 EAPI const char *evas_object_text_font_source_get(const Eo *obj);
6414 
6415 /**
6416  *
6417  * Set the font family or filename, and size on a given text object.
6418  *
6419  * This function allows the font name and size of a text object to be
6420  * set. The @p font string has to follow fontconfig's convention on
6421  * naming fonts, as it's the underlying library used to query system
6422  * fonts by Evas (see the @c fc-list command's output, on your system,
6423  * to get an idea). Alternatively, one can use a full path to a font file.
6424  *
6425  * @see evas_object_text_font_get()
6426  * @see evas_object_text_font_source_set()
6427  *
6428  * @param[in] font The font family name or filename.
6429  * @param[in] size The font size, in points.
6430  */
6431 EAPI void evas_object_text_font_set(Eo *obj, const char *font, Evas_Font_Size size);
6432 
6433 /**
6434  *
6435  * Retrieve the font family and size in use on a given text object.
6436  *
6437  * This function allows the font name and size of a text object to be
6438  * queried. Be aware that the font name string is still owned by Evas
6439  * and should @b not have free() called on it by the caller of the
6440  * function.
6441  *
6442  * @see evas_object_text_font_set()
6443  *
6444  * @param[out] font The font family name or filename.
6445  * @param[out] size The font size, in points.
6446  */
6447 EAPI void evas_object_text_font_get(const Eo *obj, const char **font, Evas_Font_Size *size);
6448 
6449 
6450 /**
6451  * @}
6452  */
6453 
6454 #include "canvas/evas_textblock_legacy.h"
6455 
6456 /**
6457  * @ingroup Evas_Object_Grid_Group
6458  *
6459  * @{
6460  */
6461 /**
6462  * @brief Add a textgrid to the given Evas.
6463  *
6464  * @param e The given evas.
6465  * @return The new textgrid object.
6466  *
6467  * This function adds a new textgrid object to the Evas @p e and returns the object.
6468  *
6469  * @since 1.7
6470  */
6471 EAPI Evas_Object *evas_object_textgrid_add(Evas *e);
6472 
6473 #include "canvas/evas_textgrid_eo.legacy.h"
6474 
6475 /**
6476  *
6477  * @brief Set the font (source) file to be used on a given textgrid object.
6478  *
6479  * This function allows the font file @p font_source to be explicitly
6480  * set for the textgrid object @p obj, overriding system lookup, which
6481  * will first occur in the given file's contents. If @p font_source is
6482  * @c NULL or is an empty string, or the same font_source has already
6483  * been set, or on error, this function does nothing.
6484  *
6485  * @see evas_object_textgrid_font_get()
6486  * @see evas_object_textgrid_font_set()
6487  * @see evas_object_textgrid_font_source_get()
6488  *
6489  * @since 1.7
6490  *
6491  * @param[in] font_source The font file's path.
6492  */
6493 EAPI void evas_object_textgrid_font_source_set(Eo *obj, const char *font_source);
6494 
6495 /**
6496  *
6497  * @brief Get the font file's path which is being used on a given textgrid object.
6498  *
6499  * @return The font file's path.
6500  *
6501  * This function returns the font source path of the textgrid object
6502  * @p obj. If the font source path has not been set, or on error,
6503  * @c NULL is returned.
6504  *
6505  * @see evas_object_textgrid_font_get()
6506  * @see evas_object_textgrid_font_set()
6507  * @see evas_object_textgrid_font_source_set()
6508  *
6509  * @since 1.7
6510  *
6511  */
6512 EAPI const char *evas_object_textgrid_font_source_get(const Eo *obj);
6513 
6514 /**
6515  *
6516  * @brief Set the font family and size on a given textgrid object.
6517  *
6518  * This function allows the font name @p font_name and size
6519  * @p font_size of the textgrid object @p obj to be set. The @p font_name
6520  * string has to follow fontconfig's convention on naming fonts, as
6521  * it's the underlying library used to query system fonts by Evas (see
6522  * the @c fc-list command's output, on your system, to get an
6523  * idea). It also has to be a monospace font. If @p font_name is
6524  * @c NULL, or if it is an empty string, or if @p font_size is less or
6525  * equal than 0, or on error, this function does nothing.
6526  *
6527  * @see evas_object_textgrid_font_get()
6528  * @see evas_object_textgrid_font_source_set()
6529  * @see evas_object_textgrid_font_source_get()
6530  *
6531  * @since 1.7
6532  *
6533  * @param[in] font_name The font (family) name.
6534  * @param[in] font_size The font size, in points.
6535  */
6536 EAPI void evas_object_textgrid_font_set(Eo *obj, const char *font_name, Evas_Font_Size font_size);
6537 
6538 /**
6539  *
6540  * @brief Retrieve the font family and size in use on a given textgrid object.
6541  *
6542  * This function allows the font name and size of a textgrid object
6543  * @p obj to be queried and stored respectively in the buffers
6544  * @p font_name and @p font_size. Be aware that the font name string is
6545  * still owned by Evas and should @b not have free() called on it by
6546  * the caller of the function. On error, the font name is the empty
6547  * string and the font size is 0. @p font_name and @p font_source can
6548  * be @c NULL.
6549  *
6550  * @see evas_object_textgrid_font_set()
6551  * @see evas_object_textgrid_font_source_set()
6552  * @see evas_object_textgrid_font_source_get()
6553  *
6554  * @since 1.7
6555  *
6556  * @param[out] font_name The font (family) name.
6557  * @param[out] font_size The font size, in points.
6558  */
6559 EAPI void evas_object_textgrid_font_get(const Eo *obj, const char **font_name, Evas_Font_Size *font_size);
6560 
6561 /**
6562  * @}
6563  */
6564 
6565 /**
6566  * @addtogroup Evas_Object_Line_Group
6567  *
6568  * @{
6569  */
6570 /**
6571  * Adds a new evas line object to the given evas.
6572  * @param   e The given evas.
6573  * @return  The new evas line object.
6574  */
6575 EAPI Evas_Object *evas_object_line_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
6576 
6577 #include "canvas/evas_line_eo.legacy.h"
6578 
6579 /**
6580  * @}
6581  */
6582 
6583 /**
6584  * @addtogroup Evas_Object_Polygon
6585  *
6586  * @{
6587  */
6588 /**
6589  * Adds a new evas polygon object to the given evas.
6590  * @param   e The given evas.
6591  * @return  A new evas polygon object.
6592  */
6593 EAPI Evas_Object *evas_object_polygon_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
6594 
6595 /**
6596  * @brief Adds the given point to the given evas polygon object.
6597  *
6598  * @param[in] obj The object
6599  * @param[in] y The Y coordinate of the given point.
6600  */
6601 EAPI void evas_object_polygon_point_add(Evas_Object *obj, Evas_Coord x, Evas_Coord y);
6602 
6603 /** Removes all of the points from the given evas polygon object.
6604  * @param[in] obj The object
6605  */
6606 EAPI void evas_object_polygon_points_clear(Evas_Object *obj);
6607 
6608 /**
6609  * @}
6610  */
6611 
6612 
6613 /**
6614  * @}
6615  */
6616 
6617 
6618 /**
6619  * @addtogroup Evas_Smart_Object_Group
6620  *
6621  * @{
6622  */
6623 
6624 
6625 /** Call user-provided @c calculate smart functions and unset the flag
6626  * signalling that the object needs to get recalculated to all smart objects in
6627  * the canvas.
6628  */
6629 EAPI void evas_smart_objects_calculate(Eo *obj);
6630 
6631 /**
6632  * @brief Get if the canvas is currently calculating smart objects.
6633  *
6634  * @param[in] obj The object.
6635  *
6636  * @return @c true if currently calculating smart objects.
6637  */
6638 EAPI Eina_Bool evas_smart_objects_calculating_get(const Eo *obj);
6639 
6640 /**
6641  * Instantiates a new smart object described by @p s.
6642  *
6643  * @param e the canvas on which to add the object
6644  * @param s the #Evas_Smart describing the smart object
6645  * @return a new #Evas_Object handle
6646  *
6647  * This is the function one should use when defining the public
6648  * function @b adding an instance of the new smart object to a given
6649  * canvas. It will take care of setting all of its internals to work
6650  * as they should, if the user set things properly, as seem on the
6651  * #EVAS_SMART_SUBCLASS_NEW, for example.
6652  */
6653 EAPI Evas_Object *evas_object_smart_add(Evas *e, Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_MALLOC;
6654 
6655 /**
6656  * Set an Evas object as a member of a given smart object.
6657  *
6658  * @param obj The member object
6659  * @param smart_obj The smart object
6660  *
6661  * Members will automatically be stacked and layered together with the
6662  * smart object. The various stacking functions will operate on
6663  * members relative to the other members instead of the entire canvas,
6664  * since they now live on an exclusive layer (see
6665  * evas_object_stack_above(), for more details).
6666  *
6667  * Any @p smart_obj object's specific implementation of the @c
6668  * member_add() smart function will take place too, naturally.
6669  *
6670  * @see evas_object_smart_member_del()
6671  * @see evas_object_smart_members_get()
6672  */
6673 EAPI void         evas_object_smart_member_add(Evas_Object *obj, Evas_Object *smart_obj) EINA_ARG_NONNULL(1, 2);
6674 
6675 /**
6676  * Removes a member object from a given smart object.
6677  *
6678  * @param obj the member object
6679  *
6680  * This removes a member object from a smart object, if it was added
6681  * to any. The object will still be on the canvas, but no longer
6682  * associated with whichever smart object it was associated with.
6683  *
6684  * @see evas_object_smart_member_add() for more details
6685  * @see evas_object_smart_members_get()
6686  */
6687 EAPI void         evas_object_smart_member_del(Evas_Object *obj) EINA_ARG_NONNULL(1);
6688 
6689 /**
6690  * Add (register) a callback function to the smart event specified by
6691  * @p event on the smart object @p obj.
6692  *
6693  * @param obj a smart object
6694  * @param event the event's name string
6695  * @param func the callback function
6696  * @param data user data to be passed to the callback function
6697  *
6698  * Smart callbacks look very similar to Evas callbacks, but are
6699  * implemented as smart object's custom ones.
6700  *
6701  * This function adds a function callback to an smart object when the
6702  * event named @p event occurs in it. The function is @p func.
6703  *
6704  * In the event of a memory allocation error during addition of the
6705  * callback to the object, evas_alloc_error() should be used to
6706  * determine the nature of the error, if any, and the program should
6707  * sensibly try and recover.
6708  *
6709  * A smart callback function must have the ::Evas_Smart_Cb prototype
6710  * definition. The first parameter (@p data) in this definition will
6711  * have the same value passed to evas_object_smart_callback_add() as
6712  * the @p data parameter, at runtime. The second parameter @p obj is a
6713  * handle to the object on which the event occurred. The third
6714  * parameter, @p event_info, is a pointer to data which is totally
6715  * dependent on the smart object's implementation and semantic for the
6716  * given event.
6717  *
6718  * There is an infrastructure for introspection on smart objects'
6719  * events (see evas_smart_callbacks_descriptions_get()), but no
6720  * internal smart objects on Evas implement them yet.
6721  *
6722  * @see @ref Evas_Smart_Object_Group_Callbacks for more details.
6723  *
6724  * @see evas_object_smart_callback_del()
6725  */
6726 EAPI void         evas_object_smart_callback_add(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
6727 
6728 /**
6729  * Add (register) a callback function to the smart event specified by
6730  * @p event on the smart object @p obj. Except for the priority field,
6731  * it's exactly the same as @ref evas_object_smart_callback_add
6732  *
6733  * @param obj a smart object
6734  * @param event the event's name string
6735  * @param priority The priority of the callback, lower values called first.
6736  * @param func the callback function
6737  * @param data user data to be passed to the callback function
6738  *
6739  * @see evas_object_smart_callback_add
6740  * @since 1.1
6741  */
6742 EAPI void         evas_object_smart_callback_priority_add(Evas_Object *obj, const char *event, Evas_Callback_Priority priority, Evas_Smart_Cb func, const void *data);
6743 
6744 /**
6745  * Delete (unregister) a callback function from the smart event
6746  * specified by @p event on the smart object @p obj.
6747  *
6748  * @param obj a smart object
6749  * @param event the event's name string
6750  * @param func the callback function
6751  * @return the data pointer
6752  *
6753  * This function removes <b>the first</b> added smart callback on the
6754  * object @p obj matching the event name @p event and the registered
6755  * function pointer @p func. If the removal is successful it will also
6756  * return the data pointer that was passed to
6757  * evas_object_smart_callback_add() (that will be the same as the
6758  * parameter) when the callback(s) was(were) added to the canvas. If
6759  * not successful @c NULL will be returned.
6760  *
6761  * @see evas_object_smart_callback_add() for more details.
6762  */
6763 EAPI void        *evas_object_smart_callback_del(Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3);
6764 
6765 /**
6766  * Delete (unregister) a callback function from the smart event
6767  * specified by @p event on the smart object @p obj.
6768  *
6769  * @param obj a smart object
6770  * @param event the event's name string
6771  * @param func the callback function
6772  * @param data the data pointer that was passed to the callback
6773  * @return the data pointer
6774  *
6775  * This function removes <b>the first</b> added smart callback on the
6776  * object @p obj matching the event name @p event, the registered
6777  * function pointer @p func and the callback data pointer @p data. If
6778  * the removal is successful it will also return the data pointer that
6779  * was passed to evas_object_smart_callback_add() (that will be the same
6780  * as the parameter) when the callback(s) was(were) added to the canvas.
6781  * If not successful @c NULL will be returned. A common use would be to
6782  * remove an exact match of a callback
6783  *
6784  * @see evas_object_smart_callback_add() for more details.
6785  * @since 1.2
6786  *
6787  * @note To delete all smart event callbacks which match @p type and @p func,
6788  * use evas_object_smart_callback_del().
6789  */
6790 EAPI void        *evas_object_smart_callback_del_full(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
6791 
6792 /**
6793  * Call a given smart callback on the smart object @p obj.
6794  *
6795  * @param obj the smart object
6796  * @param event the event's name string
6797  * @param event_info pointer to an event specific struct or information to
6798  * pass to the callback functions registered on this smart event
6799  *
6800  * This should be called @b internally, from the smart object's own
6801  * code, when some specific event has occurred and the implementor
6802  * wants is to pertain to the object's events API (see @ref
6803  * Evas_Smart_Object_Group_Callbacks). The documentation for the smart
6804  * object should include a list of possible events and what type of @p
6805  * event_info to expect for each of them. Also, when defining an
6806  * #Evas_Smart_Class, smart object implementors are strongly
6807  * encouraged to properly set the Evas_Smart_Class::callbacks
6808  * callbacks description array, so that the users of the smart object
6809  * can have introspection on its events API <b>at run time</b>.
6810  */
6811 EAPI void         evas_object_smart_callback_call(Evas_Object *obj, const char *event, void *event_info) EINA_ARG_NONNULL(1, 2);
6812 
6813 /**
6814  * Retrieve an Evas smart object's interface, by name string pointer.
6815  *
6816  * @param obj An Evas smart object.
6817  * @param name Name string of the desired interface, which must be the
6818  *             same pointer used at the interface's declarion, when
6819  *             creating the smart object @a obj.
6820  *
6821  * @since 1.7
6822  *
6823  * @return The interface's handle pointer, if found, @c NULL
6824  * otherwise.
6825  */
6826 EAPI const void       *evas_object_smart_interface_get(const Evas_Object *obj, const char *name);
6827 
6828 /**
6829  * Retrieve an Evas smart object interface's <b>private data</b>.
6830  *
6831  * @param obj An Evas smart object.
6832  * @param iface The given object's interface handle.
6833  *
6834  * @since 1.7
6835  *
6836  * @return The object interface's private data blob pointer, if found,
6837  * @c NULL otherwise.
6838  */
6839 EAPI void             *evas_object_smart_interface_data_get(const Evas_Object *obj, const Evas_Smart_Interface *iface);
6840 
6841 /**
6842  * @brief Checks whether a given smart object or any of its smart object
6843  * parents is of a given smart class.
6844  *
6845  * If @c obj is not a smart object, this call will fail immediately.
6846  *
6847  * The checks use smart classes names and string comparison. There is a version
6848  * of this same check using pointer comparison, since a smart class' name is a
6849  * single string in Evas.
6850  *
6851  * See also @ref evas_object_smart_type_check_ptr.
6852  *
6853  * @param[in] type The name (type) of the smart class to check for.
6854  */
6855 EAPI Eina_Bool evas_object_smart_type_check(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
6856 
6857 /**
6858  * @brief Checks whether a given smart object or any of its smart object
6859  * parents is of a given smart class, using pointer comparison.
6860  *
6861  * @param[in] type The type (name string) to check for. Must be the name.
6862  *
6863  * @return @c true if @c obj or any of its parents is of type @c type, @c false
6864  * otherwise.
6865  */
6866 EAPI Eina_Bool evas_object_smart_type_check_ptr(const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(2);
6867 
6868 /**
6869  * @brief Set an smart object instance's smart callbacks descriptions.
6870  *
6871  * These descriptions are hints to be used by introspection and are not
6872  * enforced in any way.
6873  *
6874  * It will not be checked if instance callbacks descriptions have the same name
6875  * as respective possibly registered in the smart object class. Both are kept
6876  * in different arrays and users of
6877  * evas_object_smart_callbacks_descriptions_get() should handle this case as
6878  * they wish.
6879  *
6880  * @note Because @c descriptions must be @c null terminated, and because a
6881  * @c null name makes little sense, too, Evas_Smart_Cb_Description.name must
6882  * not be @c null.
6883  *
6884  * @note While instance callbacks descriptions are possible, they are not
6885  * recommended. Use class callbacks descriptions instead as they make you smart
6886  * object user's life simpler and will use less memory, as descriptions and
6887  * arrays will be shared among all instances.
6888  *
6889  * @param[in] descriptions @c null terminated array with
6890  * @ref Evas_Smart_Cb_Description descriptions. Array elements won't be
6891  * modified at run time, but references to them and their contents will be
6892  * made, so this array should be kept alive during the whole object's lifetime.
6893  *
6894  * @return @c true on success, @c false on failure.
6895  */
6896 EAPI Eina_Bool evas_object_smart_callbacks_descriptions_set(Evas_Object *obj, const Evas_Smart_Cb_Description *descriptions);
6897 
6898 /**
6899  * @brief Retrieve an smart object's know smart callback descriptions (both
6900  * instance and class ones).
6901  *
6902  * This call searches for registered callback descriptions for both instance
6903  * and class of the given smart object. These arrays will be sorted by
6904  * Evas_Smart_Cb_Description.name and also @c null terminated, so both
6905  * class_count and instance_count can be ignored, if the caller wishes so. The
6906  * terminator @c null is not counted in these values.
6907  *
6908  * @note If just class descriptions are of interest, try
6909  * evas_smart_callbacks_descriptions_get() instead.
6910  *
6911  * @note Use @c null pointers on the descriptions/counters you're not
6912  * interested in: they'll be ignored by the function.
6913  *
6914  * @ref evas_smart_callbacks_descriptions_get().
6915  *
6916  * @param[out] class_descriptions Where to store class callbacks descriptions
6917  * array, if any is known. If no descriptions are known, @c null is returned.
6918  * @param[out] class_count Returns how many class callbacks descriptions are
6919  * known.
6920  * @param[out] instance_descriptions Where to store instance callbacks
6921  * descriptions array, if any is known. If no descriptions are known, @c null
6922  * is returned.
6923  * @param[out] instance_count Returns how many instance callbacks descriptions
6924  * are known.
6925  */
6926 EAPI void evas_object_smart_callbacks_descriptions_get(const Evas_Object *obj, const Evas_Smart_Cb_Description ***class_descriptions, unsigned int *class_count, const Evas_Smart_Cb_Description ***instance_descriptions, unsigned int *instance_count);
6927 
6928 /**
6929  * @brief Find callback description for callback called name or @c null if not
6930  * found.
6931  *
6932  * If parameter is @c null, no search will be done on instance descriptions.
6933  *
6934  * @param[in] name name of desired callback, must not be @c null.  The search
6935  * have a special case for name being the same pointer as registered with
6936  * Evas_Smart_Cb_Description, one can use it to avoid excessive use of
6937  * strcmp().
6938  * @param[out] class_description pointer to return class description or @c null
6939  * if not found. If parameter is @c null, no search will be done on class
6940  * descriptions.
6941  * @param[out] instance_description pointer to return instance description.
6942  */
6943 EAPI void evas_object_smart_callback_description_find(const Evas_Object *obj, const char *name, const Evas_Smart_Cb_Description **class_description, const Evas_Smart_Cb_Description **instance_description) EINA_ARG_NONNULL(2);
6944 
6945 /**
6946  * @brief Get the @ref Evas_Smart from which @c obj smart object was created.
6947  *
6948  * @return the @ref Evas_Smart handle or @c null, on errors.
6949  */
6950 EAPI Evas_Smart *evas_object_smart_smart_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
6951 
6952 /**
6953  * @brief Store a pointer to user data for a given smart object.
6954  *
6955  * This data is stored independently of the one set by evas_object_data_set(),
6956  * naturally.
6957  *
6958  * See also @ref evas_object_smart_data_get.
6959  *
6960  * @param[in] obj The object
6961  * @param[in] data A pointer to user data.
6962  */
6963 EAPI void evas_object_smart_data_set(Evas_Object *obj, void *data);
6964 
6965 /**
6966  * @brief Retrieves the pointer to user data for a given smart object.
6967  *
6968  * This data is stored independently of the one set by evas_object_data_set(),
6969  * naturally.
6970  *
6971  * See also @ref evas_object_smart_data_set.
6972  *
6973  * @param[in] obj The object
6974  * @return A pointer to user data.
6975  */
6976 EAPI void *evas_object_smart_data_get(const Evas_Object *obj);
6977 
6978 /**
6979  * @brief Get the clipper object for the given clipped smart object.
6980  *
6981  * Use this function if you want to change any of this clipper's properties,
6982  * like colors.
6983  */
6984 EAPI Evas_Object *evas_object_smart_clipped_clipper_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
6985 
6986 /**
6987  * @brief Retrieves the list of the member objects of a given Evas smart
6988  * object.
6989  *
6990  * The returned list should be freed with @c eina_list_free() when you no
6991  * longer need it.
6992  *
6993  * This function will return @c null when a non-smart object is passed.
6994  *
6995  * See also @ref evas_object_smart_member_add,
6996  * @ref evas_object_smart_member_del and @ref evas_object_smart_iterator_new.
6997  *
6998  * @return Returns the list of the member objects of @c obj.
6999  *
7000  * @since 1.7
7001  */
7002 EAPI Eina_List *evas_object_smart_members_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
7003 
7004 /**
7005  * @brief Set or unset the flag signalling that a given smart object needs to
7006  * get recalculated.
7007  *
7008  * If this flag is set, then the @c calculate() smart function of @c obj will
7009  * be called, if one is provided, during rendering phase of Evas (see
7010  * evas_render()), after which this flag will be automatically unset.
7011  *
7012  * If that smart function is not provided for the given object, this flag will
7013  * be left unchanged.
7014  *
7015  * @note just setting this flag will not make the canvas' whole scene dirty, by
7016  * itself, and evas_render() will have no effect. To force that, use
7017  * evas_object_smart_changed(), that will also call this function
7018  * automatically, with @c true as parameter.
7019  *
7020  * See also @ref evas_object_smart_need_recalculate_get,
7021  * @ref evas_object_smart_calculate and @ref evas_smart_objects_calculate().
7022  *
7023  * @param[in] value whether one wants to set ($true) or to unset ($false) the
7024  * flag.
7025  */
7026 EAPI void evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value);
7027 
7028 /**
7029  * @brief Get the value of the flag signalling that a given smart object needs
7030  * to get recalculated.
7031  *
7032  * @note this flag will be unset during the rendering phase, when the
7033  * @c calculate() smart function is called, if one is provided. If it's not
7034  * provided, then the flag will be left unchanged after the rendering phase.
7035  *
7036  * See also @ref evas_object_smart_need_recalculate_set, for more details.
7037  *
7038  * @return whether one wants to set ($true) or to unset ($false) the flag.
7039  */
7040 EAPI Eina_Bool evas_object_smart_need_recalculate_get(const Evas_Object *obj);
7041 
7042 /**
7043  * @brief Retrieves an iterator of the member objects of a given Evas smart
7044  * object.
7045  *
7046  * See also @ref evas_object_smart_member_add and
7047  * @ref evas_object_smart_member_del
7048  *
7049  * @return Returns the iterator of the member objects of @c obj.
7050  *
7051  * @since 1.8
7052  */
7053 EAPI Eina_Iterator *evas_object_smart_iterator_new(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT;
7054 
7055 /**
7056  * @brief Call the calculate() smart function immediately on a given smart
7057  * object.
7058  *
7059  * This will force immediate calculations (see #Evas_Smart_Class) needed for
7060  * renderization of this object and, besides, unset the flag on it telling it
7061  * needs recalculation for the next rendering phase.
7062  *
7063  * See also @ref evas_object_smart_need_recalculate_set
7064  */
7065 EAPI void evas_object_smart_calculate(Evas_Object *obj);
7066 
7067 /**
7068  * @brief Mark smart object as changed, dirty.
7069  *
7070  * This will flag the given object as needing recalculation, forcefully. As an
7071  * effect, on the next rendering cycle its calculate() (see #Evas_Smart_Class)
7072  * smart function will be called.
7073  *
7074  * See also @ref evas_object_smart_need_recalculate_set and
7075  * @ref evas_object_smart_calculate.
7076  */
7077 EAPI void evas_object_smart_changed(Evas_Object *obj);
7078 
7079 /**
7080  * @brief Moves all children objects of a given smart object relative to a
7081  * given offset.
7082  *
7083  * This will make each of @c obj object's children to move, from where they
7084  * before, with those delta values (offsets) on both directions.
7085  *
7086  * @note This is most useful on custom smart @c move functions.
7087  *
7088  * @note Clipped smart objects already make use of this function on their
7089  * @c move smart function definition.
7090  *
7091  * @param[in] dx Horizontal offset (delta).
7092  * @param[in] dy Vertical offset (delta).
7093  */
7094 EAPI void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord dx, Evas_Coord dy);
7095 
7096 #include "canvas/efl_canvas_group_eo.legacy.h"
7097 
7098 /**
7099  * @}
7100  */
7101 
7102 /**
7103  * @addtogroup Evas_Object_Box_Group
7104  *
7105  * @{
7106  */
7107 
7108  /**
7109  * Add a new box object on the provided canvas.
7110  *
7111  * @param evas The canvas to create the box object on.
7112  * @return @c NULL on error, a pointer to a new box object on
7113  * success.
7114  *
7115  * After instantiation, if a box object hasn't its layout function
7116  * set, via evas_object_box_layout_set(), it will have it by default
7117  * set to evas_object_box_layout_horizontal(). The remaining
7118  * properties of the box must be set/retrieved via
7119  * <c>evas_object_box_{h,v}_{align,padding}_{get,set)()</c>.
7120  */
7121 EAPI Evas_Object               *evas_object_box_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
7122 
7123 /**
7124  * Get a property's value (by its given numerical identifier), on a
7125  * given box child element -- by a variable argument list
7126  *
7127  * @param o The box parenting the child element
7128  * @param opt The box option structure bound to the child box element
7129  * to get a property from
7130  * @param property The numerical ID of the given property
7131  * @param args The variable argument list with pointers to where to
7132  * store the values of this property. They @b must point to variables
7133  * of the same type the user has defined for them.
7134  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure.
7135  *
7136  * This is a variable argument list variant of the
7137  * evas_object_box_option_property_get(). See its documentation for
7138  * more details.
7139  */
7140 EAPI Eina_Bool                  evas_object_box_option_property_vget(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2);
7141 
7142 /**
7143  * Set a property value (by its given numerical identifier), on a
7144  * given box child element -- by a variable argument list
7145  *
7146  * @param o The box parenting the child element
7147  * @param opt The box option structure bound to the child box element
7148  * to set a property on
7149  * @param property The numerical ID of the given property
7150  * @param args The variable argument list implementing the value to
7151  * be set for this property. It @b must be of the same type the user has
7152  * defined for it.
7153  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure.
7154  *
7155  * This is a variable argument list variant of the
7156  * evas_object_box_option_property_set(). See its documentation for
7157  * more details.
7158  */
7159 EAPI Eina_Bool                  evas_object_box_option_property_vset(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2);
7160 
7161 /**
7162  * Set a property value (by its given numerical identifier), on a
7163  * given box child element
7164  *
7165  * @param o The box parenting the child element
7166  * @param opt The box option structure bound to the child box element
7167  * to set a property on
7168  * @param property The numerical ID of the given property
7169  * @param ... (List of) actual value(s) to be set for this
7170  * property. It (they) @b must be of the same type the user has
7171  * defined for it (them).
7172  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure.
7173  *
7174  * @note This call won't do anything for a canonical Evas box. Only
7175  * users which have @b subclassed it, setting custom box items options
7176  * (see #Evas_Object_Box_Option) on it, would benefit from this
7177  * function. They'd have to implement it and set it to be the
7178  * _Evas_Object_Box_Api::property_set smart class function of the box,
7179  * which is originally set to @c NULL.
7180  *
7181  * @note This function will internally create a variable argument
7182  * list, with the values passed after @p property, and call
7183  * evas_object_box_option_property_vset() with this list and the same
7184  * previous arguments.
7185  */
7186 EAPI Eina_Bool                  evas_object_box_option_property_set(Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
7187 
7188 /**
7189  * Get a property's value (by its given numerical identifier), on a
7190  * given box child element
7191  *
7192  * @param o The box parenting the child element
7193  * @param opt The box option structure bound to the child box element
7194  * to get a property from
7195  * @param property The numerical ID of the given property
7196  * @param ... (List of) pointer(s) where to store the value(s) set for
7197  * this property. It (they) @b must point to variable(s) of the same
7198  * type the user has defined for it (them).
7199  * @return @c EINA_TRUE on success, @c EINA_FALSE on failure.
7200  *
7201  * @note This call won't do anything for a canonical Evas box. Only
7202  * users which have @b subclassed it, getting custom box items options
7203  * (see #Evas_Object_Box_Option) on it, would benefit from this
7204  * function. They'd have to implement it and get it to be the
7205  * _Evas_Object_Box_Api::property_get smart class function of the
7206  * box, which is originally get to @c NULL.
7207  *
7208  * @note This function will internally create a variable argument
7209  * list, with the values passed after @p property, and call
7210  * evas_object_box_option_property_vget() with this list and the same
7211  * previous arguments.
7212  */
7213 EAPI Eina_Bool                  evas_object_box_option_property_get(const Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
7214 
7215 /**
7216  * Get the list of children objects in a given box object.
7217  *
7218  * @param o The box to retrieve an items list from
7219  * @return A list of @p o's child objects, on success, or @c NULL,
7220  * on errors (or if it has no child objects)
7221  *
7222  * The returned list should be freed with @c eina_list_free() when you
7223  * no longer need it.
7224  *
7225  * @note This is a duplicate of the list kept by the box internally.
7226  *       It's up to the user to destroy it when it no longer needs it.
7227  *       It's possible to remove objects from the box when walking
7228  *       this list, but these removals won't be reflected on it.
7229  */
7230 EAPI Eina_List                 *evas_object_box_children_get(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
7231 
7232 #include "canvas/evas_box_eo.legacy.h"
7233 
7234 /**
7235  * @}
7236  */
7237 
7238 /**
7239  * @addtogroup Evas_Object_Table_Group
7240  *
7241  * @{
7242  */
7243 /**
7244  * @brief Create a new table.
7245  *
7246  * @param evas Canvas in which table will be added.
7247  */
7248 EAPI Evas_Object                       *evas_object_table_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
7249 
7250 /**
7251  * @brief Control the mirrored mode of the table. In mirrored mode, the table
7252  * items go from right to left instead of left to right. That is, 1,1 is top
7253  * right, not top left.
7254  *
7255  * @param[in] obj The object.
7256  * @param[in] mirrored @c true if mirrored, @c false otherwise
7257  *
7258  * @since 1.1
7259  *
7260  * @ingroup Evas_Table
7261  */
7262 EAPI void evas_object_table_mirrored_set(Eo *obj, Eina_Bool mirrored);
7263 
7264 /**
7265  * @brief Control the mirrored mode of the table. In mirrored mode, the table
7266  * items go from right to left instead of left to right. That is, 1,1 is top
7267  * right, not top left.
7268  *
7269  * @param[in] obj The object.
7270  *
7271  * @return @c true if mirrored, @c false otherwise
7272  *
7273  * @since 1.1
7274  *
7275  * @ingroup Evas_Table
7276  */
7277 EAPI Eina_Bool evas_object_table_mirrored_get(const Eo *obj);
7278 
7279 #include "canvas/evas_table_eo.legacy.h"
7280 
7281 /**
7282  * @}
7283  */
7284 
7285 /**
7286  * @addtogroup Evas_Object_Grid_Group
7287  *
7288  * @{
7289  */
7290 /**
7291  * Create a new grid.
7292  *
7293  * It's set to a virtual size of 1x1 by default and add children with
7294  * evas_object_grid_pack().
7295  * @since 1.1
7296  */
7297 EAPI Evas_Object   *evas_object_grid_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
7298 
7299 
7300 /**
7301  * @brief Sets the mirrored mode of the grid. In mirrored mode the grid items
7302  * go from right to left instead of left to right. That is, 0,0 is top right,
7303  * not to left.
7304  *
7305  * @param[in] obj The object.
7306  * @param[in] mirrored @c true if mirrored mode is set, @c false otherwise
7307  *
7308  * @since 1.1
7309  *
7310  * @ingroup Evas_Grid
7311  */
7312 EAPI void evas_object_grid_mirrored_set(Eo *obj, Eina_Bool mirrored);
7313 
7314 /**
7315  * @brief Gets the mirrored mode of the grid.
7316  *
7317  * See also @ref evas_object_grid_mirrored_set
7318  *
7319  * @param[in] obj The object.
7320  *
7321  * @return @c true if mirrored mode is set, @c false otherwise
7322  *
7323  * @since 1.1
7324  *
7325  * @ingroup Evas_Grid
7326  */
7327 EAPI Eina_Bool evas_object_grid_mirrored_get(const Eo *obj);
7328 
7329 #include "canvas/evas_grid_eo.legacy.h"
7330 
7331 /**
7332  * @}
7333  */
7334 
7335 /**
7336  * @brief Sets the output framespace size of the render engine of the given
7337  * evas.
7338  *
7339  * The framespace size is used in the Wayland engines to denote space in the
7340  * viewport which is occupied by the window frame. This is mainly used in
7341  * ecore_evas to draw borders.
7342  *
7343  * The units used for @c w and @c h depend on the engine used by the evas.
7344  *
7345  * @param[in] x The left coordinate in output units, usually pixels.
7346  * @param[in] y The top coordinate in output units, usually pixels.
7347  * @param[in] w The width in output units, usually pixels.
7348  * @param[in] h The height in output units, usually pixels.
7349  *
7350  * @since 1.1
7351  *
7352  * @ingroup Evas_Canvas
7353  */
7354 EAPI void evas_output_framespace_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
7355 
7356 /**
7357  * @brief Get the render engine's output framespace coordinates in canvas
7358  * units.
7359  *
7360  * @param[out] x The left coordinate in output units, usually pixels.
7361  * @param[out] y The top coordinate in output units, usually pixels.
7362  * @param[out] w The width in output units, usually pixels.
7363  * @param[out] h The height in output units, usually pixels.
7364  *
7365  * @since 1.1
7366  *
7367  * @ingroup Evas_Canvas
7368  */
7369 EAPI void evas_output_framespace_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
7370 
7371 /**
7372  * @brief Sets the output viewport of the given evas in evas units.
7373  *
7374  * The output viewport is the area of the evas that will be visible to the
7375  * viewer.	The viewport will be stretched to fit the output target of the evas
7376  * when rendering is performed.
7377  *
7378  * @note The coordinate values do not have to map 1-to-1 with the output
7379  * target. However, it is generally advised that it is done for ease of use.
7380  *
7381  * @param[in] x The top-left corner x value of the viewport.
7382  * @param[in] y The top-left corner y value of the viewport.
7383  * @param[in] w The width of the viewport.	Must be greater than 0.
7384  * @param[in] h The height of the viewport.  Must be greater than 0.
7385  *
7386  * @ingroup Evas_Canvas
7387  */
7388 EAPI void evas_output_viewport_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
7389 
7390 /**
7391  * @brief Get the render engine's output viewport coordinates in canvas units.
7392  *
7393  * Calling this function writes the current canvas output viewport size and
7394  * location values into the variables pointed to by @c x, @c y, @c w and @c h.
7395  *	On success the variables have the output location and size values written
7396  * to them in canvas units. Any of @c x, @c y, @c w or @c h that are @c null
7397  * will not be written to. If @c e is invalid, the results are undefined.
7398  *
7399  * @param[out] x The top-left corner x value of the viewport.
7400  * @param[out] y The top-left corner y value of the viewport.
7401  * @param[out] w The width of the viewport.  Must be greater than 0.
7402  * @param[out] h The height of the viewport.  Must be greater than 0.
7403  *
7404  * @ingroup Evas_Canvas
7405  */
7406 EAPI void evas_output_viewport_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
7407 
7408 /**
7409  * @brief Sets the output engine for the given evas.
7410  *
7411  * Once the output engine for an evas is set, any attempt to change it	will be
7412  * ignored. The value for @c render_method can be found using @ref
7413  * evas_render_method_lookup.
7414  *
7415  * @note it is mandatory that one calls @ref evas_init before setting the
7416  * output method.
7417  *
7418  * @param[in] render_method The numeric engine value to use.
7419  *
7420  * @ingroup Evas_Canvas
7421  */
7422 EAPI void evas_output_method_set(Evas *e, int render_method);
7423 
7424 /**
7425  * @brief Retrieves the number of the output engine used for the given evas.
7426  *
7427  * @return The numeric engine value to use.
7428  *
7429  * @ingroup Evas_Canvas
7430  */
7431 EAPI int evas_output_method_get(const Evas *e);
7432 
7433 /**
7434  * @brief Sets the output size of the render engine of the given evas.
7435  *
7436  * The evas will render to a rectangle of the given size once this function is
7437  * called.	The output size is independent of the viewport size. The viewport
7438  * will be stretched to fill the given rectangle.
7439  *
7440  * The units used for @c w and @c h depend on the engine used by the evas.
7441  *
7442  * @param[in] w The width in output units, usually pixels.
7443  * @param[in] h The height in output units, usually pixels.
7444  *
7445  * @ingroup Evas_Canvas
7446  */
7447 EAPI void evas_output_size_set(Evas *e, int w, int h);
7448 
7449 /**
7450  * @brief Retrieve the output size of the render engine of the given evas.
7451  *
7452  * The output size is given in whatever the output units are for the engine.
7453  *
7454  * If either @c w or @c h is @c null, then it is ignored.  If @c e is invalid,
7455  * the returned results are undefined.
7456  *
7457  * @param[out] w The width in output units, usually pixels.
7458  * @param[out] h The height in output units, usually pixels.
7459  *
7460  * @ingroup Evas_Canvas
7461  */
7462 EAPI void evas_output_size_get(const Evas *e, int *w, int *h);
7463 
7464 typedef struct _Evas_Map Evas_Map;
7465 
7466 /**
7467  * @defgroup Evas_Object_Group_Map UV Mapping (Rotation, Perspective, 3D...)
7468  *
7469  * Evas allows different transformations to be applied to all kinds of
7470  * objects. These are applied by means of UV mapping.
7471  *
7472  * With UV mapping, one maps points in the source object to a 3D space
7473  * positioning at target. This allows rotation, perspective, scale and
7474  * lots of other effects, depending on the map that is used.
7475  *
7476  * Each map point may carry a multiplier color. If properly
7477  * calculated, these can do shading effects on the object, producing
7478  * 3D effects.
7479  *
7480  * As usual, Evas provides both the raw and easy to use methods. The
7481  * raw methods allow developers to create their maps somewhere else,
7482  * possibly loading them from some file format. The easy to use methods
7483  * calculate the points given some high-level parameters such as
7484  * rotation angle, ambient light, and so on.
7485  *
7486  * @note applying mapping will reduce performance, so use with
7487  *       care. The impact on performance depends on engine in
7488  *       use. Software is quite optimized, but not as fast as OpenGL.
7489  *
7490  * @section sec-map-points Map points
7491  * @subsection subsec-rotation Rotation
7492  *
7493  * A map consists of a set of points, currently only four are supported. Each
7494  * of these points contains a set of canvas coordinates @c x and @c y that
7495  * can be used to alter the geometry of the mapped object, and a @c z
7496  * coordinate that indicates the depth of that point. This last coordinate
7497  * does not normally affect the map, but it's used by several of the utility
7498  * functions to calculate the right position of the point given other
7499  * parameters.
7500  *
7501  * The coordinates for each point are set with evas_map_point_coord_set().
7502  * The following image shows a map set to match the geometry of an existing
7503  * object.
7504  *
7505  * @image html map-set-map-points-1.png
7506  * @image rtf map-set-map-points-1.png
7507  * @image latex map-set-map-points-1.eps
7508  *
7509  * This is a common practice, so there are a few functions that help make it
7510  * easier.
7511  *
7512  * evas_map_util_points_populate_from_geometry() sets the coordinates of each
7513  * point in the given map to match the rectangle defined by the function
7514  * parameters.
7515  *
7516  * evas_map_util_points_populate_from_object() and
7517  * evas_map_util_points_populate_from_object_full() both take an object and
7518  * set the map points to match its geometry. The difference between the two
7519  * is that the first function sets the @c z value of all points to 0, while
7520  * the latter receives the value to set in said coordinate as a parameter.
7521  *
7522  * The following lines of code all produce the same result as in the image
7523  * above.
7524  * @code
7525  * evas_map_util_points_populate_from_geometry(m, 100, 100, 200, 200, 0);
7526  * // Assuming o is our original object
7527  * evas_object_move(o, 100, 100);
7528  * evas_object_resize(o, 200, 200);
7529  * evas_map_util_points_populate_from_object(m, o);
7530  * evas_map_util_points_populate_from_object_full(m, o, 0);
7531  * @endcode
7532  *
7533  * Several effects can be applied to an object by simply setting each point
7534  * of the map to the right coordinates. For example, a simulated perspective
7535  * could be achieve as follows.
7536  *
7537  * @image html map-set-map-points-2.png
7538  * @image rtf map-set-map-points-2.png
7539  * @image latex map-set-map-points-2.eps
7540  *
7541  * As said before, the @c z coordinate is unused here so when setting points
7542  * by hand, its value is of no importance.
7543  *
7544  * @image html map-set-map-points-3.png
7545  * @image rtf map-set-map-points-3.png
7546  * @image latex map-set-map-points-3.eps
7547  *
7548  * In all three cases above, setting the map to be used by the object is the
7549  * same.
7550  * @code
7551  * evas_object_map_set(o, m);
7552  * evas_object_map_enable_set(o, EINA_TRUE);
7553  * @endcode
7554  *
7555  * Doing things this way, however, is a lot of work that can be avoided by
7556  * using the provided utility functions, as described in the next section.
7557  *
7558  * @section map-utils Utility functions
7559  *
7560  * Utility functions take an already set up map and alter it to produce a
7561  * specific effect. For example, to rotate an object around its own center
7562  * you would need to take the rotation angle, the coordinates of each corner
7563  * of the object and do all the math to get the new set of coordinates that
7564  * need to be set in the map.
7565  *
7566  * Or you can use this code:
7567  * @code
7568  * evas_object_geometry_get(o, &x, &y, &w, &h);
7569  * m = evas_map_new(4);
7570  * evas_map_util_points_populate_from_object(m, o);
7571  * evas_map_util_rotate(m, 45, x + (w / 2), y + (h / 2));
7572  * evas_object_map_set(o, m);
7573  * evas_object_map_enable_set(o, EINA_TRUE);
7574  * evas_map_free(m);
7575  * @endcode
7576  *
7577  * Which will rotate the object around its center point in a 45 degree angle
7578  * in the clockwise direction, taking it from this
7579  *
7580  * @image html map-rotation-2d-1.png
7581  * @image rtf map-rotation-2d-1.png
7582  * @image latex map-rotation-2d-1.eps
7583  *
7584  * to this
7585  *
7586  * @image html map-rotation-2d-2.png
7587  * @image rtf map-rotation-2d-2.png
7588  * @image latex map-rotation-2d-2.eps
7589  *
7590  * Objects may be rotated around any other point just by setting the last two
7591  * paramaters of the evas_map_util_rotate() function to the right values. A
7592  * circle of roughly the diameter of the object overlaid on each image shows
7593  * where the center of rotation is set for each example.
7594  *
7595  * For example, this code
7596  * @code
7597  * evas_object_geometry_get(o, &x, &y, &w, &h);
7598  * m = evas_map_new(4);
7599  * evas_map_util_points_populate_from_object(m, o);
7600  * evas_map_util_rotate(m, 45, x + w - 20, y + h - 20);
7601  * evas_object_map_set(o, m);
7602  * evas_object_map_enable_set(o, EINA_TRUE);
7603  * evas_map_free(m);
7604  * @endcode
7605  *
7606  * produces something like
7607  *
7608  * @image html map-rotation-2d-3.png
7609  * @image rtf map-rotation-2d-3.png
7610  * @image latex map-rotation-2d-3.eps
7611  *
7612  * And the following
7613  * @code
7614  * evas_output_size_get(evas, &w, &h);
7615  * m = evas_map_new(4);
7616  * evas_map_util_points_populate_from_object(m, o);
7617  * evas_map_util_rotate(m, 45, w, h);
7618  * evas_object_map_set(o, m);
7619  * evas_object_map_enable_set(o, EINA_TRUE);
7620  * evas_map_free(m);
7621  * @endcode
7622  *
7623  * rotates the object around the center of the window
7624  *
7625  * @image html map-rotation-2d-4.png
7626  * @image rtf map-rotation-2d-4.png
7627  * @image latex map-rotation-2d-4.eps
7628  *
7629  * @subsection subsec-3d 3D Maps
7630  *
7631  * Maps can also be used to achieve the effect of 3-dimensionality. When doing
7632  * this, the @c z coordinate of each point counts, with higher values meaning
7633  * the point is further into the screen, and smaller values (negative, usually)
7634  * meaning the point is closer towards the user.
7635  *
7636  * Thinking in 3D also introduces the concept of back-face of an object. An
7637  * object is said to be facing the user when all its points are placed in a
7638  * clockwise fashion. The next image shows this, with each point showing the
7639  * with which is identified within the map.
7640  *
7641  * @image html map-point-order-face.png
7642  * @image rtf map-point-order-face.png
7643  * @image latex map-point-order-face.eps
7644  *
7645  * Rotating this map around the @c Y axis would leave the order of the points
7646  * in a counter-clockwise fashion, as seen in the following image.
7647  *
7648  * @image html map-point-order-back.png
7649  * @image rtf map-point-order-back.png
7650  * @image latex map-point-order-back.eps
7651  *
7652  * This way we can say that we are looking at the back face of the object.
7653  * This will have stronger implications later when we talk about lighting.
7654  *
7655  * To know if a map is facing towards the user or not it's enough to use
7656  * the evas_map_util_clockwise_get() function, but this is normally done
7657  * after all the other operations are applied on the map.
7658  *
7659  * @subsection subsec-3d-rot 3D rotation and perspective
7660  *
7661  * Much like evas_map_util_rotate(), there's the function
7662  * evas_map_util_3d_rotate() that transforms the map to apply a 3D rotation
7663  * to an object. As in its 2D counterpart, the rotation can be applied around
7664  * any point in the canvas, this time with a @c z coordinate too. The rotation
7665  * can also be around any of the 3 axis.
7666  *
7667  * Starting from this simple setup
7668  *
7669  * @image html map-3d-basic-1.png
7670  * @image rtf map-3d-basic-1.png
7671  * @image latex map-3d-basic-1.eps
7672  *
7673  * and setting maps so that the blue square to rotate on all axis around a
7674  * sphere that uses the object as its center, and the red square to rotate
7675  * around the @c Y axis, we get the following. A simple overlay over the image
7676  * shows the original geometry of each object and the axis around which they
7677  * are being rotated, with the @c Z one not appearing due to being orthogonal
7678  * to the screen.
7679  *
7680  * @image html map-3d-basic-2.png
7681  * @image rtf map-3d-basic-2.png
7682  * @image latex map-3d-basic-2.eps
7683  *
7684  * which doesn't look very real. This can be helped by adding perspective
7685  * to the transformation, which can be simply done by calling
7686  * evas_map_util_3d_perspective() on the map after its position has been set.
7687  * The result in this case, making the vanishing point the center of each
7688  * object:
7689  *
7690  * @image html map-3d-basic-3.png
7691  * @image rtf map-3d-basic-3.png
7692  * @image latex map-3d-basic-3.eps
7693  *
7694  * @section sec-color Color and lighting
7695  *
7696  * Each point in a map can be set to a color, which will be multiplied with
7697  * the objects own color and linearly interpolated in between adjacent points.
7698  * This is done with evas_map_point_color_set() for each point of the map,
7699  * or evas_map_util_points_color_set() to set every point to the same color.
7700  *
7701  * When using 3D effects, colors can be used to improve the looks of them by
7702  * simulating a light source. The evas_map_util_3d_lighting() function makes
7703  * this task easier by taking the coordinates of the light source and its
7704  * color, along with the color of the ambient light. Evas then sets the color
7705  * of each point based on the distance to the light source, the angle with
7706  * which the object is facing the light and the ambient light. Here, the
7707  * orientation of each point as explained before, becomes more important.
7708  * If the map is defined counter-clockwise, the object will be facing away
7709  * from the user and thus become obscured, since no light would be reflecting
7710  * from it.
7711  *
7712  * @image html map-light.png
7713  * @image rtf map-light.png
7714  * @image latex map-light.eps
7715  * @note Object facing the light source
7716  *
7717  * @image html map-light2.png
7718  * @image rtf map-light2.png
7719  * @image latex map-light2.eps
7720  * @note Same object facing away from the user
7721  *
7722  * @section Image mapping
7723  *
7724  * @image html map-uv-mapping-1.png
7725  * @image rtf map-uv-mapping-1.png
7726  * @image latex map-uv-mapping-1.eps
7727  *
7728  * Images need some special handling when mapped. Evas can easily take care
7729  * of objects and do almost anything with them, but it's completely oblivious
7730  * to the content of images, so each point in the map needs to be told to what
7731  * pixel in the source image it belongs. Failing to do may sometimes result
7732  * in the expected behavior, or it may look like a partial work.
7733  *
7734  * The next image illustrates one possibility of a map being set to an image
7735  * object, without setting the right UV mapping for each point. The objects
7736  * themselves are mapped properly to their new geometry, but the image content
7737  * may not be displayed correctly within the mapped object.
7738  *
7739  * @image html map-uv-mapping-2.png
7740  * @image rtf map-uv-mapping-2.png
7741  * @image latex map-uv-mapping-2.eps
7742  *
7743  * Once Evas knows how to handle the source image within the map, it will
7744  * transform it as needed. This is done with evas_map_point_image_uv_set(),
7745  * which tells the map to which pixel in image it maps.
7746  *
7747  * To match our example images to the maps above all we need is the size of
7748  * each image, which can always be found with evas_object_image_size_get().
7749  *
7750  * @code
7751  * evas_map_point_image_uv_set(m, 0, 0, 0);
7752  * evas_map_point_image_uv_set(m, 1, 150, 0);
7753  * evas_map_point_image_uv_set(m, 2, 150, 200);
7754  * evas_map_point_image_uv_set(m, 3, 0, 200);
7755  * evas_object_map_set(o, m);
7756  * evas_object_map_enable_set(o, EINA_TRUE);
7757  *
7758  * evas_map_point_image_uv_set(m, 0, 0, 0);
7759  * evas_map_point_image_uv_set(m, 1, 120, 0);
7760  * evas_map_point_image_uv_set(m, 2, 120, 160);
7761  * evas_map_point_image_uv_set(m, 3, 0, 160);
7762  * evas_object_map_set(o2, m);
7763  * evas_object_map_enable_set(o2, EINA_TRUE);
7764  * @endcode
7765  *
7766  * To get
7767  *
7768  * @image html map-uv-mapping-3.png
7769  * @image rtf map-uv-mapping-3.png
7770  * @image latex map-uv-mapping-3.eps
7771  *
7772  * Maps can also be set to use part of an image only, or even map them inverted,
7773  * and combined with evas_object_image_source_set() it can be used to achieve
7774  * more interesting results.
7775  *
7776  * @code
7777  * evas_object_image_size_get(evas_object_image_source_get(o), &w, &h);
7778  * evas_map_point_image_uv_set(m, 0, 0, h);
7779  * evas_map_point_image_uv_set(m, 1, w, h);
7780  * evas_map_point_image_uv_set(m, 2, w, h / 3);
7781  * evas_map_point_image_uv_set(m, 3, 0, h / 3);
7782  * evas_object_map_set(o, m);
7783  * evas_object_map_enable_set(o, EINA_TRUE);
7784  * @endcode
7785  *
7786  * @image html map-uv-mapping-4.png
7787  * @image rtf map-uv-mapping-4.png
7788  * @image latex map-uv-mapping-4.eps
7789  *
7790  * Examples:
7791  * @li @ref Example_Evas_Map_Overview
7792  *
7793  * @ingroup Evas_Object_Group
7794  *
7795  * @{
7796  */
7797 
7798 /**
7799  * Populate source and destination map points to match exactly object.
7800  *
7801  * Usually one initialize map of an object to match it's original
7802  * position and size, then transform these with evas_map_util_*
7803  * functions, such as evas_map_util_rotate() or
7804  * evas_map_util_3d_rotate(). The original set is done by this
7805  * function, avoiding code duplication all around.
7806  *
7807  * @param m map to change all 4 points (must be of size 4).
7808  * @param obj object to use unmapped geometry to populate map coordinates.
7809  * @param z Point Z Coordinate hint (pre-perspective transform). This value
7810  *        will be used for all four points.
7811  *
7812  * @see evas_map_util_points_populate_from_object()
7813  * @see evas_map_point_coord_set()
7814  * @see evas_map_point_image_uv_set()
7815  */
7816 EAPI void            evas_map_util_points_populate_from_object_full(Evas_Map *m, const Evas_Object *obj, Evas_Coord z);
7817 
7818 /**
7819  * Populate source and destination map points to match exactly object.
7820  *
7821  * Usually one initialize map of an object to match it's original
7822  * position and size, then transform these with evas_map_util_*
7823  * functions, such as evas_map_util_rotate() or
7824  * evas_map_util_3d_rotate(). The original set is done by this
7825  * function, avoiding code duplication all around.
7826  *
7827  * Z Point coordinate is assumed as 0 (zero).
7828  *
7829  * @param m map to change all 4 points (must be of size 4).
7830  * @param obj object to use unmapped geometry to populate map coordinates.
7831  *
7832  * @see evas_map_util_points_populate_from_object_full()
7833  * @see evas_map_util_points_populate_from_geometry()
7834  * @see evas_map_point_coord_set()
7835  * @see evas_map_point_image_uv_set()
7836  */
7837 EAPI void            evas_map_util_points_populate_from_object(Evas_Map *m, const Evas_Object *obj);
7838 
7839 /**
7840  * Populate source and destination map points to match given geometry.
7841  *
7842  * Similar to evas_map_util_points_populate_from_object_full(), this
7843  * call takes raw values instead of querying object's unmapped
7844  * geometry. The given width will be used to calculate destination
7845  * points (evas_map_point_coord_set()) and set the image uv
7846  * (evas_map_point_image_uv_set()).
7847  *
7848  * @param m map to change all 4 points (must be of size 4).
7849  * @param x Point X Coordinate
7850  * @param y Point Y Coordinate
7851  * @param w width to use to calculate second and third points.
7852  * @param h height to use to calculate third and fourth points.
7853  * @param z Point Z Coordinate hint (pre-perspective transform). This value
7854  *        will be used for all four points.
7855  *
7856  * @see evas_map_util_points_populate_from_object()
7857  * @see evas_map_point_coord_set()
7858  * @see evas_map_point_image_uv_set()
7859  */
7860 EAPI void            evas_map_util_points_populate_from_geometry(Evas_Map *m, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Evas_Coord z);
7861 
7862 /**
7863  * Set color of all points to given color.
7864  *
7865  * This call is useful to reuse maps after they had 3d lighting or
7866  * any other colorization applied before.
7867  *
7868  * @param m map to change the color of.
7869  * @param r red (0 - 255)
7870  * @param g green (0 - 255)
7871  * @param b blue (0 - 255)
7872  * @param a alpha (0 - 255)
7873  *
7874  * @see evas_map_point_color_set()
7875  */
7876 EAPI void            evas_map_util_points_color_set(Evas_Map *m, int r, int g, int b, int a);
7877 
7878 /**
7879  * Change the map to apply the given rotation.
7880  *
7881  * This rotates the indicated map's coordinates around the center coordinate
7882  * given by @p cx and @p cy as the rotation center. The points will have their
7883  * X and Y coordinates rotated clockwise by @p degrees degrees (360.0 is a
7884  * full rotation). Negative values for degrees will rotate counter-clockwise
7885  * by that amount. All coordinates are canvas global coordinates.
7886  *
7887  * @param m map to change.
7888  * @param degrees amount of degrees from 0.0 to 360.0 to rotate.
7889  * @param cx rotation's center horizontal position.
7890  * @param cy rotation's center vertical position.
7891  *
7892  * @see evas_map_point_coord_set()
7893  * @see evas_map_util_zoom()
7894  */
7895 EAPI void            evas_map_util_rotate(Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy);
7896 
7897 /**
7898  * Change the map to apply the given zooming.
7899  *
7900  * Like evas_map_util_rotate(), this zooms the points of the map from a center
7901  * point. That center is defined by @p cx and @p cy. The @p zoomx and @p zoomy
7902  * parameters specify how much to zoom in the X and Y direction respectively.
7903  * A value of 1.0 means "don't zoom". 2.0 means "double the size". 0.5 is
7904  * "half the size" etc. All coordinates are canvas global coordinates.
7905  *
7906  * @param m map to change.
7907  * @param zoomx horizontal zoom to use.
7908  * @param zoomy vertical zoom to use.
7909  * @param cx zooming center horizontal position.
7910  * @param cy zooming center vertical position.
7911  *
7912  * @see evas_map_point_coord_set()
7913  * @see evas_map_util_rotate()
7914  */
7915 EAPI void            evas_map_util_zoom(Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy);
7916 
7917 /**
7918  * Rotate the map around 3 axes in 3D
7919  *
7920  * This will rotate not just around the "Z" axis as in evas_map_util_rotate()
7921  * (which is a convenience call for those only wanting 2D). This will rotate
7922  * around the X, Y and Z axes. The Z axis points "into" the screen with low
7923  * values at the screen and higher values further away. The X axis runs from
7924  * left to right on the screen and the Y axis from top to bottom. Like with
7925  * evas_map_util_rotate() you provide a center point to rotate around (in 3D).
7926  *
7927  * @param m map to change.
7928  * @param dx amount of degrees from 0.0 to 360.0 to rotate around X axis.
7929  * @param dy amount of degrees from 0.0 to 360.0 to rotate around Y axis.
7930  * @param dz amount of degrees from 0.0 to 360.0 to rotate around Z axis.
7931  * @param cx rotation's center horizontal position.
7932  * @param cy rotation's center vertical position.
7933  * @param cz rotation's center vertical position.
7934  */
7935 EAPI void            evas_map_util_3d_rotate(Evas_Map *m, double dx, double dy, double dz, Evas_Coord cx, Evas_Coord cy, Evas_Coord cz);
7936 
7937 /**
7938  * Rotate the map in 3D using a unit quaternion.
7939  *
7940  * This will rotate in 3D using a unit quaternion. Like with
7941  * evas_map_util_3d_rotate() you provide a center point
7942  * to rotate around (in 3D).
7943  *
7944  * @param m map to change.
7945  * @param qx the x component of the imaginary part of the quaternion.
7946  * @param qy the y component of the imaginary part of the quaternion.
7947  * @param qz the z component of the imaginary part of the quaternion.
7948  * @param qw the w component of the real part of the quaternion.
7949  * @param cx rotation's center x.
7950  * @param cy rotation's center y.
7951  * @param cz rotation's center z.
7952  *
7953  * @warning Rotations can be done using a unit quaternion. Thus, this
7954  * function expects a unit quaternion (i.e. qx² + qy² + qz² + qw² == 1).
7955  * If this is not the case the behavior is undefined.
7956  *
7957  * @since 1.8
7958  */
7959 EAPI void            evas_map_util_quat_rotate(Evas_Map *m, double qx, double qy, double qz, double qw, double cx, double cy, double cz);
7960 
7961 /**
7962  * Perform lighting calculations on the given Map
7963  *
7964  * This is used to apply lighting calculations (from a single light source)
7965  * to a given map. The R, G and B values of each vertex will be modified to
7966  * reflect the lighting based on the light point coordinates, the light
7967  * color and the ambient color, and at what angle the map is facing the
7968  * light source. A surface should have its points be declared in a
7969  * clockwise fashion if the face is "facing" towards you (as opposed to
7970  * away from you) as faces have a "logical" side for lighting.
7971  *
7972  * @image html map-light3.png
7973  * @image rtf map-light3.png
7974  * @image latex map-light3.eps
7975  * @note Grey object, no lighting used
7976  *
7977  * @image html map-light4.png
7978  * @image rtf map-light4.png
7979  * @image latex map-light4.eps
7980  * @note Lights out! Every color set to 0
7981  *
7982  * @image html map-light5.png
7983  * @image rtf map-light5.png
7984  * @image latex map-light5.eps
7985  * @note Ambient light to full black, red light coming from close at the
7986  * bottom-left vertex
7987  *
7988  * @image html map-light6.png
7989  * @image rtf map-light6.png
7990  * @image latex map-light6.eps
7991  * @note Same light as before, but not the light is set to 0 and ambient light
7992  * is cyan
7993  *
7994  * @image html map-light7.png
7995  * @image rtf map-light7.png
7996  * @image latex map-light7.eps
7997  * @note Both lights are on
7998  *
7999  * @image html map-light8.png
8000  * @image rtf map-light8.png
8001  * @image latex map-light8.eps
8002  * @note Both lights again, but this time both are the same color.
8003  *
8004  * @param m map to change.
8005  * @param lx X coordinate in space of light point
8006  * @param ly Y coordinate in space of light point
8007  * @param lz Z coordinate in space of light point
8008  * @param lr light red value (0 - 255)
8009  * @param lg light green value (0 - 255)
8010  * @param lb light blue value (0 - 255)
8011  * @param ar ambient color red value (0 - 255)
8012  * @param ag ambient color green value (0 - 255)
8013  * @param ab ambient color blue value (0 - 255)
8014  */
8015 EAPI void            evas_map_util_3d_lighting(Evas_Map *m, Evas_Coord lx, Evas_Coord ly, Evas_Coord lz, int lr, int lg, int lb, int ar, int ag, int ab);
8016 
8017 /**
8018  * Apply a perspective transform to the map
8019  *
8020  * This applies a given perspective (3D) to the map coordinates. X, Y and Z
8021  * values are used. The px and py points specify the "infinite distance" point
8022  * in the 3D conversion (where all lines converge to like when artists draw
8023  * 3D by hand). The @p z0 value specifies the z value at which there is a 1:1
8024  * mapping between spatial coordinates and screen coordinates. Any points
8025  * on this z value will not have their X and Y values modified in the transform.
8026  * Those further away (Z value higher) will shrink into the distance, and
8027  * those less than this value will expand and become bigger. The @p foc value
8028  * determines the "focal length" of the camera. This is in reality the distance
8029  * between the camera lens plane itself (at or closer than this rendering
8030  * results are undefined) and the "z0" z value. This allows for some "depth"
8031  * control and @p foc must be greater than 0.
8032  *
8033  * @param m map to change.
8034  * @param px The perspective distance X coordinate
8035  * @param py The perspective distance Y coordinate
8036  * @param z0 The "0" z plane value
8037  * @param foc The focal distance
8038  */
8039 EAPI void            evas_map_util_3d_perspective(Evas_Map *m, Evas_Coord px, Evas_Coord py, Evas_Coord z0, Evas_Coord foc);
8040 
8041 /**
8042  * Get the clockwise state of a map
8043  *
8044  * This determines if the output points (X and Y. Z is not used) are
8045  * clockwise or counter-clockwise. This can be used for "back-face culling". This
8046  * is where you hide objects that "face away" from you. In this case objects
8047  * that are not clockwise.
8048  *
8049  * @param m map to query.
8050  * @return 1 if clockwise, 0 otherwise
8051  */
8052 EAPI Eina_Bool       evas_map_util_clockwise_get(Evas_Map *m);
8053 
8054 /**
8055  * Create map of transformation points to be later used with an Evas object.
8056  *
8057  * This creates a set of points (currently only 4 is supported. no other
8058  * number for @p count will work). That is empty and ready to be modified
8059  * with evas_map calls.
8060  *
8061  * @param count number of points in the map.
8062  * @return a newly allocated map or @c NULL on errors.
8063  *
8064  * @see evas_map_free()
8065  * @see evas_map_dup()
8066  * @see evas_map_point_coord_set()
8067  * @see evas_map_point_image_uv_set()
8068  * @see evas_map_util_points_populate_from_object_full()
8069  * @see evas_map_util_points_populate_from_object()
8070  *
8071  * @see evas_object_map_set()
8072  */
8073 EAPI Evas_Map       *evas_map_new(int count);
8074 
8075 /**
8076  * Set the smoothing for map rendering
8077  *
8078  * This sets smoothing for map rendering. If the object is a type that has
8079  * its own smoothing settings, then both the smooth settings for this object
8080  * and the map must be turned off. By default smooth maps are enabled.
8081  *
8082  * @param m map to modify. Must not be NULL.
8083  * @param enabled enable or disable smooth map rendering
8084  */
8085 EAPI void            evas_map_smooth_set(Evas_Map *m, Eina_Bool enabled);
8086 
8087 /**
8088  * Get the smoothing for map rendering
8089  *
8090  * This gets smoothing for map rendering.
8091  *
8092  * @param m map to get the smooth from. Must not be NULL.
8093  * @return @c EINA_TRUE if the smooth is enabled, @c EINA_FALSE otherwise.
8094  */
8095 EAPI Eina_Bool       evas_map_smooth_get(const Evas_Map *m);
8096 
8097 /**
8098  * Set the alpha flag for map rendering
8099  *
8100  * This sets alpha flag for map rendering. If the object is a type that has
8101  * its own alpha settings, then this will take precedence. Only image objects
8102  * have this currently.
8103  * Setting this off stops alpha blending of the map area, and is
8104  * useful if you know the object and/or all sub-objects is 100% solid.
8105  *
8106  * @param m map to modify. Must not be NULL.
8107  * @param enabled enable or disable alpha map rendering
8108  */
8109 EAPI void            evas_map_alpha_set(Evas_Map *m, Eina_Bool enabled);
8110 
8111 /**
8112  * Get the alpha flag for map rendering
8113  *
8114  * This gets the alpha flag for map rendering.
8115  *
8116  * @param m map to get the alpha from. Must not be NULL.
8117  * @return EINA_FALSE if map is NULL EINA_TRUE otherwise.
8118  */
8119 EAPI Eina_Bool       evas_map_alpha_get(const Evas_Map *m);
8120 
8121 /**
8122  * Set the flag of the object move synchronization for map rendering
8123  *
8124  * This sets the flag of the object move synchronization for map rendering.
8125  * If the flag is set as enabled, the map will be moved as the object of the map
8126  * is moved. By default, the flag of the object move synchronization is not
8127  * enabled.
8128  *
8129  * @param m map to modify. Must not be NULL.
8130  * @param enabled enable or disable the object move synchronization for map
8131  *        rendering.
8132  * @since 1.13
8133  */
8134 EAPI void            evas_map_util_object_move_sync_set(Evas_Map *m, Eina_Bool enabled);
8135 
8136 /**
8137  * Get the flag of the object move synchronization for map rendering
8138  *
8139  * This gets the flag of the object move synchronization for map rendering.
8140  *
8141  * @param m map to get the flag of the object move synchronization from. Must
8142  * not be NULL.
8143  * @return EINA_FALSE if map is NULL EINA_TRUE otherwise.
8144  * @since 1.13
8145  */
8146 EAPI Eina_Bool       evas_map_util_object_move_sync_get(const Evas_Map *m);
8147 
8148 /**
8149  * Copy a previously allocated map.
8150  *
8151  * This makes a duplicate of the @p m object and returns it.
8152  *
8153  * @param m map to copy. Must not be NULL.
8154  * @return newly allocated map with the same count and contents as @p m.
8155  */
8156 EAPI Evas_Map       *evas_map_dup(const Evas_Map *m);
8157 
8158 /**
8159  * Free a previously allocated map.
8160  *
8161  * This frees a given map @p m and all memory associated with it. You must NOT
8162  * free a map returned by evas_object_map_get() as this is internal.
8163  *
8164  * @param m map to free.
8165  */
8166 EAPI void            evas_map_free(Evas_Map *m);
8167 
8168 /**
8169  * Get a maps size.
8170  *
8171  * Returns the number of points in a map.  Should be at least 4.
8172  *
8173  * @param m map to get size.
8174  * @return -1 on error, points otherwise.
8175  */
8176 EAPI int             evas_map_count_get(const Evas_Map *m) EINA_CONST;
8177 
8178 /**
8179  * Apply a map transformation on given coordinate
8180  *
8181  * @param m map to use to transform x and y
8182  * @param x point x source coordinate
8183  * @param y point y source coordinate
8184  * @param mx point x after transformation by m
8185  * @param my point y after transformation by m
8186  * @param grab
8187  * @return #EINA_TRUE on success interpolation, #EINA_FALSE otherwise
8188  * @since 1.20
8189  */
8190 EAPI Eina_Bool       evas_map_coords_get(const Evas_Map *m, double x, double y,
8191                                          double *mx, double *my, int grab);
8192 
8193 /**
8194  * Change the map point's coordinate.
8195  *
8196  * This sets the fixed point's coordinate in the map. Note that points
8197  * describe the outline of a quadrangle and are ordered either clockwise
8198  * or counter-clockwise. It is suggested to keep your quadrangles concave and
8199  * non-complex, though these polygon modes may work, they may not render
8200  * a desired set of output. The quadrangle will use points 0 and 1 , 1 and 2,
8201  * 2 and 3, and 3 and 0 to describe the edges of the quadrangle.
8202  *
8203  * The X and Y and Z coordinates are in canvas units. Z is optional and may
8204  * or may not be honored in drawing. Z is a hint and does not affect the
8205  * X and Y rendered coordinates. It may be used for calculating fills with
8206  * perspective correct rendering.
8207  *
8208  * Remember all coordinates are canvas global ones like with move and resize
8209  * in evas.
8210  *
8211  * @param m map to change point. Must not be @c NULL.
8212  * @param idx index of point to change. Must be smaller than map size.
8213  * @param x Point X Coordinate
8214  * @param y Point Y Coordinate
8215  * @param z Point Z Coordinate hint (pre-perspective transform)
8216  *
8217  * @see evas_map_util_rotate()
8218  * @see evas_map_util_zoom()
8219  * @see evas_map_util_points_populate_from_object_full()
8220  * @see evas_map_util_points_populate_from_object()
8221  */
8222 EAPI void            evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x, Evas_Coord y, Evas_Coord z);
8223 
8224 /**
8225  * Get the map point's coordinate.
8226  *
8227  * This returns the coordinates of the given point in the map.
8228  *
8229  * @param m map to query point.
8230  * @param idx index of point to query. Must be smaller than map size.
8231  * @param x where to return the X coordinate.
8232  * @param y where to return the Y coordinate.
8233  * @param z where to return the Z coordinate.
8234  */
8235 EAPI void            evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z);
8236 
8237 /**
8238  * Change the map point's U and V texture source point
8239  *
8240  * This sets the U and V coordinates for the point. This determines which
8241  * coordinate in the source image is mapped to the given point, much like
8242  * OpenGL and textures. Notes that these points do select the pixel, but
8243  * are double floating point values to allow for accuracy and sub-pixel
8244  * selection.
8245  *
8246  * @param m map to change the point of.
8247  * @param idx index of point to change. Must be smaller than map size.
8248  * @param u the X coordinate within the image/texture source
8249  * @param v the Y coordinate within the image/texture source
8250  *
8251  * @see evas_map_point_coord_set()
8252  * @see evas_object_map_set()
8253  * @see evas_map_util_points_populate_from_object_full()
8254  * @see evas_map_util_points_populate_from_object()
8255  */
8256 EAPI void            evas_map_point_image_uv_set(Evas_Map *m, int idx, double u, double v);
8257 
8258 /**
8259  * Get the map point's U and V texture source points
8260  *
8261  * This returns the texture points set by evas_map_point_image_uv_set().
8262  *
8263  * @param m map to query point.
8264  * @param idx index of point to query. Must be smaller than map size.
8265  * @param u where to write the X coordinate within the image/texture source
8266  * @param v where to write the Y coordinate within the image/texture source
8267  */
8268 EAPI void            evas_map_point_image_uv_get(const Evas_Map *m, int idx, double *u, double *v);
8269 
8270 /**
8271  * Set the color of a vertex in the map
8272  *
8273  * This sets the color of the vertex in the map. Colors will be linearly
8274  * interpolated between vertex points through the map. Color will multiply
8275  * the "texture" pixels (like GL_MODULATE in OpenGL). The default color of
8276  * a vertex in a map is white solid (255, 255, 255, 255) which means it will
8277  * have no affect on modifying the texture pixels.
8278  *
8279  * @param m map to change the color of.
8280  * @param idx index of point to change. Must be smaller than map size.
8281  * @param r red (0 - 255)
8282  * @param g green (0 - 255)
8283  * @param b blue (0 - 255)
8284  * @param a alpha (0 - 255)
8285  *
8286  * @see evas_map_util_points_color_set()
8287  * @see evas_map_point_coord_set()
8288  * @see evas_object_map_set()
8289  */
8290 EAPI void            evas_map_point_color_set(Evas_Map *m, int idx, int r, int g, int b, int a);
8291 
8292 /**
8293  * Get the color set on a vertex in the map
8294  *
8295  * This gets the color set by evas_map_point_color_set() on the given vertex
8296  * of the map.
8297  *
8298  * @param m map to get the color of the vertex from.
8299  * @param idx index of point get. Must be smaller than map size.
8300  * @param r pointer to red return
8301  * @param g pointer to green return
8302  * @param b pointer to blue return
8303  * @param a pointer to alpha return
8304  *
8305  * @see evas_map_point_coord_set()
8306  * @see evas_object_map_set()
8307  */
8308 EAPI void            evas_map_point_color_get(const Evas_Map *m, int idx, int *r, int *g, int *b, int *a);
8309 /**
8310  * @}
8311  */
8312 
8313 /**
8314  * @brief Set current object transformation map.
8315  *
8316  * This sets the map on a given object. It is copied from the @c map pointer,
8317  * so there is no need to keep the @c map object if you don't need it anymore.
8318  *
8319  * A map is a set of 4 points which have canvas x, y coordinates per point,
8320  * with an optional z point value as a hint for perspective correction, if it
8321  * is available. As well each point has u and v coordinates. These are like
8322  * "texture coordinates" in OpenGL in that they define a point in the source
8323  * image that is mapped to that map vertex/point. The u corresponds to the x
8324  * coordinate of this mapped point and v, the y coordinate. Note that these
8325  * coordinates describe a bounding region to sample.
8326  *
8327  * @note The map points a uv coordinates match the image geometry. If the
8328  * @c map parameter is @c null, the stored map will be freed and geometry prior
8329  * to enabling/setting a map will be restored.
8330  *
8331  * @param[in] map The map.
8332  *
8333  * @ingroup Evas_Object_Group
8334  */
8335 EAPI void evas_object_map_set(Evas_Object *obj, const Evas_Map *map);
8336 
8337 /**
8338  * @brief Get current object transformation map.
8339  *
8340  * This returns the current internal map set on the indicated object. It is
8341  * intended for read-only access and is only valid as long as the object is not
8342  * deleted or the map on the object is not changed.
8343  *
8344  * @return The map.
8345  *
8346  * @ingroup Evas_Object_Group
8347  */
8348 EAPI const Evas_Map *evas_object_map_get(const Evas_Object *obj);
8349 
8350 /**
8351  * @brief Enable or disable the map that is set.
8352  *
8353  * Enable or disable the use of map for the object @c obj. On enable, the
8354  * object geometry will be saved, and the new geometry will change (position
8355  * and size) to reflect the map geometry set.
8356  *
8357  * If the object doesn't have a map set (with @ref evas_object_map_set), the
8358  * initial geometry will be undefined. It is advised to always set a map to the
8359  * object first, and then call this function to enable its use.
8360  *
8361  * @param[in] enabled Enabled state.
8362  *
8363  * @ingroup Evas_Object_Group
8364  */
8365 EAPI void evas_object_map_enable_set(Evas_Object *obj, Eina_Bool enabled);
8366 
8367 /**
8368  * @brief Whether the map is enabled or not
8369  *
8370  * @param[in] obj The evas object
8371  *
8372  * @return The value of @c enabled as passed to evas_object_map_enable_set().
8373  *
8374  * @see evas_object_map_enable_set
8375  * @ingroup Evas_Object_Group
8376  */
8377 EAPI Eina_Bool evas_object_map_enable_get(const Evas_Object *obj);
8378 
8379 /**
8380  * @brief Apply an evas filter program on this text object.
8381  *
8382  * Note: the preferred method for filters is to edit EDC styles, rather than
8383  * calling this API directly.
8384  *
8385  * @since 1.18
8386  */
8387 EAPI void evas_object_text_filter_program_set(Evas_Object *obj, const char *code) EINA_DEPRECATED;
8388 
8389 /**
8390  * @brief Set a named source object for an evas filter program.
8391  *
8392  * Note: the preferred method for filters is to edit EDC styles, rather than
8393  * calling this API directly.
8394  * @since 1.18
8395  */
8396 EAPI void evas_object_text_filter_source_set(Evas_Object *obj, const char *name, Evas_Object *source) EINA_DEPRECATED;
8397 
8398 /**
8399  * Creates a new smart rectangle object on the given Evas @p e canvas.
8400  *
8401  * @param e The given canvas.
8402  * @return The created object handle.
8403  *
8404  * This provides a smart version of the typical "event rectangle",
8405  * which allows objects to set this as their parent and route events
8406  * to a group of objects. Events will not propagate to non-member objects
8407  * below this object.
8408  *
8409  * Adding members is done just like a normal smart object, using
8410  * efl_canvas_group_member_add (Eo API) or evas_object_smart_member_add (legacy).
8411  *
8412  * Child objects are not modified in any way, unlike other types of smart objects.
8413  *
8414  * It is a user error for any child objects to be stacked above the event
8415  * grabber parent while the event grabber is visible.
8416  * A critical error will be raised if this is detected at any point.
8417  *
8418  * @since 1.20
8419  */
8420 EAPI Evas_Object *evas_object_event_grabber_add(Evas *e);
8421 
8422 /**
8423  * @brief If @c true the object belongs to the window border decorations.
8424  *
8425  * This will be @c false by default, and should be @c false for all objects
8426  * created by the application, unless swallowed in some very specific parts of
8427  * the window.
8428  *
8429  * It is very unlikely that an application needs to call this manually, as the
8430  * window will handle this feature automatically.
8431  *
8432  * @param[in] obj The object.
8433  * @param[in] is_frame @c true if the object is a frame, @c false otherwise
8434  *
8435  * @since 1.2
8436  *
8437  * @ingroup Evas_Object_Group
8438  */
8439 EAPI void evas_object_is_frame_object_set(Efl_Canvas_Object *obj, Eina_Bool is_frame);
8440 
8441 /**
8442  * @brief If @c true the object belongs to the window border decorations.
8443  *
8444  * This will be @c false by default, and should be @c false for all objects
8445  * created by the application, unless swallowed in some very specific parts of
8446  * the window.
8447  *
8448  * It is very unlikely that an application needs to call this manually, as the
8449  * window will handle this feature automatically.
8450  *
8451  * @param[in] obj The object.
8452  *
8453  * @return @c true if the object is a frame, @c false otherwise
8454  *
8455  * @since 1.2
8456  *
8457  * @ingroup Evas_Object_Group
8458  */
8459 EAPI Eina_Bool evas_object_is_frame_object_get(const Efl_Canvas_Object *obj);
8460 
8461 /**
8462  * @brief Set whether an Evas object is to freeze (discard) events.
8463  *
8464  * If @c freeze is @c true, it will force events on @c obj to be discarded.
8465  * Unlike @ref evas_object_pass_events_set, events will not be passed to next
8466  * lower object. This API can be used for blocking events while @c obj is in
8467  * transition.
8468  *
8469  * If @c freeze is @c false, events will be processed on that object as normal.
8470  *
8471  * @warning If you block only key/mouse up events with this API, you can't be
8472  * sure of the state of any objects that have only key/mouse down events.
8473  *
8474  * @param[in] obj The object.
8475  * @param[in] freeze Pass when @c obj is to freeze events ($true) or not
8476  * ($false).
8477  *
8478  * @since 1.1
8479  *
8480  * @ingroup Evas_Object_Group
8481  */
8482 EAPI void evas_object_freeze_events_set(Efl_Canvas_Object *obj, Eina_Bool freeze);
8483 
8484 /**
8485  * @brief Determine whether an object is set to freeze (discard) events.
8486  *
8487  * @param[in] obj The object.
8488  *
8489  * @return Pass when @c obj is to freeze events ($true) or not ($false).
8490  *
8491  * @since 1.1
8492  *
8493  * @ingroup Evas_Object_Group
8494  */
8495 EAPI Eina_Bool evas_object_freeze_events_get(const Efl_Canvas_Object *obj);
8496 
8497 #include "canvas/efl_canvas_event_grabber_eo.legacy.h"
8498