big patch from Samsung SAIT (Advanced research group) for async multi-frame
[framework/uifw/evas.git] / src / lib / Evas.h
1 #ifndef _EVAS_H
2 #define _EVAS_H
3
4 #include <time.h>
5
6 #include <Eina.h>
7
8 #ifdef EAPI
9 # undef EAPI
10 #endif
11
12 #ifdef _WIN32
13 # ifdef EFL_EVAS_BUILD
14 #  ifdef DLL_EXPORT
15 #   define EAPI __declspec(dllexport)
16 #  else
17 #   define EAPI
18 #  endif /* ! DLL_EXPORT */
19 # else
20 #  define EAPI __declspec(dllimport)
21 # endif /* ! EFL_EVAS_BUILD */
22 #else
23 # ifdef __GNUC__
24 #  if __GNUC__ >= 4
25 #   define EAPI __attribute__ ((visibility("default")))
26 #  else
27 #   define EAPI
28 #  endif
29 # else
30 #  define EAPI
31 # endif
32 #endif /* ! _WIN32 */
33
34
35 /**
36  * @file
37  * @brief These routines are used for Evas library interaction.
38  *
39  * @todo check boolean return values and convert to Eina_Bool
40  * @todo change all api to use EINA_SAFETY_*
41  * @todo finish api documentation
42  */
43
44
45 /**
46  * Identifier of callbacks to be used with object or canvas.
47  *
48  * @see evas_object_event_callback_add()
49  * @see evas_event_callback_add()
50  */
51 typedef enum _Evas_Callback_Type
52 {
53    /*
54     * The following events are only for use with objects
55     * evas_object_event_callback_add():
56     */
57    EVAS_CALLBACK_MOUSE_IN, /**< Mouse In Event */
58    EVAS_CALLBACK_MOUSE_OUT, /**< Mouse Out Event */
59    EVAS_CALLBACK_MOUSE_DOWN, /**< Mouse Button Down Event */
60    EVAS_CALLBACK_MOUSE_UP, /**< Mouse Button Up Event */
61    EVAS_CALLBACK_MOUSE_MOVE, /**< Mouse Move Event */
62    EVAS_CALLBACK_MOUSE_WHEEL, /**< Mouse Wheel Event */
63    EVAS_CALLBACK_MULTI_DOWN, /**< Multi-touch Down Event */
64    EVAS_CALLBACK_MULTI_UP, /**< Multi-touch Up Event */
65    EVAS_CALLBACK_MULTI_MOVE, /**< Multi-touch Move Event */
66    EVAS_CALLBACK_FREE, /**< Object Being Freed (Called after Del) */
67    EVAS_CALLBACK_KEY_DOWN, /**< Key Press Event */
68    EVAS_CALLBACK_KEY_UP, /**< Key Release Event */
69    EVAS_CALLBACK_FOCUS_IN, /**< Focus In Event */
70    EVAS_CALLBACK_FOCUS_OUT, /**< Focus Out Event */
71    EVAS_CALLBACK_SHOW, /**< Show Event */
72    EVAS_CALLBACK_HIDE, /**< Hide Event */
73    EVAS_CALLBACK_MOVE, /**< Move Event */
74    EVAS_CALLBACK_RESIZE, /**< Resize Event */
75    EVAS_CALLBACK_RESTACK, /**< Restack Event */
76    EVAS_CALLBACK_DEL, /**< Object Being Deleted (called before Free) */
77    EVAS_CALLBACK_HOLD, /**< Events go on/off hold */
78    EVAS_CALLBACK_CHANGED_SIZE_HINTS, /**< Size hints changed event */
79    EVAS_CALLBACK_IMAGE_PRELOADED, /**< Image as been preloaded */
80
81
82    /*
83     * The following events are only for use with canvas
84     * evas_event_callback_add():
85     */
86
87    EVAS_CALLBACK_CANVAS_FOCUS_IN, /**< Canvas got focus as a whole */
88    EVAS_CALLBACK_CANVAS_FOCUS_OUT, /**< Canvas lost focus as a whole */
89    EVAS_CALLBACK_RENDER_FLUSH_PRE, /**< Called just before rendering is updated on the canvas target */
90    EVAS_CALLBACK_RENDER_FLUSH_POST, /**< Called just after rendering is updated on the canvas target */
91
92
93
94    /* the following id no event number, but a sentinel: */
95    EVAS_CALLBACK_LAST /**< keep as last element/sentinel -- not really an event */
96 } Evas_Callback_Type; /**< The type of event to trigger the callback */
97
98 /**
99  * Flags for Mouse Button events
100  */
101 typedef enum _Evas_Button_Flags
102 {
103    EVAS_BUTTON_NONE = 0, /**< No extra mouse button data */
104    EVAS_BUTTON_DOUBLE_CLICK = (1 << 0), /**< This mouse button press was the 2nd press of a double click */
105    EVAS_BUTTON_TRIPLE_CLICK = (1 << 1) /**< This mouse button press was the 3rd press of a triple click */
106 } Evas_Button_Flags; /**< Flags for Mouse Button events */
107
108 /**
109  * Flags for Events
110  */
111 typedef enum _Evas_Event_Flags
112 {
113    EVAS_EVENT_FLAG_NONE = 0, /**< No fancy flags set */
114    EVAS_EVENT_FLAG_ON_HOLD = (1 << 0) /**< This event is being delivered but should be put "on hold" until the on hold flag is unset. the event should be used for informational purposes and maybe some indications visually, but not actually perform anything */
115 } Evas_Event_Flags; /**< Flags for Events */
116
117 /**
118  * Flags for Font Hinting
119  * @ingroup Evas_Font_Group
120  */
121 typedef enum _Evas_Font_Hinting_Flags
122 {
123    EVAS_FONT_HINTING_NONE, /**< No font hinting */
124    EVAS_FONT_HINTING_AUTO, /**< Automatic font hinting */
125    EVAS_FONT_HINTING_BYTECODE /**< Bytecode font hinting */
126 } Evas_Font_Hinting_Flags; /**< Flags for Font Hinting */
127
128 /**
129  * Colorspaces for pixel data supported by Evas
130  * @ingroup Evas_Object_Image
131  */
132 typedef enum _Evas_Colorspace
133 {
134    EVAS_COLORSPACE_ARGB8888, /**< ARGB 32 bits per pixel, high-byte is Alpha, accessed 1 32bit word at a time */
135      /* these are not currently supported - but planned for the future */
136    EVAS_COLORSPACE_YCBCR422P601_PL, /**< YCbCr 4:2:2 Planar, ITU.BT-601 specifications. The data poitned to is just an array of row pointer, pointing to the Y rows, then the Cb, then Cr rows */
137    EVAS_COLORSPACE_YCBCR422P709_PL,/**< YCbCr 4:2:2 Planar, ITU.BT-709 specifications. The data poitned to is just an array of row pointer, pointing to the Y rows, then the Cb, then Cr rows */
138    EVAS_COLORSPACE_RGB565_A5P /**< 16bit rgb565 + Alpha plane at end - 5 bits of the 8 being used per alpha byte */
139 } Evas_Colorspace; /**< Colorspaces for pixel data supported by Evas */
140
141 /**
142  * How to pack items into cells in a table.
143  * @ingroup Evas_Object_Table
144  */
145 typedef enum _Evas_Object_Table_Homogeneous_Mode
146 {
147   EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE = 0,
148   EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE = 1,
149   EVAS_OBJECT_TABLE_HOMOGENEOUS_ITEM = 2
150 } Evas_Object_Table_Homogeneous_Mode; /**< Table cell pack mode. */
151
152 typedef struct _Evas_Transform Evas_Transform; /**< An Evas projective or affine transform */
153 typedef struct _Evas_Coord_Rectangle  Evas_Coord_Rectangle; /**< A generic rectangle handle */
154 typedef struct _Evas_Point                   Evas_Point; /**< integer point */
155
156 typedef struct _Evas_Coord_Point             Evas_Coord_Point;  /**< Evas_Coord point */
157 typedef struct _Evas_Coord_Precision_Point   Evas_Coord_Precision_Point; /**< Evas_Coord point with sub-pixel precision */
158
159 typedef struct _Evas_Position                Evas_Position; /**< associates given point in Canvas and Output */
160 typedef struct _Evas_Precision_Position      Evas_Precision_Position; /**< associates given point in Canvas and Output, with sub-pixel precision */
161
162 /**
163  * @typedef Evas_Smart_Class
164  * A smart object base class
165  * @ingroup Evas_Smart_Group
166  */
167 typedef struct _Evas_Smart_Class             Evas_Smart_Class;
168
169 /**
170  * @typedef Evas_Smart_Cb_Description
171  * A smart object callback description, used to provide introspection
172  * @ingroup Evas_Smart_Group
173  */
174 typedef struct _Evas_Smart_Cb_Description    Evas_Smart_Cb_Description;
175
176 /**
177  * @typedef Evas_Map
178  * An opaque handle to map points
179  * @see evas_map_new()
180  * @see evas_map_free()
181  * @see evas_map_dup()
182  * @ingroup Evas_Object_Group_Map
183  */
184 typedef struct _Evas_Map              Evas_Map;
185
186 /**
187  * @typedef Evas
188  * An Evas canvas handle.
189  * @see evas_new()
190  * @see evas_free()
191  * @ingroup Evas_Canvas
192  */
193 typedef struct _Evas Evas;
194
195 /**
196  * @typedef Evas_Object
197  * An Evas Object handle.
198  * @ingroup Evas_Object_Group
199  */
200 typedef struct _Evas_Object Evas_Object;
201
202 typedef void Evas_Performance; /**< An Evas Performance handle */
203 typedef struct _Evas_Modifier Evas_Modifier; /**< An Evas Modifier */
204 typedef struct _Evas_Lock Evas_Lock; /**< An Evas Lock */
205 typedef struct _Evas_Smart Evas_Smart; /**< An Evas Smart Object handle */
206 typedef struct _Evas_Native_Surface Evas_Native_Surface; /**< A generic datatype for engine specific native surface information */
207 typedef unsigned long long Evas_Modifier_Mask; /**< An Evas modifier mask type */
208
209 typedef int           Evas_Coord;
210 typedef int           Evas_Font_Size;
211 typedef int           Evas_Angle;
212
213 struct _Evas_Transform /** An affine or projective coordinate transformation matrix */
214 {
215    float mxx, mxy, mxz;
216    float myx, myy, myz;
217    float mzx, mzy, mzz;
218 };
219
220 struct _Evas_Coord_Rectangle /**< A rectangle in Evas_Coord */
221 {
222    Evas_Coord x; /**< top-left x co-ordinate of rectangle */
223    Evas_Coord y; /**< top-left y co-ordinate of rectangle */
224    Evas_Coord w; /**< width of rectangle */
225    Evas_Coord h; /**< height of rectangle */
226 };
227
228 struct _Evas_Point
229 {
230    int x, y;
231 };
232
233 struct _Evas_Coord_Point
234 {
235    Evas_Coord x, y;
236 };
237
238 struct _Evas_Coord_Precision_Point
239 {
240    Evas_Coord x, y;
241    double xsub, ysub;
242 };
243
244 struct _Evas_Position
245 {
246     Evas_Point output;
247     Evas_Coord_Point canvas;
248 };
249
250 struct _Evas_Precision_Position
251 {
252     Evas_Point output;
253     Evas_Coord_Precision_Point canvas;
254 };
255
256 typedef enum _Evas_Aspect_Control
257 {
258    EVAS_ASPECT_CONTROL_NONE = 0,
259    EVAS_ASPECT_CONTROL_NEITHER = 1,
260    EVAS_ASPECT_CONTROL_HORIZONTAL = 2,
261    EVAS_ASPECT_CONTROL_VERTICAL = 3,
262    EVAS_ASPECT_CONTROL_BOTH = 4
263 } Evas_Aspect_Control;
264
265
266 typedef struct _Evas_Pixel_Import_Source Evas_Pixel_Import_Source; /**< A source description of pixels for importing pixels */
267 typedef struct _Evas_Engine_Info      Evas_Engine_Info; /**< A generic Evas Engine information structure */
268 typedef struct _Evas_Device           Evas_Device; /**< A source device handle - where the event came from */
269 typedef struct _Evas_Event_Mouse_Down Evas_Event_Mouse_Down; /**< Event structure for #EVAS_CALLBACK_MOUSE_DOWN event callbacks */
270 typedef struct _Evas_Event_Mouse_Up   Evas_Event_Mouse_Up; /**< Event structure for #EVAS_CALLBACK_MOUSE_UP event callbacks */
271 typedef struct _Evas_Event_Mouse_In   Evas_Event_Mouse_In; /**< Event structure for #EVAS_CALLBACK_MOUSE_IN event callbacks */
272 typedef struct _Evas_Event_Mouse_Out  Evas_Event_Mouse_Out; /**< Event structure for #EVAS_CALLBACK_MOUSE_OUT event callbacks */
273 typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move; /**< Event structure for #EVAS_CALLBACK_MOUSE_MOVE event callbacks */
274 typedef struct _Evas_Event_Mouse_Wheel Evas_Event_Mouse_Wheel; /**< Event structure for #EVAS_CALLBACK_MOUSE_WHEEL event callbacks */
275 typedef struct _Evas_Event_Multi_Down Evas_Event_Multi_Down; /**< Event structure for #EVAS_CALLBACK_MULTI_DOWN event callbacks */
276 typedef struct _Evas_Event_Multi_Up   Evas_Event_Multi_Up; /**< Event structure for #EVAS_CALLBACK_MULTI_UP event callbacks */
277 typedef struct _Evas_Event_Multi_Move Evas_Event_Multi_Move; /**< Event structure for #EVAS_CALLBACK_MULTI_MOVE event callbacks */
278 typedef struct _Evas_Event_Key_Down   Evas_Event_Key_Down; /**< Event structure for #EVAS_CALLBACK_KEY_DOWN event callbacks */
279 typedef struct _Evas_Event_Key_Up     Evas_Event_Key_Up; /**< Event structure for #EVAS_CALLBACK_KEY_UP event callbacks */
280 typedef struct _Evas_Event_Hold       Evas_Event_Hold; /**< Event structure for #EVAS_CALLBACK_HOLD event callbacks */
281
282 /* load error identifiers, see evas_load_error_str() */
283 #define EVAS_LOAD_ERROR_NONE                       0 /**< No error on load */
284 #define EVAS_LOAD_ERROR_GENERIC                    1 /**< A non-specific error occured */
285 #define EVAS_LOAD_ERROR_DOES_NOT_EXIST             2 /**< File (or file path) does not exist */
286 #define EVAS_LOAD_ERROR_PERMISSION_DENIED          3 /**< Permission deinied to an existing file (or path) */
287 #define EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED 4 /**< Allocation of resources failure prevented load */
288 #define EVAS_LOAD_ERROR_CORRUPT_FILE               5 /**< File corrupt (but was detected as a known format) */
289 #define EVAS_LOAD_ERROR_UNKNOWN_FORMAT             6 /**< File is not a known format */
290
291 #define EVAS_ALLOC_ERROR_NONE                      0 /**< No allocation error */
292 #define EVAS_ALLOC_ERROR_FATAL                     1 /**< Allocation failed despite attempts to free up memory */
293 #define EVAS_ALLOC_ERROR_RECOVERED                 2 /**< Allocation succeeded, but extra memory had to be found by freeing up speculative resources */
294
295 #define EVAS_TEXT_INVALID -1
296 #define EVAS_TEXT_SPECIAL -2
297
298 struct _Evas_Pixel_Import_Source
299 {
300    int format; /**< pixel format type ie ARGB32, YUV420P_601 etc. */
301    int w, h; /**< width and height of source in pixels */
302    void **rows; /**< an array of pointers (size depends on format) pointing to left edge of each scanline */
303 };
304
305 struct _Evas_Native_Surface
306 {
307    union {
308       struct {
309          void *visual;
310          long  pixmap;
311       } x11;
312       struct { /* padding data for future use - have space for 8 pointers */
313          void *d[8];
314       } padding;
315    } data;
316 };
317
318 #define EVAS_LAYER_MIN -32768 /**< bottom-most layer number */
319 #define EVAS_LAYER_MAX 32767  /**< top-most layer number */
320
321 #define EVAS_PIXEL_FORMAT_NONE                     0 /**< No pixel format */
322 #define EVAS_PIXEL_FORMAT_ARGB32                   1 /**< ARGB 32bit pixel format with A in the high byte per 32bit pixel word */
323 #define EVAS_PIXEL_FORMAT_YUV420P_601              2 /**< YUV 420 Planar format with CCIR 601 color encoding wuth contiguous planes in the order Y, U and V */
324
325 #define EVAS_COLOR_SPACE_ARGB                      0 /**< ARGB color space */
326 #define EVAS_COLOR_SPACE_AHSV                      1 /**< AHSV color space */
327
328 #define EVAS_TEXTURE_REFLECT            0 /**< Gradient and image fill tiling mode - tiling reflects */
329 #define EVAS_TEXTURE_REPEAT             1 /**< tiling repeats */
330 #define EVAS_TEXTURE_RESTRICT           2 /**< tiling clamps - range offset ignored */
331 #define EVAS_TEXTURE_RESTRICT_REFLECT   3 /**< tiling clamps and any range offset reflects */
332 #define EVAS_TEXTURE_RESTRICT_REPEAT    4 /**< tiling clamps and any range offset repeats */
333 #define EVAS_TEXTURE_PAD                5 /**< tiling extends with end values */
334
335 #define EVAS_HINT_EXPAND  1.0 /**< Use with evas_object_size_hint_weight_set(), evas_object_size_hint_weight_get(), evas_object_size_hint_expand_set(), evas_object_size_hint_expand_get() */
336 #define EVAS_HINT_FILL   -1.0 /**< Use with evas_object_size_hint_align_set(), evas_object_size_hint_align_get(), evas_object_size_hint_fill_set(), evas_object_size_hint_fill_get() */
337 #define evas_object_size_hint_fill_set evas_object_size_hint_align_set /**< Convenience macro to make it easier to understand that align is also used for fill properties (as fill is mutually exclusive to align) */
338 #define evas_object_size_hint_fill_get evas_object_size_hint_align_get /**< Convenience macro to make it easier to understand that align is also used for fill properties (as fill is mutually exclusive to align) */
339 #define evas_object_size_hint_expand_set evas_object_size_hint_weight_set /**< Convenience macro to make it easier to understand that weight is also used for expand properties */
340 #define evas_object_size_hint_expand_get evas_object_size_hint_weight_get /**< Convenience macro to make it easier to understand that weight is also used for expand properties */
341
342 /**
343  * How the object should be rendered to output.
344  * @ingroup Evas_Object_Group_Extras
345  */
346 typedef enum _Evas_Render_Op
347 {
348    EVAS_RENDER_BLEND = 0, /**< default op: d = d*(1-sa) + s */
349    EVAS_RENDER_BLEND_REL = 1, /**< d = d*(1 - sa) + s*da */
350    EVAS_RENDER_COPY = 2, /**< d = s */
351    EVAS_RENDER_COPY_REL = 3, /**< d = s*da */
352    EVAS_RENDER_ADD = 4, /**< d = d + s */
353    EVAS_RENDER_ADD_REL = 5, /**< d = d + s*da */
354    EVAS_RENDER_SUB = 6, /**< d = d - s */
355    EVAS_RENDER_SUB_REL = 7, /**< d = d - s*da */
356    EVAS_RENDER_TINT = 8, /**< d = d*s + d*(1 - sa) + s*(1 - da) */
357    EVAS_RENDER_TINT_REL = 9, /**< d = d*(1 - sa + s) */
358    EVAS_RENDER_MASK = 10, /**< d = d*sa */
359    EVAS_RENDER_MUL = 11 /**< d = d*s */
360 } Evas_Render_Op; /**< How the object should be rendered to output. */
361
362 typedef enum _Evas_Border_Fill_Mode
363 {
364    EVAS_BORDER_FILL_NONE = 0,
365    EVAS_BORDER_FILL_DEFAULT = 1,
366    EVAS_BORDER_FILL_SOLID = 2
367 } Evas_Border_Fill_Mode;
368
369 typedef enum _Evas_Image_Scale_Hint
370 {
371    EVAS_IMAGE_SCALE_HINT_NONE = 0,
372    EVAS_IMAGE_SCALE_HINT_DYNAMIC = 1,
373    EVAS_IMAGE_SCALE_HINT_STATIC = 2
374 } Evas_Image_Scale_Hint;
375
376 typedef enum _Evas_Engine_Render_Mode
377 {
378    EVAS_RENDER_MODE_BLOCKING = 0,
379    EVAS_RENDER_MODE_NONBLOCKING = 1,
380 } Evas_Engine_Render_Mode;
381
382 typedef enum _Evas_Image_Content_Hint
383 {
384    EVAS_IMAGE_CONTENT_HINT_NONE = 0,
385    EVAS_IMAGE_CONTENT_HINT_DYNAMIC = 1,
386    EVAS_IMAGE_CONTENT_HINT_STATIC = 2
387 } Evas_Image_Content_Hint;
388
389 struct _Evas_Engine_Info /** Generic engine information. Generic info is useless */
390 {
391    int magic; /**< Magic number */
392 };
393
394 struct _Evas_Event_Mouse_Down /** Mouse button press event */
395 {
396    int button; /**< Mouse button number that went down (1 - 32) */
397
398    Evas_Point output;
399    Evas_Coord_Point canvas;
400
401    void          *data;
402    Evas_Modifier *modifiers;
403    Evas_Lock     *locks;
404
405    Evas_Button_Flags flags;
406    unsigned int      timestamp;
407    Evas_Event_Flags  event_flags;
408    Evas_Device      *dev;
409 };
410
411 struct _Evas_Event_Mouse_Up /** Mouse button release event */
412 {
413    int button; /**< Mouse button number that was raised (1 - 32) */
414
415    Evas_Point output;
416    Evas_Coord_Point canvas;
417
418    void          *data;
419    Evas_Modifier *modifiers;
420    Evas_Lock     *locks;
421
422    Evas_Button_Flags flags;
423    unsigned int      timestamp;
424    Evas_Event_Flags  event_flags;
425    Evas_Device      *dev;
426 };
427
428 struct _Evas_Event_Mouse_In /** Mouse enter event */
429 {
430    int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
431
432    Evas_Point output;
433    Evas_Coord_Point canvas;
434
435    void          *data;
436    Evas_Modifier *modifiers;
437    Evas_Lock     *locks;
438    unsigned int   timestamp;
439    Evas_Event_Flags  event_flags;
440    Evas_Device      *dev;
441 };
442
443 struct _Evas_Event_Mouse_Out /** Mouse leave event */
444 {
445    int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
446
447
448    Evas_Point output;
449    Evas_Coord_Point canvas;
450
451    void          *data;
452    Evas_Modifier *modifiers;
453    Evas_Lock     *locks;
454    unsigned int   timestamp;
455    Evas_Event_Flags  event_flags;
456    Evas_Device      *dev;
457 };
458
459 struct _Evas_Event_Mouse_Move /** Mouse button down event */
460 {
461    int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
462
463    Evas_Position cur, prev;
464
465    void          *data;
466    Evas_Modifier *modifiers;
467    Evas_Lock     *locks;
468    unsigned int   timestamp;
469    Evas_Event_Flags  event_flags;
470    Evas_Device      *dev;
471 };
472
473 struct _Evas_Event_Mouse_Wheel /** Wheel event */
474 {
475    int direction; /* 0 = default up/down wheel FIXME: more wheel types */
476    int z; /* ...,-2,-1 = down, 1,2,... = up */
477
478    Evas_Point output;
479    Evas_Coord_Point canvas;
480
481    void          *data;
482    Evas_Modifier *modifiers;
483    Evas_Lock     *locks;
484    unsigned int   timestamp;
485    Evas_Event_Flags  event_flags;
486    Evas_Device      *dev;
487 };
488
489 struct _Evas_Event_Multi_Down /** Multi button press event */
490 {
491    int device; /**< Multi device number that went down (1 or more for extra touches) */
492    double radius, radius_x, radius_y;
493    double pressure, angle;
494
495    Evas_Point output;
496    Evas_Coord_Precision_Point canvas;
497
498    void          *data;
499    Evas_Modifier *modifiers;
500    Evas_Lock     *locks;
501
502    Evas_Button_Flags flags;
503    unsigned int      timestamp;
504    Evas_Event_Flags  event_flags;
505    Evas_Device      *dev;
506 };
507
508 struct _Evas_Event_Multi_Up /** Multi button release event */
509 {
510    int device; /**< Multi device number that went up (1 or more for extra touches) */
511    double radius, radius_x, radius_y;
512    double pressure, angle;
513
514    Evas_Point output;
515    Evas_Coord_Precision_Point canvas;
516
517    void          *data;
518    Evas_Modifier *modifiers;
519    Evas_Lock     *locks;
520
521    Evas_Button_Flags flags;
522    unsigned int      timestamp;
523    Evas_Event_Flags  event_flags;
524    Evas_Device      *dev;
525 };
526
527 struct _Evas_Event_Multi_Move /** Multi button down event */
528 {
529    int device; /**< Multi device number that moved (1 or more for extra touches) */
530    double radius, radius_x, radius_y;
531    double pressure, angle;
532
533    Evas_Precision_Position cur;
534
535    void          *data;
536    Evas_Modifier *modifiers;
537    Evas_Lock     *locks;
538    unsigned int   timestamp;
539    Evas_Event_Flags  event_flags;
540    Evas_Device      *dev;
541 };
542
543 struct _Evas_Event_Key_Down /** Key press event */
544 {
545    char          *keyname; /**< The string name of the key pressed */
546    void          *data;
547    Evas_Modifier *modifiers;
548    Evas_Lock     *locks;
549
550    const char    *key; /**< The logical key : (eg shift+1 == exclamation) */
551    const char    *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */
552    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 */
553    unsigned int   timestamp;
554    Evas_Event_Flags  event_flags;
555    Evas_Device      *dev;
556 };
557
558 struct _Evas_Event_Key_Up /** Key release event */
559 {
560    char          *keyname; /**< The string name of the key released */
561    void          *data;
562    Evas_Modifier *modifiers;
563    Evas_Lock     *locks;
564
565    const char    *key; /**< The logical key : (eg shift+1 == exclamation) */
566    const char    *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */
567    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 */
568    unsigned int   timestamp;
569    Evas_Event_Flags  event_flags;
570    Evas_Device      *dev;
571 };
572
573 struct _Evas_Event_Hold /** Hold change event */
574 {
575    int            hold; /**< The hold flag */
576    void          *data;
577
578    unsigned int   timestamp;
579    Evas_Event_Flags  event_flags;
580    Evas_Device      *dev;
581 };
582
583 /**
584  * How mouse pointer should be handled by Evas.
585  *
586  * If #EVAS_OBJECT_POINTER_MODE_AUTOGRAB, then when mouse is down an
587  * object, then moves outside of it, the pointer still behaves as
588  * being bound to the object, albeit out of its drawing region. On
589  * mouse up, the event will be feed to the object, that may check if
590  * the final position is over or not and do something about it.
591  *
592  * @ingroup Evas_Object_Group_Extras
593  */
594 typedef enum _Evas_Object_Pointer_Mode
595 {
596    EVAS_OBJECT_POINTER_MODE_AUTOGRAB, /**< default, X11-like */
597    EVAS_OBJECT_POINTER_MODE_NOGRAB
598 } Evas_Object_Pointer_Mode; /**< How mouse pointer should be handled by Evas. */
599
600 typedef void      (*Evas_Smart_Cb) (void *data, Evas_Object *obj, void *event_info);
601 typedef void      (*Evas_Event_Cb) (void *data, Evas *e, void *event_info);
602 typedef Eina_Bool (*Evas_Object_Event_Post_Cb) (void *data, Evas *e);
603 typedef void      (*Evas_Object_Event_Cb) (void *data, Evas *e, Evas_Object *obj, void *event_info);
604
605 #ifdef __cplusplus
606 extern "C" {
607 #endif
608
609 /**
610  * @defgroup Evas_Group Top Level Functions
611  *
612  * Functions that affect Evas as a whole.
613  */
614    EAPI int               evas_init                         (void);
615    EAPI int               evas_shutdown                     (void);
616
617    EAPI int               evas_alloc_error                  (void);
618
619    EAPI int               evas_async_events_fd_get          (void) EINA_WARN_UNUSED_RESULT EINA_PURE;
620    EAPI int               evas_async_events_process         (void);
621    EAPI Eina_Bool         evas_async_events_put             (const void *target, Evas_Callback_Type type, void *event_info, void (*func)(void *target, Evas_Callback_Type type, void *event_info)) EINA_ARG_NONNULL(1, 4);
622
623 /**
624  * @defgroup Evas_Canvas Canvas Functions
625  *
626  * Functions that deal with the basic evas object.  They are the
627  * functions you need to use at a minimum to get a working evas, and
628  * to destroy it.
629  *
630  */
631
632    EAPI Evas             *evas_new                          (void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
633    EAPI void              evas_free                         (Evas *e)  EINA_ARG_NONNULL(1);
634
635    EAPI void              evas_focus_in                     (Evas *e);
636    EAPI void              evas_focus_out                    (Evas *e);
637    EAPI Eina_Bool         evas_focus_state_get              (const Evas *e) EINA_PURE;
638
639    EAPI void              evas_data_attach_set              (Evas *e, void *data) EINA_ARG_NONNULL(1);
640    EAPI void             *evas_data_attach_get              (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
641
642    EAPI void              evas_damage_rectangle_add         (Evas *e, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
643    EAPI void              evas_obscured_rectangle_add       (Evas *e, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
644    EAPI void              evas_obscured_clear               (Evas *e) EINA_ARG_NONNULL(1);
645    EAPI Eina_List        *evas_render_updates               (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
646    EAPI void              evas_render_updates_free          (Eina_List *updates);
647    EAPI void              evas_render                       (Evas *e) EINA_ARG_NONNULL(1);
648    EAPI void              evas_norender                     (Evas *e) EINA_ARG_NONNULL(1);
649    EAPI void              evas_render_idle_flush            (Evas *e) EINA_ARG_NONNULL(1);
650    EAPI void              evas_render_dump                  (Evas *e) EINA_ARG_NONNULL(1);
651
652 /**
653  * @defgroup Evas_Output_Method Render Engine Functions
654  *
655  * Functions that are used to set the render engine for a given
656  * function, and then get that engine working.
657  *
658  * The following code snippet shows how they can be used to
659  * initialise an evas that uses the X11 software engine:
660  * @code
661  * Evas *evas;
662  * Evas_Engine_Info_Software_X11 *einfo;
663  * extern Display *display;
664  * extern Window win;
665  *
666  * evas_init();
667  *
668  * evas = evas_new();
669  * evas_output_method_set(evas, evas_render_method_lookup("software_x11"));
670  * evas_output_size_set(evas, 640, 480);
671  * evas_output_viewport_set(evas, 0, 0, 640, 480);
672  * einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(evas);
673  * einfo->info.display = display;
674  * einfo->info.visual = DefaultVisual(display, DefaultScreen(display));
675  * einfo->info.colormap = DefaultColormap(display, DefaultScreen(display));
676  * einfo->info.drawable = win;
677  * einfo->info.depth = DefaultDepth(display, DefaultScreen(display));
678  * evas_engine_info_set(evas, (Evas_Engine_Info *)einfo);
679  * @endcode
680  *
681  * @ingroup Evas_Canvas
682  */
683    EAPI int               evas_render_method_lookup         (const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
684    EAPI Eina_List        *evas_render_method_list           (void) EINA_WARN_UNUSED_RESULT;
685    EAPI void              evas_render_method_list_free      (Eina_List *list);
686
687    EAPI void              evas_output_method_set            (Evas *e, int render_method) EINA_ARG_NONNULL(1);
688    EAPI int               evas_output_method_get            (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
689
690    EAPI Evas_Engine_Info *evas_engine_info_get              (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
691    EAPI int               evas_engine_info_set              (Evas *e, Evas_Engine_Info *info) EINA_ARG_NONNULL(1);
692
693 /**
694  * @defgroup Evas_Output_Size Output and Viewport Resizing Functions
695  *
696  * Functions that set and retrieve the output and viewport size of an
697  * evas.
698  *
699  * @ingroup Evas_Canvas
700  */
701    EAPI void              evas_output_size_set              (Evas *e, int w, int h) EINA_ARG_NONNULL(1);
702    EAPI void              evas_output_size_get              (const Evas *e, int *w, int *h) EINA_ARG_NONNULL(1);
703    EAPI void              evas_output_viewport_set          (Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
704    EAPI void              evas_output_viewport_get          (const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
705
706 /**
707  * @defgroup Evas_Coord_Mapping_Group Coordinate Mapping Functions
708  *
709  * Functions that are used to map coordinates from the canvas to the
710  * screen or the screen to the canvas.
711  *
712  * @ingroup Evas_Canvas
713  */
714    EAPI Evas_Coord        evas_coord_screen_x_to_world      (const Evas *e, int x) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
715    EAPI Evas_Coord        evas_coord_screen_y_to_world      (const Evas *e, int y) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
716    EAPI int               evas_coord_world_x_to_screen      (const Evas *e, Evas_Coord x) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
717    EAPI int               evas_coord_world_y_to_screen      (const Evas *e, Evas_Coord y) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
718
719 /**
720  * @defgroup Evas_Pointer_Group Pointer (Mouse) Functions
721  *
722  * Functions that deal with the status of the pointer (mouse cursor).
723  *
724  * @ingroup Evas_Canvas
725  */
726    EAPI void              evas_pointer_output_xy_get        (const Evas *e, int *x, int *y) EINA_ARG_NONNULL(1);
727    EAPI void              evas_pointer_canvas_xy_get        (const Evas *e, Evas_Coord *x, Evas_Coord *y) EINA_ARG_NONNULL(1);
728    EAPI int               evas_pointer_button_down_mask_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
729    EAPI Eina_Bool         evas_pointer_inside_get           (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
730    EAPI void              evas_sync(Evas *e) EINA_ARG_NONNULL(1);
731
732
733 /**
734  * @defgroup Evas_Event_Freezing_Group Event Freezing Functions
735  *
736  * Functions that deal with the freezing of event processing of an
737  * evas.
738  *
739  * @ingroup Evas_Canvas
740  */
741    EAPI void              evas_event_freeze                 (Evas *e) EINA_ARG_NONNULL(1);
742    EAPI void              evas_event_thaw                   (Evas *e) EINA_ARG_NONNULL(1);
743    EAPI int               evas_event_freeze_get             (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
744
745 /**
746  * @defgroup Evas_Event_Feeding_Group Event Feeding Functions
747  *
748  * Functions to tell Evas that events happened and should be
749  * processed.
750  *
751  * As explained in @ref intro_not_evas, Evas does not know how to poll
752  * for events, so the developer should do it and then feed such events
753  * to the canvas to be processed. This is only required if operating
754  * Evas directly as modules such as Ecore_Evas does that for you.
755  *
756  * @ingroup Evas_Canvas
757  */
758    EAPI void              evas_event_feed_mouse_down        (Evas *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
759    EAPI void              evas_event_feed_mouse_up          (Evas *e, int b, Evas_Button_Flags flags, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
760    EAPI void              evas_event_feed_mouse_move        (Evas *e, int x, int y, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
761    EAPI void              evas_event_feed_mouse_in          (Evas *e, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
762    EAPI void              evas_event_feed_mouse_out         (Evas *e, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
763    EAPI void              evas_event_feed_multi_down        (Evas *e, 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);
764    EAPI void              evas_event_feed_multi_up          (Evas *e, 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);
765    EAPI void              evas_event_feed_multi_move        (Evas *e, 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);
766    EAPI void              evas_event_feed_mouse_cancel      (Evas *e, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
767    EAPI void              evas_event_feed_mouse_wheel       (Evas *e, int direction, int z, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
768    EAPI void              evas_event_feed_key_down          (Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
769    EAPI void              evas_event_feed_key_up            (Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
770    EAPI void              evas_event_feed_hold              (Evas *e, int hold, unsigned int timestamp, const void *data) EINA_ARG_NONNULL(1);
771
772 /**
773  * @defgroup Evas_Canvas_Events Canvas Events
774  *
775  * Canvas generates some events
776  *
777  * @ingroup Evas_Canvas
778  */
779
780    EAPI void              evas_event_callback_add              (Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) EINA_ARG_NONNULL(1, 3);
781    EAPI void             *evas_event_callback_del              (Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) EINA_ARG_NONNULL(1, 3);
782    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);
783    EAPI void              evas_post_event_callback_push        (Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
784    EAPI void              evas_post_event_callback_remove      (Evas *e, Evas_Object_Event_Post_Cb func);
785    EAPI void              evas_post_event_callback_remove_full (Evas *e, Evas_Object_Event_Post_Cb func, const void *data);
786        
787 /**
788  * @defgroup Evas_Image_Group Image Functions
789  *
790  * Functions that deals with images at canvas level.
791  *
792  * @ingroup Evas_Canvas
793  */
794    EAPI void              evas_image_cache_flush            (Evas *e) EINA_ARG_NONNULL(1);
795    EAPI void              evas_image_cache_reload           (Evas *e) EINA_ARG_NONNULL(1);
796    EAPI void              evas_image_cache_set              (Evas *e, int size) EINA_ARG_NONNULL(1);
797    EAPI int               evas_image_cache_get              (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
798
799
800 /**
801  * @defgroup Evas_Font_Group Font Functions
802  *
803  * Functions that deals with fonts.
804  *
805  * @ingroup Evas_Canvas
806  */
807    EAPI void              evas_font_hinting_set             (Evas *e, Evas_Font_Hinting_Flags hinting) EINA_ARG_NONNULL(1);
808    EAPI Evas_Font_Hinting_Flags evas_font_hinting_get       (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
809    EAPI Eina_Bool         evas_font_hinting_can_hint        (const Evas *e, Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
810
811    EAPI void              evas_font_cache_flush             (Evas *e) EINA_ARG_NONNULL(1);
812    EAPI void              evas_font_cache_set               (Evas *e, int size) EINA_ARG_NONNULL(1);
813    EAPI int               evas_font_cache_get               (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
814
815    EAPI Eina_List        *evas_font_available_list          (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
816    EAPI void              evas_font_available_list_free     (Evas *e, Eina_List *available) EINA_ARG_NONNULL(1);
817
818 /**
819  * @defgroup Evas_Font_Path_Group Font Path Functions
820  *
821  * Functions that edit the paths being used to load fonts.
822  *
823  * @ingroup Evas_Font_Group
824  */
825    EAPI void              evas_font_path_clear              (Evas *e) EINA_ARG_NONNULL(1);
826    EAPI void              evas_font_path_append             (Evas *e, const char *path) EINA_ARG_NONNULL(1, 2);
827    EAPI void              evas_font_path_prepend            (Evas *e, const char *path) EINA_ARG_NONNULL(1, 2);
828    EAPI const Eina_List  *evas_font_path_list               (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
829
830 /**
831  * @defgroup Evas_Object_Group Generic Object Functions
832  *
833  * Functions that manipulate generic evas objects.
834  */
835
836 /**
837  * @defgroup Evas_Object_Group_Basic Basic Object Manipulation
838  *
839  * Methods that are often used, like those that change the color,
840  * clippers and geometry of the object.
841  *
842  * @ingroup Evas_Object_Group
843  */
844    EAPI void              evas_object_clip_set              (Evas_Object *obj, Evas_Object *clip) EINA_ARG_NONNULL(1, 2);
845    EAPI Evas_Object      *evas_object_clip_get              (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
846    EAPI void              evas_object_clip_unset            (Evas_Object *obj);
847    EAPI const Eina_List  *evas_object_clipees_get           (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
848
849    EAPI void              evas_object_focus_set             (Evas_Object *obj, Eina_Bool focus) EINA_ARG_NONNULL(1);
850    EAPI Eina_Bool         evas_object_focus_get             (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
851
852    EAPI void              evas_object_layer_set             (Evas_Object *obj, short l) EINA_ARG_NONNULL(1);
853    EAPI short             evas_object_layer_get             (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
854
855    EAPI void              evas_object_name_set              (Evas_Object *obj, const char *name) EINA_ARG_NONNULL(1);
856    EAPI const char       *evas_object_name_get              (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
857
858    EAPI void              evas_object_del                   (Evas_Object *obj) EINA_ARG_NONNULL(1);
859    EAPI void              evas_object_move                  (Evas_Object *obj, Evas_Coord x, Evas_Coord y) EINA_ARG_NONNULL(1);
860    EAPI void              evas_object_resize                (Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
861    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);
862
863    EAPI void              evas_object_show                  (Evas_Object *obj) EINA_ARG_NONNULL(1);
864    EAPI void              evas_object_hide                  (Evas_Object *obj) EINA_ARG_NONNULL(1);
865    EAPI Eina_Bool         evas_object_visible_get           (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
866
867    EAPI void              evas_object_color_set             (Evas_Object *obj, int r, int g, int b, int a) EINA_ARG_NONNULL(1);
868    EAPI void              evas_object_color_get             (const Evas_Object *obj, int *r, int *g, int *b, int *a) EINA_ARG_NONNULL(1);
869
870    EAPI Evas             *evas_object_evas_get              (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
871
872    EAPI const char       *evas_object_type_get              (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
873
874    EAPI void              evas_object_raise                 (Evas_Object *obj) EINA_ARG_NONNULL(1);
875    EAPI void              evas_object_lower                 (Evas_Object *obj) EINA_ARG_NONNULL(1);
876    EAPI void              evas_object_stack_above           (Evas_Object *obj, Evas_Object *above) EINA_ARG_NONNULL(1, 2);
877    EAPI void              evas_object_stack_below           (Evas_Object *obj, Evas_Object *below) EINA_ARG_NONNULL(1, 2);
878    EAPI Evas_Object      *evas_object_above_get             (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
879    EAPI Evas_Object      *evas_object_below_get             (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
880
881
882 /**
883  * @defgroup Evas_Object_Group_Events Object Events
884  *
885  * Objects generates events when they are moved, resized, when their
886  * visibility change, when they are deleted and so on. These methods
887  * will allow one to handle such events.
888  *
889  * The events can be those from keyboard and mouse, if the object
890  * accepts these events.
891  *
892  * @ingroup Evas_Object_Group
893  */
894    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);
895   EAPI void             *evas_object_event_callback_del    (Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func) EINA_ARG_NONNULL(1, 3);
896    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);
897
898    EAPI void              evas_object_pass_events_set       (Evas_Object *obj, Eina_Bool pass) EINA_ARG_NONNULL(1);
899    EAPI Eina_Bool         evas_object_pass_events_get       (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
900    EAPI void              evas_object_repeat_events_set     (Evas_Object *obj, Eina_Bool repeat) EINA_ARG_NONNULL(1);
901    EAPI Eina_Bool         evas_object_repeat_events_get     (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
902    EAPI void              evas_object_propagate_events_set  (Evas_Object *obj, Eina_Bool prop) EINA_ARG_NONNULL(1);
903    EAPI Eina_Bool         evas_object_propagate_events_get  (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
904
905 /**
906  * @defgroup Evas_Object_Group_Map UV Mapping (Rotation, Perspecitve, 3D...)
907  *
908  * Evas allows different transformations to be applied to all kinds of
909  * objects. These are applied by means of UV mapping.
910  *
911  * With UV mapping, one maps points in the source object to a 3D space
912  * positioning at target. This allows rotation, perspective, scale and
913  * lots of other effects, depending on the map that is used.
914  *
915  * Each map point may carry a multiplier color. If properly
916  * calculated, these can do shading effects on the object, producing
917  * 3D effects.
918  *
919  * As usual, Evas provides both the raw and easy to use methods. The
920  * raw methods allow developer to create its maps somewhere else,
921  * maybe load them from some file format. The easy to use methods,
922  * calculate the points given some high-level parameters, such as
923  * rotation angle, ambient light and so on.
924  *
925  * @note applying mapping will reduce performance, so use with
926  *       care. The impact on performance depends on engine in
927  *       use. Software is quite optimized, but not as fast as OpenGL.
928  *
929  * @ingroup Evas_Object_Group
930  */
931    EAPI void              evas_object_map_enable_set        (Evas_Object *obj, Eina_Bool enabled);
932    EAPI Eina_Bool         evas_object_map_enable_get        (const Evas_Object *obj);
933    EAPI void              evas_object_map_source_set        (Evas_Object *obj, Evas_Object *src);
934    EAPI Evas_Object      *evas_object_map_source_get        (const Evas_Object *obj);
935    EAPI void              evas_object_map_set               (Evas_Object *obj, const Evas_Map *map);
936    EAPI const Evas_Map   *evas_object_map_get               (const Evas_Object *obj);
937
938    EAPI void              evas_map_util_points_populate_from_object_full   (Evas_Map *m, const Evas_Object *obj, Evas_Coord z);
939    EAPI void              evas_map_util_points_populate_from_object        (Evas_Map *m, const Evas_Object *obj);
940    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);
941
942    EAPI void              evas_map_util_points_color_set                   (Evas_Map *m, int r, int g, int b, int a);
943
944    EAPI void              evas_map_util_rotate              (Evas_Map *m, double degrees, Evas_Coord cx, Evas_Coord cy);
945    EAPI void              evas_map_util_zoom                (Evas_Map *m, double zoomx, double zoomy, Evas_Coord cx, Evas_Coord cy);
946    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);
947    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);
948    EAPI void              evas_map_util_3d_perspective      (Evas_Map *m, Evas_Coord px, Evas_Coord py, Evas_Coord z0, Evas_Coord foc);
949    EAPI Eina_Bool         evas_map_util_clockwise_get       (Evas_Map *m);
950
951    EAPI Evas_Map         *evas_map_new                      (int count);
952    EAPI void              evas_map_smooth_set               (Evas_Map *m, Eina_Bool enabled);
953    EAPI Eina_Bool         evas_map_smooth_get               (const Evas_Map *m);
954    EAPI void              evas_map_alpha_set                (Evas_Map *m, Eina_Bool enabled);
955    EAPI Eina_Bool         evas_map_alpha_get                (const Evas_Map *m);
956    EAPI Evas_Map         *evas_map_dup                      (const Evas_Map *m);
957    EAPI void              evas_map_free                     (Evas_Map *m);
958    EAPI void              evas_map_point_coord_set          (Evas_Map *m, int idx, Evas_Coord x, Evas_Coord y, Evas_Coord z);
959    EAPI void              evas_map_point_coord_get          (const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z);
960    EAPI void              evas_map_point_image_uv_set       (Evas_Map *m, int idx, double u, double v);
961    EAPI void              evas_map_point_image_uv_get       (const Evas_Map *m, int idx, double *u, double *v);
962    EAPI void              evas_map_point_color_set          (Evas_Map *m, int idx, int r, int g, int b, int a);
963    EAPI void              evas_map_point_color_get          (const Evas_Map *m, int idx, int *r, int *g, int *b, int *a);
964
965 /**
966  * @defgroup Evas_Object_Group_Size_Hints Size Hints
967  *
968  * Objects may carry hints so another object that acts as a manager
969  * (see @ref Evas_Smart_Object_Group) may know how to proper position
970  * and resize the object. The Size Hints provide a common interface
971  * that is recommended as the protocol for such information.
972  *
973  * @ingroup Evas_Object_Group
974  */
975    EAPI void              evas_object_size_hint_min_get     (const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
976    EAPI void              evas_object_size_hint_min_set     (Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
977    EAPI void              evas_object_size_hint_max_get     (const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
978    EAPI void              evas_object_size_hint_max_set     (Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
979    EAPI void              evas_object_size_hint_request_get (const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
980    EAPI void              evas_object_size_hint_request_set (Evas_Object *obj, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
981    EAPI void              evas_object_size_hint_aspect_get  (const Evas_Object *obj, Evas_Aspect_Control *aspect, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
982    EAPI void              evas_object_size_hint_aspect_set  (Evas_Object *obj, Evas_Aspect_Control aspect, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
983    EAPI void              evas_object_size_hint_align_get   (const Evas_Object *obj, double *x, double *y) EINA_ARG_NONNULL(1);
984    EAPI void              evas_object_size_hint_align_set   (Evas_Object *obj, double x, double y) EINA_ARG_NONNULL(1);
985    EAPI void              evas_object_size_hint_weight_get  (const Evas_Object *obj, double *x, double *y) EINA_ARG_NONNULL(1);
986    EAPI void              evas_object_size_hint_weight_set  (Evas_Object *obj, double x, double y) EINA_ARG_NONNULL(1);
987    EAPI void              evas_object_size_hint_padding_get (const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b) EINA_ARG_NONNULL(1);
988    EAPI void              evas_object_size_hint_padding_set (Evas_Object *obj, Evas_Coord l, Evas_Coord r, Evas_Coord t, Evas_Coord b) EINA_ARG_NONNULL(1);
989
990 /**
991  * @defgroup Evas_Object_Group_Extras Extra Object Manipulation
992  *
993  * Miscellaneous functions that also apply to any object, but are less
994  * used or not implemented by all objects.
995  *
996  * @ingroup Evas_Object_Group
997  */
998    EAPI void              evas_object_data_set              (Evas_Object *obj, const char *key, const void *data) EINA_ARG_NONNULL(1, 2);
999    EAPI void             *evas_object_data_get              (const Evas_Object *obj, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
1000    EAPI void             *evas_object_data_del              (Evas_Object *obj, const char *key) EINA_ARG_NONNULL(1, 2);
1001
1002    EAPI void              evas_object_pointer_mode_set      (Evas_Object *obj, Evas_Object_Pointer_Mode setting) EINA_ARG_NONNULL(1);
1003    EAPI Evas_Object_Pointer_Mode evas_object_pointer_mode_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1004
1005    EAPI void              evas_object_anti_alias_set        (Evas_Object *obj, Eina_Bool antialias) EINA_ARG_NONNULL(1);
1006    EAPI Eina_Bool         evas_object_anti_alias_get        (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1007
1008    EAPI void              evas_object_scale_set             (Evas_Object *obj, double scale) EINA_ARG_NONNULL(1);
1009    EAPI double            evas_object_scale_get             (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1010
1011    EAPI void              evas_object_color_interpolation_set  (Evas_Object *obj, int color_space) EINA_ARG_NONNULL(1);
1012    EAPI int               evas_object_color_interpolation_get  (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1013
1014    EAPI void              evas_object_render_op_set         (Evas_Object *obj, Evas_Render_Op op) EINA_ARG_NONNULL(1);
1015    EAPI Evas_Render_Op    evas_object_render_op_get         (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1016
1017    EAPI void              evas_object_precise_is_inside_set (Evas_Object *obj, Eina_Bool precise) EINA_ARG_NONNULL(1);
1018    EAPI Eina_Bool         evas_object_precise_is_inside_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1019
1020 /**
1021  * @defgroup Evas_Object_Group_Find Finding Objects
1022  *
1023  * Functions that allows finding objects by their position, name or
1024  * other properties.
1025  *
1026  * @ingroup Evas_Object_Group
1027  */
1028    EAPI Evas_Object      *evas_focus_get                    (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1029
1030    EAPI Evas_Object      *evas_object_name_find             (const Evas *e, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1031
1032    EAPI Evas_Object      *evas_object_top_at_xy_get         (const Evas *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1033    EAPI Evas_Object      *evas_object_top_at_pointer_get    (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1034    EAPI Evas_Object      *evas_object_top_in_rectangle_get  (const Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1035
1036    EAPI Eina_List        *evas_objects_at_xy_get            (const Evas *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1037    EAPI Eina_List        *evas_objects_in_rectangle_get     (const Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1038
1039    EAPI Evas_Object      *evas_object_bottom_get            (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1040    EAPI Evas_Object      *evas_object_top_get               (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1041
1042 /**
1043  * @defgroup Evas_Object_Group_Interceptors Object Method Interceptors
1044  *
1045  * Evas provides a way to intercept method calls. The interceptor
1046  * callback may opt to completely deny the call, or may check and
1047  * change the parameters before continuing. The continuation of an
1048  * intercepted call is done by calling the intercepted call again,
1049  * from inside the interceptor callback.
1050  *
1051  * @ingroup Evas_Object_Group
1052  */
1053    EAPI void              evas_object_intercept_show_callback_add        (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), const void *data) EINA_ARG_NONNULL(1, 2);
1054    EAPI void             *evas_object_intercept_show_callback_del        (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj)) EINA_ARG_NONNULL(1, 2);
1055    EAPI void              evas_object_intercept_hide_callback_add        (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), const void *data) EINA_ARG_NONNULL(1, 2);
1056    EAPI void             *evas_object_intercept_hide_callback_del        (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj)) EINA_ARG_NONNULL(1, 2);
1057    EAPI void              evas_object_intercept_move_callback_add        (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y), const void *data) EINA_ARG_NONNULL(1, 2);
1058    EAPI void             *evas_object_intercept_move_callback_del        (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Coord x, Evas_Coord y)) EINA_ARG_NONNULL(1, 2);
1059    EAPI void              evas_object_intercept_resize_callback_add      (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Coord w, Evas_Coord h), const void *data) EINA_ARG_NONNULL(1, 2);
1060    EAPI void             *evas_object_intercept_resize_callback_del      (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Coord w, Evas_Coord h)) EINA_ARG_NONNULL(1, 2);
1061    EAPI void              evas_object_intercept_raise_callback_add       (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), const void *data) EINA_ARG_NONNULL(1, 2);
1062    EAPI void             *evas_object_intercept_raise_callback_del       (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj)) EINA_ARG_NONNULL(1, 2);
1063    EAPI void              evas_object_intercept_lower_callback_add       (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), const void *data) EINA_ARG_NONNULL(1, 2);
1064    EAPI void             *evas_object_intercept_lower_callback_del       (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj)) EINA_ARG_NONNULL(1, 2);
1065    EAPI void              evas_object_intercept_stack_above_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *above), const void *data) EINA_ARG_NONNULL(1, 2);
1066    EAPI void             *evas_object_intercept_stack_above_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *above)) EINA_ARG_NONNULL(1, 2);
1067    EAPI void              evas_object_intercept_stack_below_callback_add (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *below), const void *data) EINA_ARG_NONNULL(1, 2);
1068    EAPI void             *evas_object_intercept_stack_below_callback_del (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *below)) EINA_ARG_NONNULL(1, 2);
1069    EAPI void              evas_object_intercept_layer_set_callback_add   (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int l), const void *data) EINA_ARG_NONNULL(1, 2);
1070    EAPI void             *evas_object_intercept_layer_set_callback_del   (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int l)) EINA_ARG_NONNULL(1, 2);
1071    EAPI void              evas_object_intercept_color_set_callback_add   (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int r, int g, int b, int a), const void *data) EINA_ARG_NONNULL(1, 2);
1072    EAPI void             *evas_object_intercept_color_set_callback_del   (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, int r, int g, int b, int a)) EINA_ARG_NONNULL(1, 2);
1073    EAPI void              evas_object_intercept_clip_set_callback_add    (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *clip), const void *data) EINA_ARG_NONNULL(1, 2);
1074    EAPI void             *evas_object_intercept_clip_set_callback_del    (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj, Evas_Object *clip)) EINA_ARG_NONNULL(1, 2);
1075    EAPI void              evas_object_intercept_clip_unset_callback_add  (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), const void *data) EINA_ARG_NONNULL(1, 2);
1076    EAPI void             *evas_object_intercept_clip_unset_callback_del  (Evas_Object *obj, void (*func) (void *data, Evas_Object *obj)) EINA_ARG_NONNULL(1, 2);
1077
1078
1079
1080 /**
1081  * @defgroup Evas_Object_Specific Specific Object Functions
1082  *
1083  * Functions that work on specific objects.
1084  *
1085  */
1086
1087 /**
1088  * @defgroup Evas_Object_Rectangle Rectangle Object Functions
1089  *
1090  * Functions that operate on evas rectangle objects.
1091  *
1092  * @ingroup Evas_Object_Specific
1093  */
1094    EAPI Evas_Object      *evas_object_rectangle_add         (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1095
1096 /**
1097  * @defgroup Evas_Object_Image Image Object Functions
1098  *
1099  * Functions used to create and manipulate image objects.
1100  *
1101  * Note - Image objects may return or accept "image data" in multiple
1102  * formats.  This is based on the colorspace of an object. Here is a
1103  * rundown on formats:
1104  *
1105  * EVAS_COLORSPACE_ARGB8888:
1106  *
1107  * This pixel format is a linear block of pixels, starting at the
1108  * top-left row by row until the bottom right of the image or pixel
1109  * region. All pixels are 32-bit unsigned int's with the high-byte
1110  * being alpha and the low byte being blue in the format ARGB. Alpha
1111  * may or may not be used by evas depending on the alpha flag of the
1112  * image, but if not used, should be set to 0xff anyway.
1113  *
1114  * This colorspace uses premultiplied alpha. That means that R, G and
1115  * B cannot exceed A in value. The conversion from non-premultiplied
1116  * colorspace is:
1117  *
1118  * R = (r * a) / 255; G = (g * a) / 255; B = (b * a) / 255;
1119  *
1120  * So 50% transparent blue will be: 0x80000080. This will not be
1121  * "dark" - just 50% transparent. Values are 0 == black, 255 == solid
1122  * or full red, green or blue.
1123  *
1124  * EVAS_COLORSPACE_YCBCR422P601_PL:
1125  *
1126  * This is a pointer-list indirected set of YUV (YCbCr) pixel
1127  * data. This means that the data returned or set is not actual pixel
1128  * data, but pointers TO lines of pixel data. The list of pointers
1129  * will first be N rows of pointers to the Y plane - pointing to the
1130  * first pixel at the start of each row in the Y plane. N is the
1131  * height of the image data in pixels. Each pixel in the Y, U and V
1132  * planes is 1 byte exactly, packed. The next N / 2 pointers will
1133  * point to rows in the U plane, and the next N / 2 pointers will
1134  * point to the V plane rows. U and V planes are half the horizontal
1135  * and vertical resolution of the Y plane.
1136  *
1137  * Row order is top to bottom and row pixels are stored left to right.
1138  *
1139  * There is a limitation that these images MUST be a multiple of 2
1140  * pixels in size horizontally or vertically. This is due to the U and
1141  * V planes being half resolution. Also note that this assumes the
1142  * itu601 YUV colorspace specification. This is defined for standard
1143  * television and mpeg streams.  HDTV may use the itu709
1144  * specification.
1145  *
1146  * Values are 0 to 255, indicating full or no signal in that plane
1147  * respectively.
1148  *
1149  * EVAS_COLORSPACE_YCBCR422P709_PL:
1150  *
1151  * Not implemented yet.
1152  *
1153  * EVAS_COLORSPACE_RGB565_A5P:
1154  *
1155  * In the process of being implemented in 1 engine only. This may change.
1156  *
1157  * This is a pointer to image data for 16-bit half-word pixel data in
1158  * 16bpp RGB 565 format (5 bits red, 6 bits green, 5 bits blue), with
1159  * the high-byte containing red and the low byte containing blue, per
1160  * pixel. This data is packed row by row from the top-left to the
1161  * bottom right.
1162  *
1163  * If the image has an alpha channel enabled there will be an extra
1164  * alpha plane after the color pixel plane. If not, then this data
1165  * will not exist and should not be accessed in any way. This plane is
1166  * a set of pixels with 1 byte per pixel defining the alpha values of
1167  * all pixels in the image from the top-left to the bottom right of
1168  * the image, row by row. Even though the values of the alpha pixels
1169  * can be 0 to 255, only values 0 through to 32 are used, 32 being
1170  * solid and 0 being transparent.
1171  *
1172  * RGB values can be 0 to 31 for red and blue and 0 to 63 for green,
1173  * with 0 being black and 31 or 63 being full red, green or blue
1174  * respectively. This colorspace is also pre-multiplied like
1175  * EVAS_COLORSPACE_ARGB8888 so:
1176  *
1177  * R = (r * a) / 32; G = (g * a) / 32; B = (b * a) / 32;
1178  *
1179  * @ingroup Evas_Object_Specific
1180  */
1181    EAPI Evas_Object      *evas_object_image_add             (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1182    EAPI Evas_Object      *evas_object_image_filled_add      (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1183
1184    EAPI void              evas_object_image_file_set        (Evas_Object *obj, const char *file, const char *key) EINA_ARG_NONNULL(1, 2);
1185    EAPI void              evas_object_image_file_get        (const Evas_Object *obj, const char **file, const char **key) EINA_ARG_NONNULL(1, 2);
1186    EAPI void              evas_object_image_border_set      (Evas_Object *obj, int l, int r, int t, int b) EINA_ARG_NONNULL(1);
1187    EAPI void              evas_object_image_border_get      (const Evas_Object *obj, int *l, int *r, int *t, int *b) EINA_ARG_NONNULL(1);
1188    EAPI void              evas_object_image_border_center_fill_set(Evas_Object *obj, Evas_Border_Fill_Mode fill) EINA_ARG_NONNULL(1);
1189    EAPI Evas_Border_Fill_Mode evas_object_image_border_center_fill_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1190    EAPI void              evas_object_image_filled_set      (Evas_Object *obj, Eina_Bool setting) EINA_ARG_NONNULL(1);
1191    EAPI Eina_Bool         evas_object_image_filled_get      (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1192    EAPI void              evas_object_image_border_scale_set(Evas_Object *obj, double scale);
1193    EAPI double            evas_object_image_border_scale_get(const Evas_Object *obj);
1194    EAPI void              evas_object_image_fill_set        (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
1195    EAPI void              evas_object_image_fill_get        (const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1196    EAPI void              evas_object_image_fill_spread_set   (Evas_Object *obj, int tile_mode) EINA_ARG_NONNULL(1);
1197    EAPI int               evas_object_image_fill_spread_get   (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1198    EAPI void              evas_object_image_fill_transform_set (Evas_Object *obj, Evas_Transform *t) EINA_ARG_NONNULL(1);
1199    EAPI void              evas_object_image_fill_transform_get (const Evas_Object *obj, Evas_Transform *t) EINA_ARG_NONNULL(1, 2);
1200    EAPI void              evas_object_image_size_set        (Evas_Object *obj, int w, int h) EINA_ARG_NONNULL(1);
1201    EAPI void              evas_object_image_size_get        (const Evas_Object *obj, int *w, int *h) EINA_ARG_NONNULL(1);
1202    EAPI int               evas_object_image_stride_get      (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1203    EAPI int               evas_object_image_load_error_get  (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1204    EAPI void              evas_object_image_data_set        (Evas_Object *obj, void *data) EINA_ARG_NONNULL(1);
1205    EAPI void             *evas_object_image_data_convert    (Evas_Object *obj, Evas_Colorspace to_cspace) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1206    EAPI void             *evas_object_image_data_get        (const Evas_Object *obj, Eina_Bool for_writing) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1207    EAPI void              evas_object_image_data_copy_set   (Evas_Object *obj, void *data) EINA_ARG_NONNULL(1);
1208    EAPI void              evas_object_image_data_update_add (Evas_Object *obj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
1209    EAPI void              evas_object_image_alpha_set       (Evas_Object *obj, Eina_Bool has_alpha) EINA_ARG_NONNULL(1);
1210    EAPI Eina_Bool         evas_object_image_alpha_get       (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1211    EAPI void              evas_object_image_smooth_scale_set(Evas_Object *obj, Eina_Bool smooth_scale) EINA_ARG_NONNULL(1);
1212    EAPI Eina_Bool         evas_object_image_smooth_scale_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1213    EAPI void              evas_object_image_preload         (Evas_Object *obj, Eina_Bool cancel) EINA_ARG_NONNULL(1);
1214    EAPI void              evas_object_image_reload          (Evas_Object *obj) EINA_ARG_NONNULL(1);
1215    EAPI Eina_Bool         evas_object_image_save            (const Evas_Object *obj, const char *file, const char *key, const char *flags)  EINA_ARG_NONNULL(1, 2);
1216    EAPI Eina_Bool         evas_object_image_pixels_import          (Evas_Object *obj, Evas_Pixel_Import_Source *pixels) EINA_ARG_NONNULL(1, 2);
1217    EAPI void              evas_object_image_pixels_get_callback_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *o), void *data) EINA_ARG_NONNULL(1, 2);
1218    EAPI void              evas_object_image_pixels_dirty_set       (Evas_Object *obj, Eina_Bool dirty) EINA_ARG_NONNULL(1);
1219    EAPI Eina_Bool         evas_object_image_pixels_dirty_get       (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1220    EAPI void              evas_object_image_load_dpi_set           (Evas_Object *obj, double dpi) EINA_ARG_NONNULL(1);
1221    EAPI double            evas_object_image_load_dpi_get           (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1222    EAPI void              evas_object_image_load_size_set          (Evas_Object *obj, int w, int h) EINA_ARG_NONNULL(1);
1223    EAPI void              evas_object_image_load_size_get          (const Evas_Object *obj, int *w, int *h) EINA_ARG_NONNULL(1);
1224    EAPI void              evas_object_image_load_scale_down_set    (Evas_Object *obj, int scale_down) EINA_ARG_NONNULL(1);
1225    EAPI int               evas_object_image_load_scale_down_get    (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1226    EAPI void              evas_object_image_load_region_set        (Evas_Object *obj, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
1227    EAPI void              evas_object_image_load_region_get        (const Evas_Object *obj, int *x, int *y, int *w, int *h) EINA_ARG_NONNULL(1);
1228
1229    EAPI void              evas_object_image_colorspace_set         (Evas_Object *obj, Evas_Colorspace cspace) EINA_ARG_NONNULL(1);
1230    EAPI Evas_Colorspace   evas_object_image_colorspace_get         (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1231    EAPI void                 evas_object_image_native_surface_set  (Evas_Object *obj, Evas_Native_Surface *surf) EINA_ARG_NONNULL(1, 2);
1232    EAPI Evas_Native_Surface *evas_object_image_native_surface_get  (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1233    EAPI void                  evas_object_image_scale_hint_set     (Evas_Object *obj, Evas_Image_Scale_Hint hint) EINA_ARG_NONNULL(1);
1234    EAPI Evas_Image_Scale_Hint evas_object_image_scale_hint_get     (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1235    EAPI void                    evas_object_image_content_hint_set (Evas_Object *obj, Evas_Image_Content_Hint hint) EINA_ARG_NONNULL(1);
1236    EAPI Evas_Image_Content_Hint evas_object_image_content_hint_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1237
1238 /**
1239  * @defgroup Evas_Object_Text Text Object Functions
1240  *
1241  * Functions that operate on single line, single style text objects.
1242  *
1243  * For multiline and multiple style text, see @ref Evas_Object_Textblock.
1244  *
1245  * @ingroup Evas_Object_Specific
1246  */
1247    typedef enum _Evas_Text_Style_Type
1248      {
1249         EVAS_TEXT_STYLE_PLAIN,
1250         EVAS_TEXT_STYLE_SHADOW,
1251         EVAS_TEXT_STYLE_OUTLINE,
1252         EVAS_TEXT_STYLE_SOFT_OUTLINE,
1253         EVAS_TEXT_STYLE_GLOW,
1254         EVAS_TEXT_STYLE_OUTLINE_SHADOW,
1255         EVAS_TEXT_STYLE_FAR_SHADOW,
1256         EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW,
1257         EVAS_TEXT_STYLE_SOFT_SHADOW,
1258         EVAS_TEXT_STYLE_FAR_SOFT_SHADOW
1259      } Evas_Text_Style_Type;
1260
1261    EAPI Evas_Object      *evas_object_text_add              (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1262    EAPI void              evas_object_text_font_source_set  (Evas_Object *obj, const char *font) EINA_ARG_NONNULL(1);
1263    EAPI const char       *evas_object_text_font_source_get  (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1264    EAPI void              evas_object_text_font_set         (Evas_Object *obj, const char *font, Evas_Font_Size size) EINA_ARG_NONNULL(1);
1265    EAPI void              evas_object_text_font_get         (const Evas_Object *obj, const char **font, Evas_Font_Size *size) EINA_ARG_NONNULL(1, 2);
1266    EAPI void              evas_object_text_text_set         (Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
1267    EAPI const char       *evas_object_text_text_get         (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1268    EAPI Evas_Coord        evas_object_text_ascent_get       (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1269    EAPI Evas_Coord        evas_object_text_descent_get      (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1270    EAPI Evas_Coord        evas_object_text_max_ascent_get   (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1271    EAPI Evas_Coord        evas_object_text_max_descent_get  (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1272    EAPI Evas_Coord        evas_object_text_horiz_advance_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1273    EAPI Evas_Coord        evas_object_text_vert_advance_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1274    EAPI Evas_Coord        evas_object_text_inset_get        (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1275    EAPI Eina_Bool         evas_object_text_char_pos_get     (const Evas_Object *obj, int pos, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
1276    EAPI int               evas_object_text_char_coords_get  (const Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
1277    EAPI int               evas_object_text_last_up_to_pos(const Evas_Object *obj, Evas_Coord x, Evas_Coord y) EINA_ARG_NONNULL(1);
1278    EAPI Evas_Text_Style_Type evas_object_text_style_get     (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1279    EAPI void              evas_object_text_style_set        (Evas_Object *obj, Evas_Text_Style_Type type) EINA_ARG_NONNULL(1);
1280    EAPI void              evas_object_text_shadow_color_set (Evas_Object *obj, int r, int g, int b, int a) EINA_ARG_NONNULL(1);
1281    EAPI void              evas_object_text_shadow_color_get (const Evas_Object *obj, int *r, int *g, int *b, int *a) EINA_ARG_NONNULL(1);
1282    EAPI void              evas_object_text_glow_color_set   (Evas_Object *obj, int r, int g, int b, int a) EINA_ARG_NONNULL(1);
1283    EAPI void              evas_object_text_glow_color_get   (const Evas_Object *obj, int *r, int *g, int *b, int *a) EINA_ARG_NONNULL(1);
1284    EAPI void              evas_object_text_glow2_color_set  (Evas_Object *obj, int r, int g, int b, int a) EINA_ARG_NONNULL(1);
1285    EAPI void              evas_object_text_glow2_color_get  (const Evas_Object *obj, int *r, int *g, int *b, int *a) EINA_ARG_NONNULL(1);
1286    EAPI void              evas_object_text_outline_color_set(Evas_Object *obj, int r, int g, int b, int a) EINA_ARG_NONNULL(1);
1287    EAPI void              evas_object_text_outline_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a) EINA_ARG_NONNULL(1);
1288    EAPI void              evas_object_text_style_pad_get    (const Evas_Object *obj, int *l, int *r, int *t, int *b) EINA_ARG_NONNULL(1);
1289
1290
1291 /**
1292  * @defgroup Evas_Object_Textblock Textblock Object Functions
1293  *
1294  * Functions used to create and manipulate textblock objects. Unlike
1295  * @ref Evas_Object_Text, these handle complex text, doing multiple
1296  * styles and multiline text based on HTML-like tags. Of these extra
1297  * features will be heavier on memory and processing cost.
1298  *
1299  * @todo put here some usage examples
1300  *
1301  * @ingroup Evas_Object_Specific
1302  */
1303    typedef struct _Evas_Textblock_Style     Evas_Textblock_Style;
1304    typedef struct _Evas_Textblock_Cursor    Evas_Textblock_Cursor;
1305    typedef struct _Evas_Textblock_Rectangle Evas_Textblock_Rectangle;
1306
1307    struct _Evas_Textblock_Rectangle
1308      {
1309         Evas_Coord x, y, w, h;
1310      };
1311
1312    typedef enum _Evas_Textblock_Text_Type
1313      {
1314         EVAS_TEXTBLOCK_TEXT_RAW,
1315         EVAS_TEXTBLOCK_TEXT_PLAIN,
1316         EVAS_TEXTBLOCK_TEXT_MARKUP
1317      } Evas_Textblock_Text_Type;
1318
1319    EAPI Evas_Object                 *evas_object_textblock_add(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1320
1321    EAPI const char                  *evas_textblock_escape_string_get(const char *escape) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1322    EAPI const char                  *evas_textblock_string_escape_get(const char *string, int *len_ret) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1323    EAPI const char                  *evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
1324
1325    EAPI Evas_Textblock_Style        *evas_textblock_style_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
1326    EAPI void                         evas_textblock_style_free(Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1);
1327    EAPI void                         evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text) EINA_ARG_NONNULL(1);
1328    EAPI const char                  *evas_textblock_style_get(const Evas_Textblock_Style *ts) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1329
1330    EAPI void                         evas_object_textblock_style_set(Evas_Object *obj, Evas_Textblock_Style *ts) EINA_ARG_NONNULL(1);
1331    EAPI const Evas_Textblock_Style  *evas_object_textblock_style_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1332    EAPI void                         evas_object_textblock_replace_char_set(Evas_Object *obj, const char *ch) EINA_ARG_NONNULL(1);
1333    EAPI const char                  *evas_object_textblock_replace_char_get(Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1334
1335    EAPI void                         evas_object_textblock_text_markup_set(Evas_Object *obj, const char *text) EINA_ARG_NONNULL(1);
1336    EAPI void                         evas_object_textblock_text_markup_prepend(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
1337    EAPI const char                  *evas_object_textblock_text_markup_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1338
1339    EAPI const Evas_Textblock_Cursor *evas_object_textblock_cursor_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1340    EAPI Evas_Textblock_Cursor       *evas_object_textblock_cursor_new(Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1341
1342    EAPI void                         evas_textblock_cursor_free(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1343
1344    EAPI void                         evas_textblock_cursor_node_first(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1345    EAPI void                         evas_textblock_cursor_node_last(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1346    EAPI Eina_Bool                    evas_textblock_cursor_node_next(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1347    EAPI Eina_Bool                    evas_textblock_cursor_node_prev(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1348    EAPI Eina_Bool                    evas_textblock_cursor_char_next(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1349    EAPI Eina_Bool                    evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1350    EAPI void                         evas_textblock_cursor_char_first(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1351    EAPI void                         evas_textblock_cursor_char_last(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1352    EAPI void                         evas_textblock_cursor_line_first(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1353    EAPI void                         evas_textblock_cursor_line_last(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1354    EAPI int                          evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1355    EAPI void                         evas_textblock_cursor_pos_set(Evas_Textblock_Cursor *cur, int pos) EINA_ARG_NONNULL(1);
1356    EAPI Eina_Bool                    evas_textblock_cursor_line_set(Evas_Textblock_Cursor *cur, int line) EINA_ARG_NONNULL(1);
1357    EAPI int                          evas_textblock_cursor_compare(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
1358    EAPI void                         evas_textblock_cursor_copy(const Evas_Textblock_Cursor *cur, Evas_Textblock_Cursor *cur_dest) EINA_ARG_NONNULL(1, 2);
1359
1360    EAPI void                         evas_textblock_cursor_text_append(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
1361    EAPI void                         evas_textblock_cursor_text_prepend(Evas_Textblock_Cursor *cur, const char *text) EINA_ARG_NONNULL(1, 2);
1362
1363    EAPI void                         evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur, const char *format) EINA_ARG_NONNULL(1, 2);
1364    EAPI void                         evas_textblock_cursor_format_prepend(Evas_Textblock_Cursor *cur, const char *format) EINA_ARG_NONNULL(1, 2);
1365    EAPI void                         evas_textblock_cursor_node_delete(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1366    EAPI void                         evas_textblock_cursor_char_delete(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
1367    EAPI void                         evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_Cursor *cur2) EINA_ARG_NONNULL(1, 2);
1368
1369    EAPI const char                  *evas_textblock_cursor_node_text_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1370    EAPI int                          evas_textblock_cursor_node_text_length_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1371    EAPI const char                  *evas_textblock_cursor_node_format_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1372    EAPI Eina_Bool                    evas_textblock_cursor_node_format_is_visible_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1373    EAPI char                        *evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
1374
1375    EAPI int                          evas_textblock_cursor_char_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
1376    EAPI int                          evas_textblock_cursor_line_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
1377    EAPI Eina_Bool                    evas_textblock_cursor_char_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord x, Evas_Coord y) EINA_ARG_NONNULL(1);
1378    EAPI int                          evas_textblock_cursor_line_coord_set(Evas_Textblock_Cursor *cur, Evas_Coord y) EINA_ARG_NONNULL(1);
1379    EAPI Eina_List                   *evas_textblock_cursor_range_geometry_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
1380    EAPI Eina_Bool                    evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
1381
1382    EAPI Eina_Bool                    evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1383    EAPI void                         evas_textblock_cursor_eol_set(Evas_Textblock_Cursor *cur, Eina_Bool eol) EINA_ARG_NONNULL(1);
1384
1385    EAPI Eina_Bool                    evas_object_textblock_line_number_geometry_get(const Evas_Object *obj, int line, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
1386    EAPI void                         evas_object_textblock_clear(Evas_Object *obj) EINA_ARG_NONNULL(1);
1387    EAPI void                         evas_object_textblock_size_formatted_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1388    EAPI void                         evas_object_textblock_size_native_get(const Evas_Object *obj, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1389    EAPI void                         evas_object_textblock_style_insets_get(const Evas_Object *obj, Evas_Coord *l, Evas_Coord *r, Evas_Coord *t, Evas_Coord *b) EINA_ARG_NONNULL(1);
1390
1391 /**
1392  * @defgroup Evas_Line_Group Line Object Functions
1393  *
1394  * Functions used to deal with evas line objects.
1395  *
1396  * @ingroup Evas_Object_Specific
1397  */
1398    EAPI Evas_Object      *evas_object_line_add              (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1399    EAPI void              evas_object_line_xy_set           (Evas_Object *obj, Evas_Coord x1, Evas_Coord y1, Evas_Coord x2, Evas_Coord y2);
1400    EAPI void              evas_object_line_xy_get           (const Evas_Object *obj, Evas_Coord *x1, Evas_Coord *y1, Evas_Coord *x2, Evas_Coord *y2);
1401
1402 /**
1403  * @defgroup Evas_Object_Polygon Polygon Object Functions
1404  *
1405  * Functions that operate on evas polygon objects.
1406  *
1407  * Hint: as evas does not provide ellipse, smooth paths or circle, one
1408  * can calculate points and convert these to a polygon.
1409  *
1410  * @ingroup Evas_Object_Specific
1411  */
1412    EAPI Evas_Object      *evas_object_polygon_add           (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1413    EAPI void              evas_object_polygon_point_add     (Evas_Object *obj, Evas_Coord x, Evas_Coord y) EINA_ARG_NONNULL(1);
1414    EAPI void              evas_object_polygon_points_clear  (Evas_Object *obj) EINA_ARG_NONNULL(1);
1415
1416 /**
1417  * @defgroup Evas_Object_Gradient_Group Gradient Object Functions
1418  *
1419  * Functions that work on evas gradient objects.
1420  *
1421  * @ingroup Evas_Object_Specific
1422  */
1423    EAPI Evas_Object      *evas_object_gradient_add            (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1424    EAPI void              evas_object_gradient_color_stop_add (Evas_Object *obj, int r, int g, int b, int a, int delta) EINA_ARG_NONNULL(1);
1425    EAPI void              evas_object_gradient_alpha_stop_add (Evas_Object *obj, int a, int delta) EINA_ARG_NONNULL(1);
1426    EAPI void              evas_object_gradient_color_data_set (Evas_Object *obj, void *color_data, int len, Eina_Bool has_alpha) EINA_ARG_NONNULL(1, 2);
1427    EAPI void              evas_object_gradient_alpha_data_set (Evas_Object *obj, void *alpha_data, int len) EINA_ARG_NONNULL(1, 2);
1428    EAPI void              evas_object_gradient_clear          (Evas_Object *obj) EINA_ARG_NONNULL(1);
1429    EAPI void              evas_object_gradient_type_set       (Evas_Object *obj, const char *type, const char *instance_params) EINA_ARG_NONNULL(1, 2);
1430    EAPI void              evas_object_gradient_type_get       (const Evas_Object *obj, char **type, char **instance_params) EINA_ARG_NONNULL(1, 2);
1431    EAPI void              evas_object_gradient_fill_set       (Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
1432    EAPI void              evas_object_gradient_fill_get       (const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1433    EAPI void              evas_object_gradient_fill_angle_set (Evas_Object *obj, Evas_Angle angle) EINA_ARG_NONNULL(1);
1434    EAPI Evas_Angle        evas_object_gradient_fill_angle_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1435    EAPI void              evas_object_gradient_fill_spread_set(Evas_Object *obj, int tile_mode) EINA_ARG_NONNULL(1);
1436    EAPI int               evas_object_gradient_fill_spread_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1437    EAPI void              evas_object_gradient_angle_set      (Evas_Object *obj, Evas_Angle angle) EINA_ARG_NONNULL(1);
1438    EAPI Evas_Angle        evas_object_gradient_angle_get      (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1439    EAPI void              evas_object_gradient_direction_set  (Evas_Object *obj, int direction) EINA_ARG_NONNULL(1);
1440    EAPI int               evas_object_gradient_direction_get  (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1441    EAPI void              evas_object_gradient_offset_set     (Evas_Object *obj, float offset) EINA_ARG_NONNULL(1);
1442    EAPI float             evas_object_gradient_offset_get     (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1443
1444 /**
1445  * @defgroup Evas_Object_Gradient2_Group Gradient2 Object Functions
1446  *
1447  * Functions that work on evas gradient2 objects.
1448  *
1449  * @ingroup Evas_Object_Specific
1450  */
1451    EAPI void              evas_object_gradient2_color_np_stop_insert (Evas_Object *obj, int r, int g, int b, int a, float pos) EINA_ARG_NONNULL(1);
1452    EAPI void              evas_object_gradient2_fill_spread_set      (Evas_Object *obj, int tile_mode) EINA_ARG_NONNULL(1);
1453    EAPI int               evas_object_gradient2_fill_spread_get      (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1454    EAPI void              evas_object_gradient2_fill_transform_set   (Evas_Object *obj, Evas_Transform *t) EINA_ARG_NONNULL(1);
1455    EAPI void              evas_object_gradient2_fill_transform_get   (const Evas_Object *obj, Evas_Transform *t) EINA_ARG_NONNULL(1);
1456
1457 /* linear gradient2 objects */
1458    EAPI Evas_Object      *evas_object_gradient2_linear_add      (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1459    EAPI void              evas_object_gradient2_linear_fill_set (Evas_Object *obj, float x0, float y0, float x1, float y1) EINA_ARG_NONNULL(1);
1460    EAPI void              evas_object_gradient2_linear_fill_get (const Evas_Object *obj, float *x0, float *y0, float *x1, float *y1) EINA_ARG_NONNULL(1);
1461
1462 /* radial gradient2 objects */
1463    EAPI Evas_Object      *evas_object_gradient2_radial_add      (Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1464    EAPI void              evas_object_gradient2_radial_fill_set (Evas_Object *obj, float cx, float cy, float rx, float ry) EINA_ARG_NONNULL(1);
1465    EAPI void              evas_object_gradient2_radial_fill_get (const Evas_Object *obj, float *cx, float *cy, float *rx, float *ry) EINA_ARG_NONNULL(1);
1466
1467
1468 /**
1469  * @defgroup Evas_Smart_Group Smart Functions
1470  *
1471  * Functions that deal with Evas_Smart's, creating definition
1472  * (classes) of objects that will have customized behavior for methods
1473  * like evas_object_move(), evas_object_resize(),
1474  * evas_object_clip_set() and others.
1475  *
1476  * These objects will accept the generic methods defined in @ref
1477  * Evas_Object_Group and the extensions defined in @ref
1478  * Evas_Smart_Object_Group. There are couple of existent smart objects
1479  * in Evas itself, see @ref Evas_Object_Box, @ref Evas_Object_Table
1480  * and @ref Evas_Smart_Object_Clipped.
1481  */
1482
1483 /**
1484  * @def EVAS_SMART_CLASS_VERSION
1485  * The version you have to put into the version field in the smart
1486  * class struct
1487  * @ingroup Evas_Smart_Group
1488  */
1489 #define EVAS_SMART_CLASS_VERSION 4
1490 /**
1491  * @struct _Evas_Smart_Class
1492  * a smart object class
1493  * @ingroup Evas_Smart_Group
1494  */
1495 struct _Evas_Smart_Class
1496 {
1497    const char *name; /**< the string name of the class */
1498
1499    int version;
1500
1501    void  (*add)         (Evas_Object *o);
1502    void  (*del)         (Evas_Object *o);
1503    void  (*move)        (Evas_Object *o, Evas_Coord x, Evas_Coord y);
1504    void  (*resize)      (Evas_Object *o, Evas_Coord w, Evas_Coord h);
1505    void  (*show)        (Evas_Object *o);
1506    void  (*hide)        (Evas_Object *o);
1507    void  (*color_set)   (Evas_Object *o, int r, int g, int b, int a);
1508    void  (*clip_set)    (Evas_Object *o, Evas_Object *clip);
1509    void  (*clip_unset)  (Evas_Object *o);
1510    void  (*calculate)   (Evas_Object *o);
1511    void  (*member_add)  (Evas_Object *o, Evas_Object *child);
1512    void  (*member_del)  (Evas_Object *o, Evas_Object *child);
1513
1514    const Evas_Smart_Class *parent; /**< this class inherits from this parent */
1515    const Evas_Smart_Cb_Description *callbacks; /**< callbacks at this level, NULL terminated */
1516
1517    void *interfaces; /**< to be used in a future near you */
1518
1519    const void *data;
1520 };
1521
1522 /**
1523  * @struct _Evas_Smart_Cb_Description
1524  *
1525  * Describes a callback used by a smart class
1526  * evas_object_smart_callback_call(), particularly useful to explain
1527  * to user and its code (ie: introspection) what the parameter @c
1528  * event_info will contain.
1529  *
1530  * @ingroup Evas_Smart_Group
1531  */
1532 struct _Evas_Smart_Cb_Description
1533 {
1534    const char *name; /**< callback name, ie: "changed" */
1535
1536    /**
1537     * @brief Hint type of @c event_info parameter of Evas_Smart_Cb.
1538     *
1539     * The type string uses the pattern similar to
1540     *
1541     * http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-signatures
1542     *
1543     * but extended to optionally include variable names within
1544     * brackets preceding types. Example:
1545     *
1546     * @li Structure with two integers:
1547     *     @c "(ii)"
1548     *
1549     * @li Structure called 'x' with two integers named 'a' and 'b':
1550     *     @c "[x]([a]i[b]i)"
1551     *
1552     * @li Array of integers:
1553     *     @c "ai"
1554     *
1555     * @li Array called 'x' of struct with two integers:
1556     *     @c "[x]a(ii)"
1557     *
1558     * @note This type string is used as a hint and is @b not validated
1559     *       or enforced anyhow. Implementors should make the best use
1560     *       of it to help bindings, documentation and other users of
1561     *       introspection features.
1562     */
1563    const char *type;
1564 };
1565
1566 /**
1567  * @def EVAS_SMART_CLASS_INIT_NULL
1568  * Initializer to zero a whole Evas_Smart_Class structure.
1569  *
1570  * @see EVAS_SMART_CLASS_INIT_VERSION
1571  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION
1572  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT
1573  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS
1574  * @ingroup Evas_Smart_Group
1575  */
1576 #define EVAS_SMART_CLASS_INIT_NULL {NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
1577
1578 /**
1579  * @def EVAS_SMART_CLASS_INIT_VERSION
1580  * Initializer to zero a whole Evas_Smart_Class structure and set version.
1581  *
1582  * Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to
1583  * latest EVAS_SMART_CLASS_VERSION.
1584  *
1585  * @see EVAS_SMART_CLASS_INIT_NULL
1586  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION
1587  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT
1588  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS
1589  * @ingroup Evas_Smart_Group
1590  */
1591 #define EVAS_SMART_CLASS_INIT_VERSION {NULL, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
1592
1593 /**
1594  * @def EVAS_SMART_CLASS_INIT_NAME_VERSION
1595  * Initializer to zero a whole Evas_Smart_Class structure and set name
1596  * and version.
1597  *
1598  * Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to
1599  * latest EVAS_SMART_CLASS_VERSION and name to the specified value.
1600  *
1601  * It will keep a reference to name field as a "const char *", that is,
1602  * name must be available while the structure is used (hint: static or global!)
1603  * and will not be modified.
1604  *
1605  * @see EVAS_SMART_CLASS_INIT_NULL
1606  * @see EVAS_SMART_CLASS_INIT_VERSION
1607  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT
1608  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS
1609  * @ingroup Evas_Smart_Group
1610  */
1611 #define EVAS_SMART_CLASS_INIT_NAME_VERSION(name) {name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
1612
1613 /**
1614  * @def EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT
1615  * Initializer to zero a whole Evas_Smart_Class structure and set name,
1616  * version and parent class.
1617  *
1618  * Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to
1619  * latest EVAS_SMART_CLASS_VERSION, name to the specified value and
1620  * parent class.
1621  *
1622  * It will keep a reference to name field as a "const char *", that is,
1623  * name must be available while the structure is used (hint: static or global!)
1624  * and will not be modified. Similarly, parent reference will be kept.
1625  *
1626  * @see EVAS_SMART_CLASS_INIT_NULL
1627  * @see EVAS_SMART_CLASS_INIT_VERSION
1628  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION
1629  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS
1630  * @ingroup Evas_Smart_Group
1631  */
1632 #define EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT(name, parent) {name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, parent, NULL, NULL}
1633
1634 /**
1635  * @def EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS
1636  * Initializer to zero a whole Evas_Smart_Class structure and set name,
1637  * version, parent class and callbacks definition.
1638  *
1639  * Similar to EVAS_SMART_CLASS_INIT_NULL, but will set version field to
1640  * latest EVAS_SMART_CLASS_VERSION, name to the specified value, parent
1641  * class and callbacks at this level.
1642  *
1643  * It will keep a reference to name field as a "const char *", that is,
1644  * name must be available while the structure is used (hint: static or global!)
1645  * and will not be modified. Similarly, parent and callbacks reference
1646  * will be kept.
1647  *
1648  * @see EVAS_SMART_CLASS_INIT_NULL
1649  * @see EVAS_SMART_CLASS_INIT_VERSION
1650  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION
1651  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT
1652  * @ingroup Evas_Smart_Group
1653  */
1654 #define EVAS_SMART_CLASS_INIT_NAME_VERSION_PARENT_CALLBACKS(name, parent, callbacks) {name, EVAS_SMART_CLASS_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, parent, callbacks, NULL}
1655
1656 /**
1657  * @def EVAS_SMART_SUBCLASS_NEW
1658  *
1659  * Convenience macro to subclass a Smart Class.
1660  *
1661  * This macro saves some typing when writing a Smart Class derived from
1662  * another one. In order to work, the user needs to provide some functions
1663  * adhering to the following guidelines.
1664  *  - @<prefix@>_smart_set_user(): the internal _smart_set function will call
1665  *    this one provided by the user after inheriting everything from the
1666  *    parent, which should take care of setting the right member functions
1667  *    for the class.
1668  *  - @<prefix@>_parent_sc: pointer to the smart class of the parent. When calling
1669  *    parent functions from overloaded ones, use this global variable.
1670  *  - @<prefix@>_smart_class_new(): this function returns the Evas_Smart needed
1671  *    to create smart objects with this class, should be called by the public
1672  *    _add() function.
1673  *  - If this new class should be subclassable as well, a public _smart_set()
1674  *    function is desirable to fill the class used as parent by the children.
1675  *    It's up to the user to provide this interface, which will most likely
1676  *    call @<prefix@>_smart_set() to get the job done.
1677  *
1678  * @param smart_name The name used for the Smart Class. e.g: "Evas_Object_Box".
1679  * @param prefix Prefix used for all variables and functions defined.
1680  * @param api_type Type of the structure used as API for the Smart Class. Either Evas_Smart_Class or something derived from it.
1681  * @param parent_type Type of the parent class API.
1682  * @param parent_func Function that gets the parent class. e.g: evas_object_box_smart_class_get().
1683  * @param cb_desc Array of callback descriptions for this Smart Class.
1684  *
1685  * @ingroup Evas_Smart_Group
1686  */
1687 #define EVAS_SMART_SUBCLASS_NEW(smart_name, prefix, api_type, parent_type, parent_func, cb_desc) \
1688   static const parent_type * prefix##_parent_sc = NULL;                 \
1689   static void prefix##_smart_set_user(api_type *api);                   \
1690   static void prefix##_smart_set(api_type *api)                         \
1691   {                                                                     \
1692      Evas_Smart_Class *sc;                                              \
1693      if (!(sc = (Evas_Smart_Class *)api))                               \
1694        return;                                                          \
1695      if (!prefix##_parent_sc)                                           \
1696        prefix##_parent_sc = parent_func();                              \
1697      evas_smart_class_inherit(sc, (const Evas_Smart_Class *)prefix##_parent_sc); \
1698      prefix##_smart_set_user(api);                                      \
1699   }                                                                     \
1700   static Evas_Smart * prefix##_smart_class_new(void)                    \
1701   {                                                                     \
1702      static Evas_Smart *smart = NULL;                                   \
1703      static api_type api;                                               \
1704      if (!smart)                                                        \
1705        {                                                                \
1706           Evas_Smart_Class *sc = (Evas_Smart_Class *)&api;              \
1707           memset(&api, 0, sizeof(api_type));                            \
1708           sc->version = EVAS_SMART_CLASS_VERSION;                       \
1709           sc->name = smart_name;                                        \
1710           sc->callbacks = cb_desc;                                      \
1711           prefix##_smart_set(&api);                                     \
1712           smart = evas_smart_class_new(sc);                             \
1713        }                                                                \
1714      return smart;                                                      \
1715   }
1716
1717 /**
1718  * @def EVAS_SMART_DATA_ALLOC
1719  * Convenience macro to allocate smart data only if needed.
1720  *
1721  * When writing a subclassable smart object, the .add function will need
1722  * to check if the smart private data was already allocated by some child
1723  * object or not. This macro makes it easier to do it.
1724  *
1725  * @param o Evas object passed to the .add function
1726  * @param priv_type The type of the data to allocate
1727  * @ingroup Evas_Smart_Group
1728  */
1729 #define EVAS_SMART_DATA_ALLOC(o, priv_type)                     \
1730   priv_type *priv;                                              \
1731   priv = evas_object_smart_data_get(o);                 \
1732   if (!priv)                                                    \
1733     {                                                           \
1734        priv = (priv_type *)calloc(1, sizeof(priv_type));        \
1735        if (!priv)                                               \
1736          return;                                                \
1737        evas_object_smart_data_set(o, priv);                     \
1738     }
1739
1740    EINA_DEPRECATED EAPI Evas_Smart *evas_smart_new          (const char *name, void (*func_add) (Evas_Object *obj), void (*func_del) (Evas_Object *obj), void (*func_layer_set) (Evas_Object *obj, int l), void (*func_raise) (Evas_Object *obj), void (*func_lower) (Evas_Object *obj), void (*func_stack_above) (Evas_Object *obj, Evas_Object *above), void (*func_stack_below) (Evas_Object *obj, Evas_Object *below), void (*func_move) (Evas_Object *obj, Evas_Coord x, Evas_Coord y), void (*func_resize) (Evas_Object *obj, Evas_Coord w, Evas_Coord h), void (*func_show) (Evas_Object *obj), void (*func_hide) (Evas_Object *obj), void (*func_color_set) (Evas_Object *obj, int r, int g, int b, int a), void (*func_clip_set) (Evas_Object *obj, Evas_Object *clip), void (*func_clip_unset) (Evas_Object *obj), const void *data) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1741    EAPI void              evas_smart_free                   (Evas_Smart *s) EINA_ARG_NONNULL(1);
1742    EAPI Evas_Smart       *evas_smart_class_new              (const Evas_Smart_Class *sc) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
1743    EAPI const Evas_Smart_Class *evas_smart_class_get        (const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1744
1745    EAPI void             *evas_smart_data_get               (const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1746    EAPI const Evas_Smart_Cb_Description *evas_smart_callback_description_find(const Evas_Smart *s, const char *name) EINA_ARG_NONNULL(1, 2) EINA_PURE;
1747
1748   EAPI Eina_Bool         evas_smart_class_inherit_full      (Evas_Smart_Class *sc, const Evas_Smart_Class *parent_sc, unsigned int parent_sc_size) EINA_ARG_NONNULL(1, 2);
1749   /**
1750    * @def evas_smart_class_inherit
1751    * Easy to use version of evas_smart_class_inherit_full().
1752    *
1753    * This version will use sizeof(parent_sc), copying everything.
1754    *
1755    * @param sc child class, will have methods copied from @a parent_sc
1756    * @param parent_sc parent class, will provide contents to be copied.
1757    * @return 1 on success, 0 on failure.
1758    * @ingroup Evas_Smart_Group
1759    */
1760 #define evas_smart_class_inherit(sc, parent_sc) evas_smart_class_inherit_full(sc, parent_sc, sizeof(*parent_sc))
1761
1762 /**
1763  * @defgroup Evas_Smart_Object_Group Smart Object Functions
1764  *
1765  * Functions dealing with evas smart objects (instances).
1766  *
1767  * Smart objects are groupings of primitive evas objects that behave as a
1768  * cohesive group. For instance, a file manager icon may be a smart object
1769  * composed of an image object, a text label and two rectangles that appear
1770  * behind the image and text when the icon is selected. As a smart object,
1771  * the normal evas api could be used on the icon object.
1772  *
1773  * @see @ref Evas_Smart_Group for class definitions.
1774  */
1775    EAPI Evas_Object      *evas_object_smart_add             (Evas *e, Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_MALLOC;
1776    EAPI void              evas_object_smart_member_add      (Evas_Object *obj, Evas_Object *smart_obj) EINA_ARG_NONNULL(1, 2);
1777    EAPI void              evas_object_smart_member_del      (Evas_Object *obj) EINA_ARG_NONNULL(1);
1778    EAPI Evas_Object      *evas_object_smart_parent_get      (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1779    EAPI Eina_Bool         evas_object_smart_type_check      (const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
1780    EAPI Eina_Bool         evas_object_smart_type_check_ptr  (const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
1781    EAPI Eina_List        *evas_object_smart_members_get     (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1782    EAPI Evas_Smart       *evas_object_smart_smart_get       (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1783    EAPI void             *evas_object_smart_data_get        (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1784    EAPI void              evas_object_smart_data_set        (Evas_Object *obj, void *data) EINA_ARG_NONNULL(1);
1785    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);
1786    EAPI void             *evas_object_smart_callback_del    (Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3);
1787    EAPI void              evas_object_smart_callback_call   (Evas_Object *obj, const char *event, void *event_info) EINA_ARG_NONNULL(1, 2);
1788
1789    EAPI Eina_Bool         evas_object_smart_callbacks_descriptions_set(Evas_Object *obj, const Evas_Smart_Cb_Description *descriptions) EINA_ARG_NONNULL(1);
1790    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) EINA_ARG_NONNULL(1);
1791    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(1, 2);
1792
1793    EAPI void              evas_object_smart_changed         (Evas_Object *obj) EINA_ARG_NONNULL(1);
1794    EAPI void              evas_object_smart_need_recalculate_set(Evas_Object *obj, Eina_Bool value) EINA_ARG_NONNULL(1);
1795    EAPI Eina_Bool         evas_object_smart_need_recalculate_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1796    EAPI void              evas_object_smart_calculate       (Evas_Object *obj) EINA_ARG_NONNULL(1);
1797
1798    EAPI void              evas_smart_objects_calculate      (Evas *e);
1799
1800
1801 /**
1802  * @defgroup Evas_Smart_Object_Clipped Clipped Smart Object
1803  *
1804  * Clipped smart object is a base to construct other smart objects
1805  * that based on the concept of having an internal clipper that is
1806  * applied to all its other children. This clipper will control the
1807  * visibility, clipping and color of sibling objects (remember that
1808  * the clipping is recursive, and clipper color modulates the color of
1809  * its clippees). By default, this base will also move children
1810  * relatively to the parent, and delete them when parent is
1811  * deleted. In other words, it is the base for simple object grouping.
1812  *
1813  * @see evas_object_smart_clipped_smart_set()
1814  *
1815  * @ingroup Evas_Smart_Object_Group
1816  */
1817
1818 /**
1819  * Every subclass should provide this at the beginning of their own
1820  * data set with evas_object_smart_data_set().
1821  */
1822   typedef struct _Evas_Object_Smart_Clipped_Data Evas_Object_Smart_Clipped_Data;
1823   struct _Evas_Object_Smart_Clipped_Data
1824   {
1825      Evas_Object *clipper;
1826      Evas *evas;
1827   };
1828
1829    EAPI Evas_Object *evas_object_smart_clipped_clipper_get(Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
1830    EAPI void evas_object_smart_clipped_smart_set(Evas_Smart_Class *sc) EINA_ARG_NONNULL(1);
1831    EAPI const Evas_Smart_Class *evas_object_smart_clipped_class_get(void) EINA_CONST;
1832
1833    EAPI void evas_object_smart_move_children_relative(Evas_Object *obj, Evas_Coord dx, Evas_Coord dy) EINA_ARG_NONNULL(1);
1834
1835 /**
1836  * @defgroup Evas_Object_Box Box (Sequence) Smart Object.
1837  *
1838  * Convenience smart object that packs children as a sequence using
1839  * a layout function specified by user. There are a couple of helper
1840  * layout functions, all of them using children size hints to define
1841  * their size and alignment inside their cell space.
1842  *
1843  * @see @ref Evas_Object_Group_Size_Hints
1844  *
1845  * @ingroup Evas_Smart_Object_Group
1846  */
1847 /**
1848  * @typedef Evas_Object_Box_Api
1849  * Smart Class extension providing extra box requirements.
1850  * @ingroup Evas_Object_Box
1851  */
1852    typedef struct _Evas_Object_Box_Api        Evas_Object_Box_Api;
1853 /**
1854  * @typedef Evas_Object_Box_Data
1855  * Smart instance data providing box requirements.
1856  * @ingroup Evas_Object_Box
1857  */
1858    typedef struct _Evas_Object_Box_Data       Evas_Object_Box_Data;
1859 /**
1860  * @typedef Evas_Object_Box_Option
1861  * The base structure for a box option.
1862  * @ingroup Evas_Object_Box
1863  */
1864    typedef struct _Evas_Object_Box_Option     Evas_Object_Box_Option;
1865    typedef void (*Evas_Object_Box_Layout)(Evas_Object *o, Evas_Object_Box_Data *priv, void *user_data);
1866
1867 /**
1868  * @def EVAS_OBJECT_BOX_API_VERSION
1869  * @ingroup Evas_Object_Box
1870  */
1871 #define EVAS_OBJECT_BOX_API_VERSION 1
1872 /**
1873  * @struct _Evas_Object_Box_Api
1874  *
1875  * This structure should be used by any class that wants to inherit
1876  * from box to provide custom behavior not allowed only by providing a
1877  * layout function with evas_object_box_layout_set().
1878  *
1879  * @extends Evas_Smart_Class
1880  * @ingroup Evas_Object_Box
1881  */
1882    struct _Evas_Object_Box_Api
1883    {
1884       Evas_Smart_Class base;
1885       int version;
1886       Evas_Object_Box_Option *(*append)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object *child);
1887       Evas_Object_Box_Option *(*prepend)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object *child);
1888       Evas_Object_Box_Option *(*insert_before)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object *child, const Evas_Object *reference);
1889       Evas_Object_Box_Option *(*insert_after)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object *child, const Evas_Object *reference);
1890       Evas_Object_Box_Option *(*insert_at)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object *child, unsigned int pos);
1891       Evas_Object            *(*remove)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object *child);
1892       Evas_Object            *(*remove_at)(Evas_Object *o, Evas_Object_Box_Data *priv, unsigned int pos);
1893       Eina_Bool               (*property_set)(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args);
1894       Eina_Bool               (*property_get)(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args);
1895       const char             *(*property_name_get)(Evas_Object *o, int property);
1896       int                     (*property_id_get)(Evas_Object *o, const char *name);
1897       Evas_Object_Box_Option *(*option_new)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object *child);
1898       void                    (*option_free)(Evas_Object *o, Evas_Object_Box_Data *priv, Evas_Object_Box_Option *opt);
1899    };
1900
1901 /**
1902  * @def EVAS_OBJECT_BOX_API_INIT
1903  * Initializer for whole Evas_Object_Box_Api structure.
1904  *
1905  * @param smart_class_init initializer to use for the "base" field
1906  * (Evas_Smart_Class).
1907  *
1908  * @see EVAS_SMART_CLASS_INIT_NULL
1909  * @see EVAS_SMART_CLASS_INIT_VERSION
1910  * @see EVAS_SMART_CLASS_INIT_NAME_VERSION
1911  * @see EVAS_OBJECT_BOX_API_INIT_NULL
1912  * @see EVAS_OBJECT_BOX_API_INIT_VERSION
1913  * @see EVAS_OBJECT_BOX_API_INIT_NAME_VERSION
1914  * @ingroup Evas_Object_Box
1915  */
1916 #define EVAS_OBJECT_BOX_API_INIT(smart_class_init) {smart_class_init, EVAS_OBJECT_BOX_API_VERSION, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
1917
1918 /**
1919  * @def EVAS_OBJECT_BOX_API_INIT_NULL
1920  * Initializer to zero a whole Evas_Object_Box_Api structure.
1921  *
1922  * @see EVAS_OBJECT_BOX_API_INIT_VERSION
1923  * @see EVAS_OBJECT_BOX_API_INIT_NAME_VERSION
1924  * @see EVAS_OBJECT_BOX_API_INIT
1925  * @ingroup Evas_Object_Box
1926  */
1927 #define EVAS_OBJECT_BOX_API_INIT_NULL EVAS_OBJECT_BOX_API_INIT(EVAS_SMART_CLASS_INIT_NULL)
1928
1929 /**
1930  * @def EVAS_OBJECT_BOX_API_INIT_VERSION
1931  * Initializer to zero a whole Evas_Object_Box_Api structure and set version.
1932  *
1933  * Similar to EVAS_OBJECT_BOX_API_INIT_NULL, but will set version field of
1934  * Evas_Smart_Class (base field) to latest EVAS_SMART_CLASS_VERSION
1935  *
1936  * @see EVAS_OBJECT_BOX_API_INIT_NULL
1937  * @see EVAS_OBJECT_BOX_API_INIT_NAME_VERSION
1938  * @see EVAS_OBJECT_BOX_API_INIT
1939  * @ingroup Evas_Object_Box
1940  */
1941 #define EVAS_OBJECT_BOX_API_INIT_VERSION EVAS_OBJECT_BOX_API_INIT(EVAS_SMART_CLASS_INIT_VERSION)
1942
1943 /**
1944  * @def EVAS_OBJECT_BOX_API_INIT_NAME_VERSION
1945  * Initializer to zero a whole Evas_Object_Box_Api structure and set
1946  * name and version.
1947  *
1948  * Similar to EVAS_OBJECT_BOX_API_INIT_NULL, but will set version field of
1949  * Evas_Smart_Class (base field) to latest EVAS_SMART_CLASS_VERSION and name
1950  * to the specific value.
1951  *
1952  * It will keep a reference to name field as a "const char *", that is,
1953  * name must be available while the structure is used (hint: static or global!)
1954  * and will not be modified.
1955  *
1956  * @see EVAS_OBJECT_BOX_API_INIT_NULL
1957  * @see EVAS_OBJECT_BOX_API_INIT_VERSION
1958  * @see EVAS_OBJECT_BOX_API_INIT
1959  * @ingroup Evas_Object_Box
1960  */
1961 #define EVAS_OBJECT_BOX_API_INIT_NAME_VERSION(name) EVAS_OBJECT_BOX_API_INIT(EVAS_SMART_CLASS_INIT_NAME_VERSION(name))
1962
1963 /**
1964  * @struct _Evas_Object_Box_Data
1965  *
1966  * This structure augments clipped smart object's instance data,
1967  * providing extra members required by generic box implementation. If
1968  * a subclass inherits from #Evas_Object_Box_Api then it may augment
1969  * #Evas_Object_Box_Data to fit its own needs.
1970  *
1971  * @extends Evas_Object_Smart_Clipped_Data
1972  * @ingroup Evas_Object_Box
1973  */
1974    struct _Evas_Object_Box_Data
1975    {
1976       Evas_Object_Smart_Clipped_Data base;
1977       const Evas_Object_Box_Api *api;
1978       struct {
1979          double h, v;
1980       } align;
1981       struct {
1982          Evas_Coord h, v;
1983       } pad;
1984       Eina_List *children;
1985       struct {
1986          Evas_Object_Box_Layout cb;
1987          void *data;
1988          void (*free_data)(void *data);
1989       } layout;
1990       Eina_Bool layouting : 1;
1991    };
1992
1993    struct _Evas_Object_Box_Option
1994    {
1995       Evas_Object *obj;
1996    };
1997
1998    EAPI void evas_object_box_smart_set(Evas_Object_Box_Api *api) EINA_ARG_NONNULL(1);
1999    EAPI const Evas_Object_Box_Api *evas_object_box_smart_class_get(void) EINA_CONST;
2000    EAPI void evas_object_box_layout_set(Evas_Object *o, Evas_Object_Box_Layout cb, const void *data, void (*free_data)(void *data)) EINA_ARG_NONNULL(1, 2);
2001
2002    EAPI Evas_Object *evas_object_box_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2003    EAPI Evas_Object *evas_object_box_add_to(Evas_Object *parent) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2004
2005    EAPI void evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2006    EAPI void evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2007    EAPI void evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2008    EAPI void evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2009    EAPI void evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2010    EAPI void evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2011    EAPI void evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2012    EAPI void evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2013    EAPI void evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv, void *data) EINA_ARG_NONNULL(1, 2);
2014
2015    EAPI void   evas_object_box_align_set(Evas_Object *o, double horizontal, double vertical) EINA_ARG_NONNULL(1);
2016    EAPI void   evas_object_box_align_get(const Evas_Object *o, double *horizontal, double *vertical) EINA_ARG_NONNULL(1);
2017    EAPI void   evas_object_box_padding_set(Evas_Object *o, Evas_Coord horizontal, Evas_Coord vertical) EINA_ARG_NONNULL(1);
2018    EAPI void   evas_object_box_padding_get(const Evas_Object *o, Evas_Coord *horizontal, Evas_Coord *vertical) EINA_ARG_NONNULL(1);
2019
2020    EAPI Evas_Object_Box_Option *evas_object_box_append(Evas_Object *o, Evas_Object *child) EINA_ARG_NONNULL(1, 2);
2021    EAPI Evas_Object_Box_Option *evas_object_box_prepend(Evas_Object *o, Evas_Object *child) EINA_ARG_NONNULL(1, 2);
2022    EAPI Evas_Object_Box_Option *evas_object_box_insert_before(Evas_Object *o, Evas_Object *child, const Evas_Object *reference) EINA_ARG_NONNULL(1, 2, 3);
2023    EAPI Evas_Object_Box_Option *evas_object_box_insert_after(Evas_Object *o, Evas_Object *child, const Evas_Object *referente) EINA_ARG_NONNULL(1, 2, 3);
2024    EAPI Evas_Object_Box_Option *evas_object_box_insert_at(Evas_Object *o, Evas_Object *child, unsigned int pos) EINA_ARG_NONNULL(1, 2);
2025    EAPI Eina_Bool               evas_object_box_remove(Evas_Object *o, Evas_Object *child) EINA_ARG_NONNULL(1, 2);
2026    EAPI Eina_Bool               evas_object_box_remove_at(Evas_Object *o, unsigned int pos) EINA_ARG_NONNULL(1);
2027    EAPI Eina_Bool               evas_object_box_remove_all(Evas_Object *o, Eina_Bool clear) EINA_ARG_NONNULL(1);
2028    EAPI Eina_Iterator          *evas_object_box_iterator_new(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2029    EAPI Eina_Accessor          *evas_object_box_accessor_new(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2030    EAPI Eina_List              *evas_object_box_children_get(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2031
2032    EAPI const char *evas_object_box_option_property_name_get(Evas_Object *o, int property) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2033    EAPI int         evas_object_box_option_property_id_get(Evas_Object *o, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2034    EAPI Eina_Bool   evas_object_box_option_property_set(Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
2035    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);
2036    EAPI Eina_Bool   evas_object_box_option_property_get(Evas_Object *o, Evas_Object_Box_Option *opt, int property, ...) EINA_ARG_NONNULL(1, 2);
2037    EAPI Eina_Bool   evas_object_box_option_property_vget(Evas_Object *o, Evas_Object_Box_Option *opt, int property, va_list args) EINA_ARG_NONNULL(1, 2);
2038
2039
2040 /**
2041  * @defgroup Evas_Object_Table Table Smart Object.
2042  *
2043  * Convenience smart object that packs children using a tabular
2044  * layout using children size hints to define their size and
2045  * alignment inside their cell space.
2046  *
2047  * @see @ref Evas_Object_Group_Size_Hints
2048  *
2049  * @ingroup Evas_Smart_Object_Group
2050  */
2051    EAPI Evas_Object *evas_object_table_add(Evas *evas) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2052    EAPI Evas_Object *evas_object_table_add_to(Evas_Object *parent) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2053    EAPI void         evas_object_table_homogeneous_set(Evas_Object *o, Evas_Object_Table_Homogeneous_Mode homogeneous) EINA_ARG_NONNULL(1);
2054    EAPI Evas_Object_Table_Homogeneous_Mode evas_object_table_homogeneous_get(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2055    EAPI void         evas_object_table_padding_set(Evas_Object *o, Evas_Coord horizontal, Evas_Coord vertical) EINA_ARG_NONNULL(1);
2056    EAPI void         evas_object_table_padding_get(const Evas_Object *o, Evas_Coord *horizontal, Evas_Coord *vertical) EINA_ARG_NONNULL(1);
2057    EAPI void         evas_object_table_align_set(Evas_Object *o, double horizontal, double vertical) EINA_ARG_NONNULL(1);
2058    EAPI void         evas_object_table_align_get(const Evas_Object *o, double *horizontal, double *vertical) EINA_ARG_NONNULL(1);
2059
2060    EAPI Eina_Bool    evas_object_table_pack(Evas_Object *o, Evas_Object *child, unsigned short col, unsigned short row, unsigned short colspan, unsigned short rowspan) EINA_ARG_NONNULL(1, 2);
2061    EAPI Eina_Bool    evas_object_table_unpack(Evas_Object *o, Evas_Object *child) EINA_ARG_NONNULL(1, 2);
2062    EAPI void         evas_object_table_clear(Evas_Object *o, Eina_Bool clear) EINA_ARG_NONNULL(1);
2063
2064    EAPI void         evas_object_table_col_row_size_get(const Evas_Object *o, int *cols, int *rows) EINA_ARG_NONNULL(1);
2065    EAPI Eina_Iterator *evas_object_table_iterator_new(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2066    EAPI Eina_Accessor *evas_object_table_accessor_new(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2067    EAPI Eina_List     *evas_object_table_children_get(const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2068    EAPI Evas_Object   *evas_object_table_child_get(const Evas_Object *o, unsigned short col, unsigned short row) EINA_ARG_NONNULL(1);
2069
2070
2071 /**
2072  * @defgroup Evas_Cserve Shared Image Cache Server
2073  *
2074  * Provides client-server infrastructure to share bitmaps across
2075  * multiple processes, saving data and processing power.
2076  */
2077    typedef struct _Evas_Cserve_Stats Evas_Cserve_Stats;
2078    typedef struct _Evas_Cserve_Image_Cache Evas_Cserve_Image_Cache;
2079    typedef struct _Evas_Cserve_Image Evas_Cserve_Image;
2080    typedef struct _Evas_Cserve_Config Evas_Cserve_Config;
2081
2082 /**
2083  * Statistics about server that shares cached bitmaps.
2084  * @ingroup Evas_Cserve
2085  */
2086    struct _Evas_Cserve_Stats
2087      {
2088         int saved_memory; /**< current saved memory, in bytes */
2089         int wasted_memory; /**< current wasted memory, in bytes */
2090         int saved_memory_peak; /**< peak of saved memory, in bytes */
2091         int wasted_memory_peak; /**< peak of wasted memory, in bytes */
2092         double saved_time_image_header_load;
2093         double saved_time_image_data_load;
2094      };
2095
2096 /**
2097  * Cache of images shared by server.
2098  * @ingroup Evas_Cserve
2099  */
2100    struct _Evas_Cserve_Image_Cache
2101      {
2102         struct {
2103            int mem_total;
2104            int count;
2105         } active, cached;
2106         Eina_List *images;
2107      };
2108
2109 /**
2110  * An image shared by the server.
2111  * @ingroup Evas_Cserve
2112  */
2113    struct _Evas_Cserve_Image
2114      {
2115         const char *file, *key;
2116         int w, h;
2117         time_t file_mod_time;
2118         time_t file_checked_time;
2119         time_t cached_time;
2120         int refcount;
2121         int data_refcount;
2122         int memory_footprint;
2123         double head_load_time;
2124         double data_load_time;
2125         Eina_Bool alpha : 1;
2126         Eina_Bool data_loaded : 1;
2127         Eina_Bool active : 1;
2128         Eina_Bool dead : 1;
2129         Eina_Bool useless : 1;
2130      };
2131
2132 /**
2133  * Configuration that controls the server that shares cached bitmaps.
2134  * @ingroup Evas_Cserve
2135  */
2136     struct _Evas_Cserve_Config
2137      {
2138         int cache_max_usage;
2139         int cache_item_timeout;
2140         int cache_item_timeout_check;
2141      };
2142
2143    EAPI Eina_Bool         evas_cserve_want_get                   (void) EINA_WARN_UNUSED_RESULT EINA_PURE;
2144    EAPI Eina_Bool         evas_cserve_connected_get              (void) EINA_WARN_UNUSED_RESULT;
2145    EAPI Eina_Bool         evas_cserve_stats_get                  (Evas_Cserve_Stats *stats) EINA_WARN_UNUSED_RESULT;
2146    EAPI void              evas_cserve_image_cache_contents_clean (Evas_Cserve_Image_Cache *cache) EINA_PURE;
2147    EAPI Eina_Bool         evas_cserve_config_get                 (Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT EINA_PURE;
2148    EAPI Eina_Bool         evas_cserve_config_set                 (const Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT EINA_PURE;
2149    EAPI void              evas_cserve_disconnect                 (void);
2150
2151
2152 /**
2153  * @defgroup Evas_Utils General Utilities
2154  *
2155  * Some functions that are handy but are not specific of canvas or
2156  * objects.
2157  */
2158    EAPI const char *evas_load_error_str(int error);
2159
2160 /* Evas utility routines for color space conversions */
2161 /* hsv color space has h in the range 0.0 to 360.0, and s,v in the range 0.0 to 1.0 */
2162 /* rgb color space has r,g,b in the range 0 to 255 */
2163    EAPI void              evas_color_hsv_to_rgb             (float h, float s, float v, int *r, int *g, int *b);
2164    EAPI void              evas_color_rgb_to_hsv             (int r, int g, int b, float *h, float *s, float *v);
2165
2166 /* argb color space has a,r,g,b in the range 0 to 255 */
2167    EAPI void              evas_color_argb_premul            (int a, int *r, int *g, int *b);
2168    EAPI void              evas_color_argb_unpremul          (int a, int *r, int *g, int *b);
2169
2170    EAPI void              evas_data_argb_premul             (unsigned int *data, unsigned int len);
2171    EAPI void              evas_data_argb_unpremul           (unsigned int *data, unsigned int len);
2172
2173 /* Evas utility routines for working with transforms */
2174    /* Set t to the identity */
2175    EAPI void              evas_transform_identity_set       (Evas_Transform *t);
2176    /* Left-multiply t by an xy rotation defined by the given angle (in degrees) */
2177    EAPI void              evas_transform_rotate             (double angle, Evas_Transform *t);
2178    /* Left-multiply t by an xy translation defined by the given dx, dy values */
2179    EAPI void              evas_transform_translate          (float dx, float dy, Evas_Transform *t);
2180    /* Left-multiply t by an xy scaling defined by the given sx, sy factors */
2181    EAPI void              evas_transform_scale              (float sx, float sy, Evas_Transform *t);
2182    /* Left-multiply t by an xy shearing defined by the given sh, sv values */
2183    EAPI void              evas_transform_shear              (float sh, float sv, Evas_Transform *t);
2184    /* Left-multiply t by the given transform l */
2185    EAPI void              evas_transform_compose            (Evas_Transform *l, Evas_Transform *t);
2186
2187 /* string and font handling */
2188    EAPI int               evas_string_char_next_get         (const char *str, int pos, int *decoded) EINA_ARG_NONNULL(1);
2189    EAPI int               evas_string_char_prev_get         (const char *str, int pos, int *decoded) EINA_ARG_NONNULL(1);
2190    EAPI int               evas_string_char_len_get          (const char *str) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2191
2192 /**
2193  * @defgroup Evas_Imaging Imaging and Commong GFX
2194  *
2195  * Evas imaging api - exports some of the comon gfx engine routines
2196  * this is not complete and should be considered experimental. use at your
2197  * own risk
2198  */
2199
2200    typedef struct _Evas_Imaging_Image Evas_Imaging_Image;
2201    typedef struct _Evas_Imaging_Font Evas_Imaging_Font;
2202
2203    /**
2204     * Error identifier or EVAS_LOAD_ERROR_NONE. see evas_load_error_str().
2205     * @ingroup Evas_Imaging
2206     */
2207    EAPI extern int          evas_imaging_image_load_error;
2208
2209    EAPI Evas_Imaging_Image *evas_imaging_image_load      (const char *file, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_MALLOC;
2210    EAPI void                evas_imaging_image_free      (Evas_Imaging_Image *im) EINA_ARG_NONNULL(1);
2211    EAPI void                evas_imaging_image_size_get  (const Evas_Imaging_Image *im, int *w, int *h) EINA_ARG_NONNULL(1);
2212    EAPI Eina_Bool           evas_imaging_image_alpha_get (const Evas_Imaging_Image *im) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2213    EAPI void                evas_imaging_image_cache_set (int bytes);
2214    EAPI int                 evas_imaging_image_cache_get (void) EINA_WARN_UNUSED_RESULT;
2215
2216    EAPI void                    evas_imaging_font_hinting_set      (Evas_Font_Hinting_Flags hinting);
2217    EAPI Evas_Font_Hinting_Flags evas_imaging_font_hinting_get      (void) EINA_WARN_UNUSED_RESULT;
2218    EAPI Eina_Bool               evas_imaging_font_hinting_can_hint (Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT;
2219
2220    EAPI Evas_Imaging_Font  *evas_imaging_font_load                      (const char *file, const char *key, int size) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
2221    EAPI void                evas_imaging_font_free                      (Evas_Imaging_Font *fn) EINA_ARG_NONNULL(1);
2222    EAPI int                 evas_imaging_font_ascent_get                (const Evas_Imaging_Font *fn) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2223    EAPI int                 evas_imaging_font_descent_get               (const Evas_Imaging_Font *fn) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2224    EAPI int                 evas_imaging_font_max_ascent_get            (const Evas_Imaging_Font *fn) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2225    EAPI int                 evas_imaging_font_max_descent_get           (const Evas_Imaging_Font *fn) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2226    EAPI int                 evas_imaging_font_line_advance_get          (const Evas_Imaging_Font *fn) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2227    EAPI void                evas_imaging_font_string_advance_get        (const Evas_Imaging_Font *fn, const char *str, int *x, int *y) EINA_ARG_NONNULL(1, 2);
2228    EAPI void                evas_imaging_font_string_size_query         (const Evas_Imaging_Font *fn, const char *str, int *w, int *h) EINA_ARG_NONNULL(1, 2);
2229    EAPI int                 evas_imaging_font_string_inset_get          (const Evas_Imaging_Font *fn, const char *str) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2230    EAPI int                 evas_imaging_font_string_char_coords_get    (const Evas_Imaging_Font *fn, const char *str, int pos, int *cx, int *cy, int *cw, int *ch) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2231    EAPI int                 evas_imaging_font_string_char_at_coords_get (const Evas_Imaging_Font *fn, const char *str, int x, int y, int *cx, int *cy, int *cw, int *ch) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2232
2233    EAPI void                evas_imaging_font_cache_set  (int bytes);
2234    EAPI int                 evas_imaging_font_cache_get  (void) EINA_WARN_UNUSED_RESULT;
2235
2236
2237
2238
2239
2240 /**
2241  * TO BE DOCUMENTED:
2242  * @todo document key modifiers.
2243  */
2244    EAPI const Evas_Modifier *evas_key_modifier_get             (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2245    EAPI const Evas_Lock     *evas_key_lock_get                 (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE;
2246
2247    EAPI Eina_Bool         evas_key_modifier_is_set          (const Evas_Modifier *m, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2248
2249    EAPI Eina_Bool         evas_key_lock_is_set              (const Evas_Lock *l, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2250
2251    EAPI void              evas_key_modifier_add             (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2252    EAPI void              evas_key_modifier_del             (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2253    EAPI void              evas_key_lock_add                 (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2254    EAPI void              evas_key_lock_del                 (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2255
2256    EAPI void              evas_key_modifier_on              (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2257    EAPI void              evas_key_modifier_off             (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2258    EAPI void              evas_key_lock_on                  (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2259    EAPI void              evas_key_lock_off                 (Evas *e, const char *keyname) EINA_ARG_NONNULL(1, 2);
2260
2261    EAPI Evas_Modifier_Mask evas_key_modifier_mask_get       (const Evas *e, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE;
2262
2263    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(1, 2);
2264    EAPI void              evas_object_key_ungrab            (Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers) EINA_ARG_NONNULL(1, 2);
2265
2266
2267
2268 #ifdef __cplusplus
2269 }
2270 #endif
2271
2272 #endif