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