summaryrefslogtreecommitdiff
path: root/legacy/evas/src/lib
diff options
context:
space:
mode:
authorVincent Torri <vincent.torri@gmail.com>2012-11-04 11:51:42 +0000
committerVincent Torri <vincent.torri@gmail.com>2012-11-04 11:51:42 +0000
commitc15e9c6575c3b5f39ded167dda5259de3de96151 (patch)
tree5115d7ae3620af24c2bc094cd062575af7adeda9 /legacy/evas/src/lib
parenta5ac6a987caec5a7f7596a25d0a065b9cc94c50c (diff)
merge: and now Evas
I've tested make -j 3 install and it works nicely I've tested expedite with software and opengl xlib, and it works. Not tested other engines, so please report any problems (engines or other) on the ML. TODO: examples and tests, I'll add them later ISSUE: Eina_Unicode size check. It indirectly depends on eina_config.h, which is created at the end of the configure script. So its size is always 0. I don't know how that size is used, so I can't do a lot, for now. SVN revision: 78895
Diffstat (limited to 'legacy/evas/src/lib')
-rw-r--r--legacy/evas/src/lib/Evas.h19001
-rw-r--r--legacy/evas/src/lib/Evas_GL.h1531
-rw-r--r--legacy/evas/src/lib/cache/evas_cache.h172
-rw-r--r--legacy/evas/src/lib/cache/evas_cache_engine_image.c703
-rw-r--r--legacy/evas/src/lib/cache/evas_cache_image.c1194
-rw-r--r--legacy/evas/src/lib/cache/evas_preload.c234
-rw-r--r--legacy/evas/src/lib/cache2/evas_cache2.c958
-rw-r--r--legacy/evas/src/lib/cache2/evas_cache2.h87
-rw-r--r--legacy/evas/src/lib/canvas/common_interfaces.c271
-rw-r--r--legacy/evas/src/lib/canvas/evas_async_events.c170
-rw-r--r--legacy/evas/src/lib/canvas/evas_callbacks.c675
-rw-r--r--legacy/evas/src/lib/canvas/evas_clip.c421
-rw-r--r--legacy/evas/src/lib/canvas/evas_common_interface.c24
-rw-r--r--legacy/evas/src/lib/canvas/evas_data.c34
-rw-r--r--legacy/evas/src/lib/canvas/evas_device.c259
-rw-r--r--legacy/evas/src/lib/canvas/evas_events.c3220
-rw-r--r--legacy/evas/src/lib/canvas/evas_filter.c1428
-rw-r--r--legacy/evas/src/lib/canvas/evas_focus.c92
-rw-r--r--legacy/evas/src/lib/canvas/evas_font_dir.c1459
-rw-r--r--legacy/evas/src/lib/canvas/evas_gl.c289
-rw-r--r--legacy/evas/src/lib/canvas/evas_key.c354
-rw-r--r--legacy/evas/src/lib/canvas/evas_key_grab.c208
-rw-r--r--legacy/evas/src/lib/canvas/evas_layer.c252
-rw-r--r--legacy/evas/src/lib/canvas/evas_main.c1178
-rw-r--r--legacy/evas/src/lib/canvas/evas_map.c1220
-rw-r--r--legacy/evas/src/lib/canvas/evas_name.c112
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_box.c2400
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_grid.c677
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_image.c4631
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_inform.c95
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_intercept.c622
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_line.c482
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_main.c2486
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_polygon.c579
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_rectangle.c392
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_smart.c1513
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_smart_clipped.c336
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_table.c1624
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_text.c2166
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_textblock.c10379
-rw-r--r--legacy/evas/src/lib/canvas/evas_object_textgrid.c1597
-rw-r--r--legacy/evas/src/lib/canvas/evas_rectangle.c98
-rw-r--r--legacy/evas/src/lib/canvas/evas_render.c1970
-rw-r--r--legacy/evas/src/lib/canvas/evas_smart.c332
-rw-r--r--legacy/evas/src/lib/canvas/evas_stack.c495
-rw-r--r--legacy/evas/src/lib/canvas/evas_stats.c49
-rw-r--r--legacy/evas/src/lib/canvas/evas_touch_point.c155
-rw-r--r--legacy/evas/src/lib/cserve2/evas_cs2.h298
-rw-r--r--legacy/evas/src/lib/cserve2/evas_cs2_client.c1309
-rw-r--r--legacy/evas/src/lib/cserve2/evas_cs2_image_data.c23
-rw-r--r--legacy/evas/src/lib/cserve2/evas_cs2_private.h42
-rw-r--r--legacy/evas/src/lib/cserve2/evas_cs2_utils.c121
-rw-r--r--legacy/evas/src/lib/cserve2/evas_cs2_utils.h13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blend.h8
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blend_main.c325
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blend_private.h31
-rw-r--r--legacy/evas/src/lib/engines/common/evas_blit_main.c614
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_color.c246
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_color.h16
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_colorspace.c186
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_colorspace.h12
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_gry_1.h9
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_gry_8.c68
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_gry_8.h12
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_grypal_6.c21
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_grypal_6.h6
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_main.c478
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_main.h9
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_16.c1927
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_16.h50
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_24.c85
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_24.h10
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_32.c555
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_32.h24
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_8.c240
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_rgb_8.h14
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_yuv.c1215
-rw-r--r--legacy/evas/src/lib/engines/common/evas_convert_yuv.h9
-rw-r--r--legacy/evas/src/lib/engines/common/evas_cpu.c273
-rw-r--r--legacy/evas/src/lib/engines/common/evas_draw.h36
-rw-r--r--legacy/evas/src/lib/engines/common/evas_draw_main.c703
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font.h78
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_default_walk.x145
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_draw.c430
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_load.c909
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_main.c722
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_ot.c344
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_ot.h45
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_private.h53
-rw-r--r--legacy/evas/src/lib/engines/common/evas_font_query.c802
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image.h68
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_data.c149
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_load.c391
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_main.c929
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_private.h15
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_save.c49
-rw-r--r--legacy/evas/src/lib/engines/common/evas_image_scalecache.c837
-rw-r--r--legacy/evas/src/lib/engines/common/evas_line.h11
-rw-r--r--legacy/evas/src/lib/engines/common/evas_line_main.c1003
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image.c764
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image.h23
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image_core.c226
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image_internal.c180
-rw-r--r--legacy/evas/src/lib/engines/common/evas_map_image_loop.c116
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_mask_color_.c26
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_mask_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_color_i386.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_mask_.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add/op_add_pixel_mask_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_add_main_.c529
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c101
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_i386.c138
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_neon.c223
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c167
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_.c177
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_i386.c251
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_neon.c562
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c321
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c77
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_.c154
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c276
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_i386.c221
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_neon.c570
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_sse3.c543
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_i386.c217
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_.c181
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_i386.c157
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_neon.c129
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_sse3.c300
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_neon.c530
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c315
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_blend_main_.c659
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_color_.c131
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_color_i386.c150
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c212
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_.c162
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c193
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c170
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_.c109
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_.c228
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_i386.c255
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c238
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_i386.c131
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_.c142
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_i386.c176
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c151
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c158
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_copy_main_.c663
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_color_.c46
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_color_i386.c58
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_mask_color_.c59
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_mask_color_i386.c13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_.c44
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_color_.c96
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_color_i386.c13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_i386.c58
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_.c58
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask/op_mask_pixel_mask_i386.c13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mask_main_.c303
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_color_.c60
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_color_i386.c66
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_mask_color_.c68
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_mask_color_i386.c92
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_.c52
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_.c118
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_color_i386.c120
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_i386.c66
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_mask_.c114
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul/op_mul_pixel_mask_i386.c63
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_mul_main_.c302
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_mask_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_mask_color_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_color_.c25
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_color_i386.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_mask_.c29
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub/op_sub_pixel_mask_i386.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_op_sub_main_.c530
-rw-r--r--legacy/evas/src/lib/engines/common/evas_pipe.c895
-rw-r--r--legacy/evas/src/lib/engines/common/evas_pipe.h27
-rw-r--r--legacy/evas/src/lib/engines/common/evas_polygon.h13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_polygon_main.c320
-rw-r--r--legacy/evas/src/lib/engines/common/evas_rectangle.h13
-rw-r--r--legacy/evas/src/lib/engines/common/evas_rectangle_main.c137
-rw-r--r--legacy/evas/src/lib/engines/common/evas_regionbuf.c357
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_main.c33
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_main.h18
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_sample.c408
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth.c243
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth.h7
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler.c211
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_down.c43
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx.c234
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downx_downy.c363
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_downy.c236
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_noscale.c44
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_smooth_scaler_up.c235
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_span.c653
-rw-r--r--legacy/evas/src/lib/engines/common/evas_scale_span.h14
-rw-r--r--legacy/evas/src/lib/engines/common/evas_text_utils.c521
-rw-r--r--legacy/evas/src/lib/engines/common/evas_text_utils.h101
-rw-r--r--legacy/evas/src/lib/engines/common/evas_tiler.c1439
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_bidi_utils.c645
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_bidi_utils.h157
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_language_utils.c152
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_language_utils.h132
-rw-r--r--legacy/evas/src/lib/engines/common/language/evas_script_table.h3087
-rw-r--r--legacy/evas/src/lib/file/evas_module.c607
-rw-r--r--legacy/evas/src/lib/file/evas_module.h94
-rw-r--r--legacy/evas/src/lib/file/evas_path.c152
-rw-r--r--legacy/evas/src/lib/file/evas_path.h15
-rw-r--r--legacy/evas/src/lib/include/evas_blend_ops.h378
-rw-r--r--legacy/evas/src/lib/include/evas_common.h1276
-rw-r--r--legacy/evas/src/lib/include/evas_inline.x300
-rw-r--r--legacy/evas/src/lib/include/evas_macros.h217
-rw-r--r--legacy/evas/src/lib/include/evas_mmx.h735
-rw-r--r--legacy/evas/src/lib/include/evas_options.h6
-rw-r--r--legacy/evas/src/lib/include/evas_private.h1335
-rw-r--r--legacy/evas/src/lib/main.c160
227 files changed, 0 insertions, 114974 deletions
diff --git a/legacy/evas/src/lib/Evas.h b/legacy/evas/src/lib/Evas.h
deleted file mode 100644
index e964e75..0000000
--- a/legacy/evas/src/lib/Evas.h
+++ /dev/null
@@ -1,19001 +0,0 @@
1/**
2 @mainpage Evas
3
4 @version 1.7
5 @date 2000-2012
6
7 Please see the @ref authors page for contact details.
8 @link Evas.h Evas API @endlink
9
10 @link Evas.h Evas API @endlink
11
12 @section toc Table of Contents
13
14 @li @ref intro
15 @li @ref work
16 @li @ref compiling
17 @li @ref install
18 @li @ref next_steps
19 @li @ref intro_example
20
21
22 @section intro What is Evas?
23
24 Evas is a clean display canvas API for several target display systems
25 that can draw anti-aliased text, smooth super and sub-sampled scaled
26 images, alpha-blend objects and much more.
27
28 It abstracts any need to know much about what the characteristics of
29 your display system are or what graphics calls are used to draw them
30 and how. It deals on an object level where all you do is create and
31 manipulate objects in a canvas, set their properties, and the rest is
32 done for you.
33
34 Evas optimises the rendering pipeline to minimise effort in redrawing
35 changes made to the canvas and so takes this work out of the
36 programmers hand, saving a lot of time and energy.
37
38 It's small and lean, designed to work on embedded systems all the way
39 to large and powerful multi-cpu workstations. It can be compiled to
40 only have the features you need for your target platform if you so
41 wish, thus keeping it small and lean. It has several display
42 back-ends, letting it display on several display systems, making it
43 portable for cross-device and cross-platform development.
44
45 @subsection intro_not_evas What Evas is not?
46
47 Evas is not a widget set or widget toolkit, however it is their
48 base. See Elementary (http://docs.enlightenment.org/auto/elementary/)
49 for a toolkit based on Evas, Edje, Ecore and other Enlightenment
50 technologies.
51
52 It is not dependent or aware of main loops, input or output
53 systems. Input should be polled from various sources and fed to
54 Evas. Similarly, it will not create windows or report windows updates
55 to your system, rather just drawing the pixels and reporting to the
56 user the areas that were changed. Of course these operations are quite
57 common and thus they are ready to use in Ecore, particularly in
58 Ecore_Evas (http://docs.enlightenment.org/auto/ecore/).
59
60
61 @section work How does Evas work?
62
63 Evas is a canvas display library. This is markedly different from most
64 display and windowing systems as a canvas is structural and is also a
65 state engine, whereas most display and windowing systems are immediate
66 mode display targets. Evas handles the logic between a structural
67 display via its state engine, and controls the target windowing system
68 in order to produce rendered results of the current canvas' state on
69 the display.
70
71 Immediate mode display systems retain very little, or no state. A
72 program will execute a series of commands, as in the pseudo code:
73
74 @verbatim
75 draw line from position (0, 0) to position (100, 200);
76
77 draw rectangle from position (10, 30) to position (50, 500);
78
79 bitmap_handle = create_bitmap();
80 scale bitmap_handle to size 100 x 100;
81 draw image bitmap_handle at position (10, 30);
82 @endverbatim
83
84 The series of commands is executed by the windowing system and the
85 results are displayed on the screen (normally). Once the commands are
86 executed the display system has little or no idea of how to reproduce
87 this image again, and so has to be instructed by the application how
88 to redraw sections of the screen whenever needed. Each successive
89 command will be executed as instructed by the application and either
90 emulated by software or sent to the graphics hardware on the device to
91 be performed.
92
93 The advantage of such a system is that it is simple, and gives a
94 program tight control over how something looks and is drawn. Given the
95 increasing complexity of displays and demands by users to have better
96 looking interfaces, more and more work is needing to be done at this
97 level by the internals of widget sets, custom display widgets and
98 other programs. This means more and more logic and display rendering
99 code needs to be written time and time again, each time the
100 application needs to figure out how to minimise redraws so that
101 display is fast and interactive, and keep track of redraw logic. The
102 power comes at a high-price, lots of extra code and work. Programmers
103 not very familiar with graphics programming will often make mistakes
104 at this level and produce code that is sub optimal. Those familiar
105 with this kind of programming will simply get bored by writing the
106 same code again and again.
107
108 For example, if in the above scene, the windowing system requires the
109 application to redraw the area from 0, 0 to 50, 50 (also referred as
110 "expose event"), then the programmer must calculate manually the
111 updates and repaint it again:
112
113 @verbatim
114 Redraw from position (0, 0) to position (50, 50):
115
116 // what was in area (0, 0, 50, 50)?
117
118 // 1. intersection part of line (0, 0) to (100, 200)?
119 draw line from position (0, 0) to position (25, 50);
120
121 // 2. intersection part of rectangle (10, 30) to (50, 500)?
122 draw rectangle from position (10, 30) to position (50, 50)
123
124 // 3. intersection part of image at (10, 30), size 100 x 100?
125 bitmap_subimage = subregion from position (0, 0) to position (40, 20)
126 draw image bitmap_subimage at position (10, 30);
127 @endverbatim
128
129 The clever reader might have noticed that, if all elements in the
130 above scene are opaque, then the system is doing useless paints: part
131 of the line is behind the rectangle, and part of the rectangle is
132 behind the image. These useless paints tend to be very costly, as
133 pixels tend to be 4 bytes in size, thus an overlapping region of 100 x
134 100 pixels is around 40000 useless writes! The developer could write
135 code to calculate the overlapping areas and avoid painting then, but
136 then it should be mixed with the "expose event" handling mentioned
137 above and quickly one realizes the initially simpler method became
138 really complex.
139
140 Evas is a structural system in which the programmer creates and
141 manages display objects and their properties, and as a result of this
142 higher level state management, the canvas is able to redraw the set of
143 objects when needed to represent the current state of the canvas.
144
145 For example, the pseudo code:
146
147 @verbatim
148 line_handle = create_line();
149 set line_handle from position (0, 0) to position (100, 200);
150 show line_handle;
151
152 rectangle_handle = create_rectangle();
153 move rectangle_handle to position (10, 30);
154 resize rectangle_handle to size 40 x 470;
155 show rectangle_handle;
156
157 bitmap_handle = create_bitmap();
158 scale bitmap_handle to size 100 x 100;
159 move bitmap_handle to position (10, 30);
160 show bitmap_handle;
161
162 render scene;
163 @endverbatim
164
165 This may look longer, but when the display needs to be refreshed or
166 updated, the programmer only moves, resizes, shows, hides etc. the
167 objects that need to change. The programmer simply thinks at the
168 object logic level, and the canvas software does the rest of the work
169 for them, figuring out what actually changed in the canvas since it
170 was last drawn, how to most efficiently redraw the canvas and its
171 contents to reflect the current state, and then it can go off and do
172 the actual drawing of the canvas.
173
174 This lets the programmer think in a more natural way when dealing with
175 a display, and saves time and effort of working out how to load and
176 display images, render given the current display system etc. Since
177 Evas also is portable across different display systems, this also
178 gives the programmer the ability to have their code ported and
179 displayed on different display systems with very little work.
180
181 Evas can be seen as a display system that stands somewhere between a
182 widget set and an immediate mode display system. It retains basic
183 display logic, but does very little high-level logic such as
184 scrollbars, sliders, push buttons etc.
185
186
187 @section compiling How to compile using Evas ?
188
189 Evas is a library your application links to. The procedure for this is
190 very simple. You simply have to compile your application with the
191 appropriate compiler flags that the @c pkg-config script outputs. For
192 example:
193
194 Compiling C or C++ files into object files:
195
196 @verbatim
197 gcc -c -o main.o main.c `pkg-config --cflags evas`
198 @endverbatim
199
200 Linking object files into a binary executable:
201
202 @verbatim
203 gcc -o my_application main.o `pkg-config --libs evas`
204 @endverbatim
205
206 You simply have to make sure that @c pkg-config is in your shell's @c
207 PATH (see the manual page for your appropriate shell) and @c evas.pc
208 in @c /usr/lib/pkgconfig or its path in the @c PKG_CONFIG_PATH
209 environment variable. It's that simple to link and use Evas once you
210 have written your code to use it.
211
212 Since the program is linked to Evas, it is now able to use any
213 advertised API calls to display graphics in a canvas managed by it, as
214 well as use the API calls provided to manage data.
215
216 You should make sure you add any extra compile and link flags to your
217 compile commands that your application may need as well. The above
218 example is only guaranteed to make Evas add it's own requirements.
219
220
221 @section install How is it installed?
222
223 Simple:
224
225 @verbatim
226 ./configure
227 make
228 su -
229 ...
230 make install
231 @endverbatim
232
233 @section next_steps Next Steps
234
235 After you understood what Evas is and installed it in your system you
236 should proceed understanding the programming interface for all
237 objects, then see the specific for the most used elements. We'd
238 recommend you to take a while to learn Ecore
239 (http://docs.enlightenment.org/auto/ecore/) and Edje
240 (http://docs.enlightenment.org/auto/edje/) as they will likely save
241 you tons of work compared to using just Evas directly.
242
243 Recommended reading:
244
245 @li @ref Evas_Object_Group, where you'll get how to basically
246 manipulate generic objects lying on an Evas canvas, handle canvas
247 and object events, etc.
248 @li @ref Evas_Object_Rectangle, to learn about the most basic object
249 type on Evas -- the rectangle.
250 @li @ref Evas_Object_Polygon, to learn how to create polygon elements
251 on the canvas.
252 @li @ref Evas_Line_Group, to learn how to create line elements on the
253 canvas.
254 @li @ref Evas_Object_Image, to learn about image objects, over which
255 Evas can do a plethora of operations.
256 @li @ref Evas_Object_Text, to learn how to create textual elements on
257 the canvas.
258 @li @ref Evas_Object_Textblock, to learn how to create multiline
259 textual elements on the canvas.
260 @li @ref Evas_Smart_Object_Group and @ref Evas_Smart_Group, to define
261 new objects that provide @b custom functions to handle clipping,
262 hiding, moving, resizing, color setting and more. These could
263 be as simple as a group of objects that move together (see @ref
264 Evas_Smart_Object_Clipped) up to implementations of what
265 ends to be a widget, providing some intelligence (thus the name)
266 to Evas objects -- like a button or check box, for example.
267
268 @section intro_example Introductory Example
269
270 @include evas-buffer-simple.c
271 */
272
273/**
274 @page authors Authors
275 @author Carsten Haitzler <raster@@rasterman.com>
276 @author Till Adam <till@@adam-lilienthal.de>
277 @author Steve Ireland <sireland@@pobox.com>
278 @author Brett Nash <nash@@nash.id.au>
279 @author Tilman Sauerbeck <tilman@@code-monkey.de>
280 @author Corey Donohoe <atmos@@atmos.org>
281 @author Yuri Hudobin <glassy_ape@@users.sourceforge.net>
282 @author Nathan Ingersoll <ningerso@@d.umn.edu>
283 @author Willem Monsuwe <willem@@stack.nl>
284 @author Jose O Gonzalez <jose_ogp@@juno.com>
285 @author Bernhard Nemec <Bernhard.Nemec@@viasyshc.com>
286 @author Jorge Luis Zapata Muga <jorgeluis.zapata@@gmail.com>
287 @author Cedric Bail <cedric.bail@@free.fr>
288 @author Gustavo Sverzut Barbieri <barbieri@@profusion.mobi>
289 @author Vincent Torri <vtorri@@univ-evry.fr>
290 @author Tim Horton <hortont424@@gmail.com>
291 @author Tom Hacohen <tom@@stosb.com>
292 @author Mathieu Taillefumier <mathieu.taillefumier@@free.fr>
293 @author Iván Briano <ivan@@profusion.mobi>
294 @author Gustavo Lima Chaves <glima@@profusion.mobi>
295 @author Samsung Electronics
296 @author Samsung SAIT
297 @author Sung W. Park <sungwoo@@gmail.com>
298 @author Jiyoun Park <jy0703.park@@samsung.com>
299 @author Myoungwoon Roy Kim(roy_kim) <myoungwoon.kim@@samsung.com> <myoungwoon@@gmail.com>
300 @author Thierry el Borgi <thierry@@substantiel.fr>
301 @author Shilpa Singh <shilpa.singh@@samsung.com> <shilpasingh.o@@gmail.com>
302 @author ChunEon Park <hermet@@hermet.pe.kr>
303 @author Christopher 'devilhorns' Michael <cpmichael1@@comcast.net>
304 @author Seungsoo Woo <om101.woo@@samsung.com>
305 @author Youness Alaoui <kakaroto@@kakaroto.homelinux.net>
306 @author Jim Kukunas <james.t.kukunas@@linux.intel.com>
307 @author Nicolas Aguirre <aguirre.nicolas@@gmail.com>
308 @author Rafal Krypa <r.krypa@@samsung.com>
309 @author Hyoyoung Chang <hyoyoung@@gmail.com>
310 @author Jérôme Pinot <ngc891@@gmail.com>
311 @author Rafael Antognolli <antognolli@@profusion.mobi>
312
313 Please contact <enlightenment-devel@lists.sourceforge.net> to get in
314 contact with the developers and maintainers.
315 */
316
317#ifndef _EVAS_H
318#define _EVAS_H
319
320#include <time.h>
321
322#include <Eina.h>
323
324/* This include has been added to support Eo in Evas */
325#include <Eo.h>
326
327#ifdef EAPI
328# undef EAPI
329#endif
330
331#ifdef _WIN32
332# ifdef EFL_EVAS_BUILD
333# ifdef DLL_EXPORT
334# define EAPI __declspec(dllexport)
335# else
336# define EAPI
337# endif /* ! DLL_EXPORT */
338# else
339# define EAPI __declspec(dllimport)
340# endif /* ! EFL_EVAS_BUILD */
341#else
342# ifdef __GNUC__
343# if __GNUC__ >= 4
344# define EAPI __attribute__ ((visibility("default")))
345# else
346# define EAPI
347# endif
348# else
349# define EAPI
350# endif
351#endif /* ! _WIN32 */
352
353#ifdef __cplusplus
354extern "C" {
355#endif
356
357#define EVAS_VERSION_MAJOR 1
358#define EVAS_VERSION_MINOR 8
359
360typedef struct _Evas_Version
361{
362 int major;
363 int minor;
364 int micro;
365 int revision;
366} Evas_Version;
367
368EAPI extern Evas_Version * evas_version;
369
370/**
371 * @file
372 * @brief These routines are used for Evas library interaction.
373 *
374 * @todo check boolean return values and convert to Eina_Bool
375 * @todo change all api to use EINA_SAFETY_*
376 * @todo finish api documentation
377 */
378
379/* BiDi exposed stuff */
380/*FIXME: document */
381typedef enum _Evas_BiDi_Direction
382{
383 EVAS_BIDI_DIRECTION_NATURAL,
384 EVAS_BIDI_DIRECTION_NEUTRAL = EVAS_BIDI_DIRECTION_NATURAL,
385 EVAS_BIDI_DIRECTION_LTR,
386 EVAS_BIDI_DIRECTION_RTL
387} Evas_BiDi_Direction;
388
389/**
390 * Identifier of callbacks to be set for Evas canvases or Evas
391 * objects.
392 *
393 * The following figure illustrates some Evas callbacks:
394 *
395 * @image html evas-callbacks.png
396 * @image rtf evas-callbacks.png
397 * @image latex evas-callbacks.eps
398 *
399 * @see evas_object_event_callback_add()
400 * @see evas_event_callback_add()
401 */
402typedef enum _Evas_Callback_Type
403{
404 /*
405 * The following events are only for use with Evas objects, with
406 * evas_object_event_callback_add():
407 */
408 EVAS_CALLBACK_MOUSE_IN, /**< Mouse In Event */
409 EVAS_CALLBACK_MOUSE_OUT, /**< Mouse Out Event */
410 EVAS_CALLBACK_MOUSE_DOWN, /**< Mouse Button Down Event */
411 EVAS_CALLBACK_MOUSE_UP, /**< Mouse Button Up Event */
412 EVAS_CALLBACK_MOUSE_MOVE, /**< Mouse Move Event */
413 EVAS_CALLBACK_MOUSE_WHEEL, /**< Mouse Wheel Event */
414 EVAS_CALLBACK_MULTI_DOWN, /**< Multi-touch Down Event */
415 EVAS_CALLBACK_MULTI_UP, /**< Multi-touch Up Event */
416 EVAS_CALLBACK_MULTI_MOVE, /**< Multi-touch Move Event */
417 EVAS_CALLBACK_FREE, /**< Object Being Freed (Called after Del) */
418 EVAS_CALLBACK_KEY_DOWN, /**< Key Press Event */
419 EVAS_CALLBACK_KEY_UP, /**< Key Release Event */
420 EVAS_CALLBACK_FOCUS_IN, /**< Focus In Event */
421 EVAS_CALLBACK_FOCUS_OUT, /**< Focus Out Event */
422 EVAS_CALLBACK_SHOW, /**< Show Event */
423 EVAS_CALLBACK_HIDE, /**< Hide Event */
424 EVAS_CALLBACK_MOVE, /**< Move Event */
425 EVAS_CALLBACK_RESIZE, /**< Resize Event */
426 EVAS_CALLBACK_RESTACK, /**< Restack Event */
427 EVAS_CALLBACK_DEL, /**< Object Being Deleted (called before Free) */
428 EVAS_CALLBACK_HOLD, /**< Events go on/off hold */
429 EVAS_CALLBACK_CHANGED_SIZE_HINTS, /**< Size hints changed event */
430 EVAS_CALLBACK_IMAGE_PRELOADED, /**< Image has been preloaded */
431
432 /*
433 * The following events are only for use with Evas canvases, with
434 * evas_event_callback_add():
435 */
436 EVAS_CALLBACK_CANVAS_FOCUS_IN, /**< Canvas got focus as a whole */
437 EVAS_CALLBACK_CANVAS_FOCUS_OUT, /**< Canvas lost focus as a whole */
438 EVAS_CALLBACK_RENDER_FLUSH_PRE, /**< Called just before rendering is updated on the canvas target */
439 EVAS_CALLBACK_RENDER_FLUSH_POST, /**< Called just after rendering is updated on the canvas target */
440 EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, /**< Canvas object got focus */
441 EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, /**< Canvas object lost focus */
442
443 /*
444 * More Evas object event types - see evas_object_event_callback_add():
445 */
446 EVAS_CALLBACK_IMAGE_UNLOADED, /**< Image data has been unloaded (by some mechanism in Evas that throw out original image data) */
447
448 EVAS_CALLBACK_RENDER_PRE, /**< Called just before rendering starts on the canvas target @since 1.2 */
449 EVAS_CALLBACK_RENDER_POST, /**< Called just after rendering stops on the canvas target @since 1.2 */
450
451 EVAS_CALLBACK_IMAGE_RESIZE, /**< Image size is changed @since 1.8 */
452 EVAS_CALLBACK_DEVICE_CHANGED, /**< Devices added, removed or changed on canvas @since 1.8 */
453 EVAS_CALLBACK_LAST /**< kept as last element/sentinel -- not really an event */
454} Evas_Callback_Type; /**< The types of events triggering a callback */
455
456EAPI extern const Eo_Event_Description _EVAS_EVENT_MOUSE_IN;
457EAPI extern const Eo_Event_Description _EVAS_EVENT_MOUSE_OUT;
458EAPI extern const Eo_Event_Description _EVAS_EVENT_MOUSE_DOWN;
459EAPI extern const Eo_Event_Description _EVAS_EVENT_MOUSE_UP;
460EAPI extern const Eo_Event_Description _EVAS_EVENT_MOUSE_MOVE;
461EAPI extern const Eo_Event_Description _EVAS_EVENT_MOUSE_WHEEL;
462EAPI extern const Eo_Event_Description _EVAS_EVENT_MULTI_DOWN;
463EAPI extern const Eo_Event_Description _EVAS_EVENT_MULTI_UP;
464EAPI extern const Eo_Event_Description _EVAS_EVENT_MULTI_MOVE;
465EAPI extern const Eo_Event_Description _EVAS_EVENT_FREE;
466EAPI extern const Eo_Event_Description _EVAS_EVENT_KEY_DOWN;
467EAPI extern const Eo_Event_Description _EVAS_EVENT_KEY_UP;
468EAPI extern const Eo_Event_Description _EVAS_EVENT_FOCUS_IN;
469EAPI extern const Eo_Event_Description _EVAS_EVENT_FOCUS_OUT;
470EAPI extern const Eo_Event_Description _EVAS_EVENT_SHOW;
471EAPI extern const Eo_Event_Description _EVAS_EVENT_HIDE;
472EAPI extern const Eo_Event_Description _EVAS_EVENT_MOVE;
473EAPI extern const Eo_Event_Description _EVAS_EVENT_RESIZE;
474EAPI extern const Eo_Event_Description _EVAS_EVENT_RESTACK;
475EAPI extern const Eo_Event_Description _EVAS_EVENT_DEL;
476EAPI extern const Eo_Event_Description _EVAS_EVENT_HOLD;
477EAPI extern const Eo_Event_Description _EVAS_EVENT_CHANGED_SIZE_HINTS;
478EAPI extern const Eo_Event_Description _EVAS_EVENT_IMAGE_PRELOADED;
479EAPI extern const Eo_Event_Description _EVAS_EVENT_IMAGE_RESIZE;
480EAPI extern const Eo_Event_Description _EVAS_EVENT_CANVAS_FOCUS_IN;
481EAPI extern const Eo_Event_Description _EVAS_EVENT_CANVAS_FOCUS_OUT;
482EAPI extern const Eo_Event_Description _EVAS_EVENT_RENDER_FLUSH_PRE;
483EAPI extern const Eo_Event_Description _EVAS_EVENT_RENDER_FLUSH_POST;
484EAPI extern const Eo_Event_Description _EVAS_EVENT_CANVAS_OBJECT_FOCUS_IN;
485EAPI extern const Eo_Event_Description _EVAS_EVENT_CANVAS_OBJECT_FOCUS_OUT;
486EAPI extern const Eo_Event_Description _EVAS_EVENT_IMAGE_UNLOADED;
487EAPI extern const Eo_Event_Description _EVAS_EVENT_RENDER_PRE;
488EAPI extern const Eo_Event_Description _EVAS_EVENT_RENDER_POST;
489
490#define EVAS_EVENT_MOUSE_IN (&(_EVAS_EVENT_MOUSE_IN))
491#define EVAS_EVENT_MOUSE_OUT (&(_EVAS_EVENT_MOUSE_OUT))
492#define EVAS_EVENT_MOUSE_DOWN (&(_EVAS_EVENT_MOUSE_DOWN))
493#define EVAS_EVENT_MOUSE_UP (&(_EVAS_EVENT_MOUSE_UP))
494#define EVAS_EVENT_MOUSE_MOVE (&(_EVAS_EVENT_MOUSE_MOVE))
495#define EVAS_EVENT_MOUSE_WHEEL (&(_EVAS_EVENT_MOUSE_WHEEL))
496#define EVAS_EVENT_MULTI_DOWN (&(_EVAS_EVENT_MULTI_DOWN))
497#define EVAS_EVENT_MULTI_UP (&(_EVAS_EVENT_MULTI_UP))
498#define EVAS_EVENT_MULTI_MOVE (&(_EVAS_EVENT_MULTI_MOVE))
499#define EVAS_EVENT_FREE (&(_EVAS_EVENT_FREE))
500#define EVAS_EVENT_KEY_DOWN (&(_EVAS_EVENT_KEY_DOWN))
501#define EVAS_EVENT_KEY_UP (&(_EVAS_EVENT_KEY_UP))
502#define EVAS_EVENT_FOCUS_IN (&(_EVAS_EVENT_FOCUS_IN))
503#define EVAS_EVENT_FOCUS_OUT (&(_EVAS_EVENT_FOCUS_OUT))
504#define EVAS_EVENT_SHOW (&(_EVAS_EVENT_SHOW))
505#define EVAS_EVENT_HIDE (&(_EVAS_EVENT_HIDE))
506#define EVAS_EVENT_MOVE (&(_EVAS_EVENT_MOVE))
507#define EVAS_EVENT_RESIZE (&(_EVAS_EVENT_RESIZE))
508#define EVAS_EVENT_RESTACK (&(_EVAS_EVENT_RESTACK))
509#define EVAS_EVENT_DEL (&(_EVAS_EVENT_DEL))
510#define EVAS_EVENT_HOLD (&(_EVAS_EVENT_HOLD))
511#define EVAS_EVENT_CHANGED_SIZE_HINTS (&(_EVAS_EVENT_CHANGED_SIZE_HINTS))
512#define EVAS_EVENT_IMAGE_PRELOADED (&(_EVAS_EVENT_IMAGE_PRELOADED))
513#define EVAS_EVENT_IMAGE_RESIZE (&(_EVAS_EVENT_IMAGE_RESIZE))
514#define EVAS_EVENT_CANVAS_FOCUS_IN (&(_EVAS_EVENT_CANVAS_FOCUS_IN))
515#define EVAS_EVENT_CANVAS_FOCUS_OUT (&(_EVAS_EVENT_CANVAS_FOCUS_OUT))
516#define EVAS_EVENT_RENDER_FLUSH_PRE (&(_EVAS_EVENT_RENDER_FLUSH_PRE))
517#define EVAS_EVENT_RENDER_FLUSH_POST (&(_EVAS_EVENT_RENDER_FLUSH_POST))
518#define EVAS_EVENT_CANVAS_OBJECT_FOCUS_IN (&(_EVAS_EVENT_CANVAS_OBJECT_FOCUS_IN))
519#define EVAS_EVENT_CANVAS_OBJECT_FOCUS_OUT (&(_EVAS_EVENT_CANVAS_OBJECT_FOCUS_OUT))
520#define EVAS_EVENT_IMAGE_UNLOADED (&(_EVAS_EVENT_IMAGE_UNLOADED))
521#define EVAS_EVENT_RENDER_PRE (&(_EVAS_EVENT_RENDER_PRE))
522#define EVAS_EVENT_RENDER_POST (&(_EVAS_EVENT_RENDER_POST))
523
524/**
525 * @def EVAS_CALLBACK_PRIORITY_BEFORE
526 * Slightly more prioritized than default.
527 * @since 1.1
528 */
529#define EVAS_CALLBACK_PRIORITY_BEFORE -100
530/**
531 * @def EVAS_CALLBACK_PRIORITY_DEFAULT
532 * Default callback priority level
533 * @since 1.1
534 */
535#define EVAS_CALLBACK_PRIORITY_DEFAULT 0
536/**
537 * @def EVAS_CALLBACK_PRIORITY_AFTER
538 * Slightly less prioritized than default.
539 * @since 1.1
540 */
541#define EVAS_CALLBACK_PRIORITY_AFTER 100
542
543/**
544 * @typedef Evas_Callback_Priority
545 *
546 * Callback priority value. Range is -32k - 32k. The lower the number, the
547 * bigger the priority.
548 *
549 * @see EVAS_CALLBACK_PRIORITY_AFTER
550 * @see EVAS_CALLBACK_PRIORITY_BEFORE
551 * @see EVAS_CALLBACK_PRIORITY_DEFAULT
552 *
553 * @since 1.1
554 */
555typedef Eo_Callback_Priority Evas_Callback_Priority;
556
557EAPI extern const Eo_Event_Description _CLICKED_EVENT;
558EAPI extern const Eo_Event_Description _CLICKED_DOUBLE_EVENT;
559EAPI extern const Eo_Event_Description _CLICKED_TRIPLE_EVENT;
560EAPI extern const Eo_Event_Description _PRESSED_EVENT;
561EAPI extern const Eo_Event_Description _UNPRESSED_EVENT;
562EAPI extern const Eo_Event_Description _LONGPRESSED_EVENT;
563EAPI extern const Eo_Event_Description _REPEATED_EVENT;
564EAPI extern const Eo_Event_Description _SCROLL_EVENT;
565EAPI extern const Eo_Event_Description _SCROLL_ANIM_START_EVENT;
566EAPI extern const Eo_Event_Description _SCROLL_ANIM_STOP_EVENT;
567EAPI extern const Eo_Event_Description _SCROLL_DRAG_START_EVENT;
568EAPI extern const Eo_Event_Description _SCROLL_DRAG_STOP_EVENT;
569EAPI extern const Eo_Event_Description _ZOOM_START_EVENT;
570EAPI extern const Eo_Event_Description _ZOOM_STOP_EVENT;
571EAPI extern const Eo_Event_Description _ZOOM_CHANGE_EVENT;
572EAPI extern const Eo_Event_Description _SELECTED_EVENT;
573EAPI extern const Eo_Event_Description _UNSELECTED_EVENT;
574EAPI extern const Eo_Event_Description _SELECTION_PASTE_EVENT;
575EAPI extern const Eo_Event_Description _SELECTION_COPY_EVENT;
576EAPI extern const Eo_Event_Description _SELECTION_CUT_EVENT;
577EAPI extern const Eo_Event_Description _SELECTION_START_EVENT;
578EAPI extern const Eo_Event_Description _SELECTION_CHANGED_EVENT;
579EAPI extern const Eo_Event_Description _SELECTION_CLEARED_EVENT;
580EAPI extern const Eo_Event_Description _DRAG_EVENT;
581EAPI extern const Eo_Event_Description _DRAG_START_EVENT;
582EAPI extern const Eo_Event_Description _DRAG_STOP_EVENT;
583EAPI extern const Eo_Event_Description _DRAG_END_EVENT;
584EAPI extern const Eo_Event_Description _DRAG_START_UP_EVENT;
585EAPI extern const Eo_Event_Description _DRAG_START_DOWN_EVENT;
586EAPI extern const Eo_Event_Description _DRAG_START_RIGHT_EVENT;
587EAPI extern const Eo_Event_Description _DRAG_START_LEFT_EVENT;
588
589#define EVAS_SMART_CLICKED_EVENT (&(_CLICKED_EVENT))
590#define EVAS_SMART_CLICKED_DOUBLE_EVENT (&(_CLICKED_DOUBLE_EVENT))
591#define EVAS_SMART_CLICKED_TRIPLE_EVENT (&(_CLICKED_TRIPLE_EVENT))
592#define EVAS_SMART_PRESSED_EVENT (&(_PRESSED_EVENT))
593#define EVAS_SMART_UNPRESSED_EVENT (&(_UNPRESSED_EVENT))
594#define EVAS_SMART_LONGPRESSED_EVENT (&(_LONGPRESSED_EVENT))
595#define EVAS_SMART_REPEATED_EVENT (&(_REPEATED_EVENT))
596#define EVAS_SMART_SCROLL_EVENT (&(_SCROLL_EVENT))
597#define EVAS_SMART_SCROLL_ANIM_START_EVENT (&(_SCROLL_ANIM_START_EVENT))
598#define EVAS_SMART_SCROLL_ANIM_STOP_EVENT (&(_SCROLL_ANIM_STOP_EVENT))
599#define EVAS_SMART_SCROLL_DRAG_START_EVENT (&(_SCROLL_DRAG_START_EVENT))
600#define EVAS_SMART_SCROLL_DRAG_STOP_EVENT (&(_SCROLL_DRAG_STOP_EVENT))
601#define EVAS_SMART_ZOOM_START_EVENT (&(_ZOOM_START_EVENT))
602#define EVAS_SMART_ZOOM_STOP_EVENT (&(_ZOOM_STOP_EVENT))
603#define EVAS_SMART_ZOOM_CHANGE_EVENT (&(_ZOOM_CHANGE_EVENT))
604#define EVAS_SMART_SELECTED_EVENT (&(_SELECTED_EVENT))
605#define EVAS_SMART_UNSELECTED_EVENT (&(_UNSELECTED_EVENT))
606#define EVAS_SMART_SELECTION_PASTE_EVENT (&(_SELECTION_PASTE_EVENT))
607#define EVAS_SMART_SELECTION_COPY_EVENT (&(_SELECTION_COPY_EVENT))
608#define EVAS_SMART_SELECTION_CUT_EVENT (&(_SELECTION_CUT_EVENT))
609#define EVAS_SMART_SELECTION_START_EVENT (&(_SELECTION_START_EVENT))
610#define EVAS_SMART_SELECTION_CHANGED_EVENT (&(_SELECTION_CHANGED_EVENT))
611#define EVAS_SMART_SELECTION_CLEARED_EVENT (&(_SELECTION_CLEARED_EVENT))
612#define EVAS_SMART_DRAG_EVENT (&(_DRAG_EVENT))
613#define EVAS_SMART_DRAG_START_EVENT (&(_DRAG_START_EVENT))
614#define EVAS_SMART_DRAG_STOP_EVENT (&(_DRAG_STOP_EVENT))
615#define EVAS_SMART_DRAG_END_EVENT (&(_DRAG_END_EVENT))
616#define EVAS_SMART_DRAG_START_UP_EVENT (&(_DRAG_START_UP_EVENT))
617#define EVAS_SMART_DRAG_START_DOWN_EVENT (&(_DRAG_START_DOWN_EVENT))
618#define EVAS_SMART_DRAG_START_RIGHT_EVENT (&(_DRAG_START_RIGHT_EVENT))
619#define EVAS_SMART_DRAG_START_LEFT_EVENT (&(_DRAG_START_LEFT_EVENT))
620
621const Eo_Class *evas_smart_signal_interface_get(void) EINA_CONST;
622const Eo_Class *evas_smart_clickable_interface_get(void) EINA_CONST;
623const Eo_Class *evas_smart_scrollable_interface_get(void) EINA_CONST;
624const Eo_Class *evas_smart_zoomable_interface_get(void) EINA_CONST;
625const Eo_Class *evas_smart_selectable_interface_get(void) EINA_CONST;
626const Eo_Class *evas_smart_draggable_interface_get(void) EINA_CONST;
627
628#define EVAS_SMART_SIGNAL_INTERFACE evas_smart_signal_interface_get()
629#define EVAS_SMART_CLICKABLE_INTERFACE evas_smart_clickable_interface_get()
630#define EVAS_SMART_SCROLLABLE_INTERFACE evas_smart_scrollable_interface_get()
631#define EVAS_SMART_ZOOMABLE_INTERFACE evas_smart_zoomable_interface_get()
632#define EVAS_SMART_SELECTABLE_INTERFACE evas_smart_selectable_interface_get()
633#define EVAS_SMART_DRAGGABLE_INTERFACE evas_smart_draggable_interface_get()
634
635/**
636 * Flags for Mouse Button events
637 */
638typedef enum _Evas_Button_Flags
639{
640 EVAS_BUTTON_NONE = 0, /**< No extra mouse button data */
641 EVAS_BUTTON_DOUBLE_CLICK = (1 << 0), /**< This mouse button press was the 2nd press of a double click */
642 EVAS_BUTTON_TRIPLE_CLICK = (1 << 1) /**< This mouse button press was the 3rd press of a triple click */
643} Evas_Button_Flags; /**< Flags for Mouse Button events */
644
645/**
646 * Flags for Events
647 */
648typedef enum _Evas_Event_Flags
649{
650 EVAS_EVENT_FLAG_NONE = 0, /**< No fancy flags set */
651 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 */
652 EVAS_EVENT_FLAG_ON_SCROLL = (1 << 1) /**< This event flag indicates the event occurs while scrolling; for example, DOWN event occurs during scrolling; the event should be used for informational purposes and maybe some indications visually, but not actually perform anything */
653} Evas_Event_Flags; /**< Flags for Events */
654
655/**
656 * State of Evas_Coord_Touch_Point
657 */
658typedef enum _Evas_Touch_Point_State
659{
660 EVAS_TOUCH_POINT_DOWN, /**< Touch point is pressed down */
661 EVAS_TOUCH_POINT_UP, /**< Touch point is released */
662 EVAS_TOUCH_POINT_MOVE, /**< Touch point is moved */
663 EVAS_TOUCH_POINT_STILL, /**< Touch point is not moved after pressed */
664 EVAS_TOUCH_POINT_CANCEL /**< Touch point is cancelled */
665} Evas_Touch_Point_State;
666
667/**
668 * Flags for Font Hinting
669 * @ingroup Evas_Font_Group
670 */
671typedef enum _Evas_Font_Hinting_Flags
672{
673 EVAS_FONT_HINTING_NONE, /**< No font hinting */
674 EVAS_FONT_HINTING_AUTO, /**< Automatic font hinting */
675 EVAS_FONT_HINTING_BYTECODE /**< Bytecode font hinting */
676} Evas_Font_Hinting_Flags; /**< Flags for Font Hinting */
677
678/**
679 * Colorspaces for pixel data supported by Evas
680 * @ingroup Evas_Object_Image
681 */
682typedef enum _Evas_Colorspace
683{
684 EVAS_COLORSPACE_ARGB8888, /**< ARGB 32 bits per pixel, high-byte is Alpha, accessed 1 32bit word at a time */
685 /* these are not currently supported - but planned for the future */
686 EVAS_COLORSPACE_YCBCR422P601_PL, /**< YCbCr 4:2:2 Planar, ITU.BT-601 specifications. The data pointed to is just an array of row pointer, pointing to the Y rows, then the Cb, then Cr rows */
687 EVAS_COLORSPACE_YCBCR422P709_PL, /**< YCbCr 4:2:2 Planar, ITU.BT-709 specifications. The data pointed to is just an array of row pointer, pointing to the Y rows, then the Cb, then Cr rows */
688 EVAS_COLORSPACE_RGB565_A5P, /**< 16bit rgb565 + Alpha plane at end - 5 bits of the 8 being used per alpha byte */
689 EVAS_COLORSPACE_GRY8, /**< 8bit grayscale */
690 EVAS_COLORSPACE_YCBCR422601_PL, /**< YCbCr 4:2:2, ITU.BT-601 specifications. The data pointed to is just an array of row pointer, pointing to line of Y,Cb,Y,Cr bytes */
691 EVAS_COLORSPACE_YCBCR420NV12601_PL, /**< YCbCr 4:2:0, ITU.BT-601 specification. The data pointed to is just an array of row pointer, pointing to the Y rows, then the Cb,Cr rows. */
692 EVAS_COLORSPACE_YCBCR420TM12601_PL, /**< YCbCr 4:2:0, ITU.BT-601 specification. The data pointed to is just an array of tiled row pointer, pointing to the Y rows, then the Cb,Cr rows. */
693} Evas_Colorspace; /**< Colorspaces for pixel data supported by Evas */
694
695/**
696 * How to pack items into cells in a table.
697 * @ingroup Evas_Object_Table
698 *
699 * @see evas_object_table_homogeneous_set() for an explanation of the function of
700 * each one.
701 */
702typedef enum _Evas_Object_Table_Homogeneous_Mode
703{
704 EVAS_OBJECT_TABLE_HOMOGENEOUS_NONE = 0,
705 EVAS_OBJECT_TABLE_HOMOGENEOUS_TABLE = 1,
706 EVAS_OBJECT_TABLE_HOMOGENEOUS_ITEM = 2
707} Evas_Object_Table_Homogeneous_Mode; /**< Table cell pack mode. */
708
709typedef struct _Evas_Coord_Rectangle Evas_Coord_Rectangle; /**< A generic rectangle handle */
710typedef struct _Evas_Point Evas_Point; /**< integer point */
711
712typedef struct _Evas_Coord_Point Evas_Coord_Point; /**< Evas_Coord point */
713typedef struct _Evas_Coord_Precision_Point Evas_Coord_Precision_Point; /**< Evas_Coord point with sub-pixel precision */
714
715typedef struct _Evas_Coord_Size Evas_Coord_Size; /** <Evas_Coord size @since 1.8 */
716typedef struct _Evas_Coord_Precision_Size Evas_Coord_Precision_Size; /** <Evas_Coord size with sub-pixel precision @since 1.8 */
717
718typedef struct _Evas_Position Evas_Position; /**< associates given point in Canvas and Output */
719typedef struct _Evas_Precision_Position Evas_Precision_Position; /**< associates given point in Canvas and Output, with sub-pixel precision */
720
721/**
722 * @typedef Evas_Smart_Class
723 *
724 * A smart object's @b base class definition
725 *
726 * @ingroup Evas_Smart_Group
727 */
728typedef struct _Evas_Smart_Class Evas_Smart_Class;
729
730/**
731 * @typedef Evas_Smart_Interface
732 *
733 * A smart object's @b base interface definition
734 *
735 * An Evas interface is exactly like the OO-concept: an 'contract' or
736 * API a given object is declared to support. A smart object may have
737 * more than one interface, thus extending the behavior it gets from
738 * sub-classing.
739 *
740 * @since 1.7
741 *
742 * @ingroup Evas_Smart_Group
743 */
744typedef struct _Evas_Smart_Interface Evas_Smart_Interface;
745
746/**
747 * @typedef Evas_Smart_Cb_Description
748 *
749 * A smart object callback description, used to provide introspection
750 *
751 * @ingroup Evas_Smart_Group
752 */
753typedef struct _Evas_Smart_Cb_Description Evas_Smart_Cb_Description;
754
755/**
756 * @typedef Evas_Map
757 *
758 * An opaque handle to map points
759 *
760 * @see evas_map_new()
761 * @see evas_map_free()
762 * @see evas_map_dup()
763 *
764 * @ingroup Evas_Object_Group_Map
765 */
766typedef struct _Evas_Map Evas_Map;
767
768/**
769 * @typedef Evas
770 *
771 * An opaque handle to an Evas canvas.
772 *
773 * @see evas_new()
774 * @see evas_free()
775 *
776 * @ingroup Evas_Canvas
777 */
778typedef Eo Evas;
779
780/**
781 * @typedef Evas_Public_Data
782 * Public data for an Evas.
783 * @ingroup Evas_Canvas
784 */
785typedef struct _Evas_Public_Data Evas_Public_Data;
786
787/**
788 * @typedef Evas_Object
789 * An Evas Object handle.
790 * @ingroup Evas_Object_Group
791 */
792typedef Eo Evas_Object;
793
794/**
795 * @typedef Evas_Object_Protected_Data
796 * Protected data for an Evas Object.
797 * @ingroup Evas_Object_Group
798 */
799typedef struct _Evas_Object_Protected_Data Evas_Object_Protected_Data;
800
801typedef void Evas_Performance; /**< An Evas Performance handle */
802typedef struct _Evas_Modifier Evas_Modifier; /**< An opaque type containing information on which modifier keys are registered in an Evas canvas */
803typedef struct _Evas_Lock Evas_Lock; /**< An opaque type containing information on which lock keys are registered in an Evas canvas */
804typedef struct _Evas_Smart Evas_Smart; /**< An Evas Smart Object handle */
805typedef struct _Evas_Native_Surface Evas_Native_Surface; /**< A generic datatype for engine specific native surface information */
806
807/**
808 * @typedef Evas_Video_Surface
809 *
810 * A generic datatype for video specific surface information
811 * @see evas_object_image_video_surface_set
812 * @see evas_object_image_video_surface_get
813 * @since 1.1
814 */
815typedef struct _Evas_Video_Surface Evas_Video_Surface;
816
817typedef unsigned long long Evas_Modifier_Mask; /**< An Evas modifier mask type */
818
819typedef int Evas_Coord;
820typedef int Evas_Font_Size;
821typedef int Evas_Angle;
822
823struct _Evas_Coord_Rectangle /**< A rectangle in Evas_Coord */
824{
825 Evas_Coord x; /**< top-left x co-ordinate of rectangle */
826 Evas_Coord y; /**< top-left y co-ordinate of rectangle */
827 Evas_Coord w; /**< width of rectangle */
828 Evas_Coord h; /**< height of rectangle */
829};
830
831struct _Evas_Coord_Point
832{
833 Evas_Coord x; /**< x co-ordinate */
834 Evas_Coord y; /**< y co-ordinate */
835};
836
837struct _Evas_Coord_Size
838{
839 Evas_Coord w; /**< width */
840 Evas_Coord h; /**< height */
841};
842
843struct _Evas_Coord_Precision_Size
844{
845 Evas_Coord w; /** < width */
846 Evas_Coord h; /** < height */
847 double wsub; /** < subpixel precision for width */
848 double ysub; /** < subpixel precision for height */
849};
850
851struct _Evas_Coord_Precision_Point
852{
853 Evas_Coord x, y;
854 double xsub, ysub;
855};
856
857struct _Evas_Point
858{
859 int x, y;
860};
861
862struct _Evas_Position
863{
864 Evas_Point output;
865 Evas_Coord_Point canvas; /**< position on the canvas */
866};
867
868struct _Evas_Precision_Position
869{
870 Evas_Point output;
871 Evas_Coord_Precision_Point canvas;
872};
873
874typedef enum _Evas_Aspect_Control
875{
876 EVAS_ASPECT_CONTROL_NONE = 0, /**< Preference on scaling unset */
877 EVAS_ASPECT_CONTROL_NEITHER = 1, /**< Same effect as unset preference on scaling */
878 EVAS_ASPECT_CONTROL_HORIZONTAL = 2, /**< Use all horizontal container space to place an object, using the given aspect */
879 EVAS_ASPECT_CONTROL_VERTICAL = 3, /**< Use all vertical container space to place an object, using the given aspect */
880 EVAS_ASPECT_CONTROL_BOTH = 4 /**< Use all horizontal @b and vertical container spaces to place an object (never growing it out of those bounds), using the given aspect */
881} Evas_Aspect_Control; /**< Aspect types/policies for scaling size hints, used for evas_object_size_hint_aspect_set() */
882
883typedef enum _Evas_Display_Mode
884{
885 EVAS_DISPLAY_MODE_NONE = 0, /**<Default mode */
886 EVAS_DISPLAY_MODE_INHERIT = 1, /**< Use this mode when object's display mode depend on ancestor's */
887 EVAS_DISPLAY_MODE_COMPRESS = 2, /**< Use this mode want to give comppress display mode hint to object */
888 EVAS_DISPLAY_MODE_EXPAND = 3, /**< Use this mode want to give expand display mode hint to object */
889 EVAS_DISPLAY_MODE_DONT_CHANGE = 4 /**< Use this mode when object should not change display mode */
890} Evas_Display_Mode; /**< object's display mode type related with compress/expand or etc mode */
891
892typedef struct _Evas_Pixel_Import_Source Evas_Pixel_Import_Source; /**< A source description of pixels for importing pixels */
893typedef struct _Evas_Engine_Info Evas_Engine_Info; /**< A generic Evas Engine information structure */
894typedef struct _Evas_Device Evas_Device; /**< A source device handle - where the event came from */
895typedef struct _Evas_Event_Mouse_Down Evas_Event_Mouse_Down; /**< Event structure for #EVAS_CALLBACK_MOUSE_DOWN event callbacks */
896typedef struct _Evas_Event_Mouse_Up Evas_Event_Mouse_Up; /**< Event structure for #EVAS_CALLBACK_MOUSE_UP event callbacks */
897typedef struct _Evas_Event_Mouse_In Evas_Event_Mouse_In; /**< Event structure for #EVAS_CALLBACK_MOUSE_IN event callbacks */
898typedef struct _Evas_Event_Mouse_Out Evas_Event_Mouse_Out; /**< Event structure for #EVAS_CALLBACK_MOUSE_OUT event callbacks */
899typedef struct _Evas_Event_Mouse_Move Evas_Event_Mouse_Move; /**< Event structure for #EVAS_CALLBACK_MOUSE_MOVE event callbacks */
900typedef struct _Evas_Event_Mouse_Wheel Evas_Event_Mouse_Wheel; /**< Event structure for #EVAS_CALLBACK_MOUSE_WHEEL event callbacks */
901typedef struct _Evas_Event_Multi_Down Evas_Event_Multi_Down; /**< Event structure for #EVAS_CALLBACK_MULTI_DOWN event callbacks */
902typedef struct _Evas_Event_Multi_Up Evas_Event_Multi_Up; /**< Event structure for #EVAS_CALLBACK_MULTI_UP event callbacks */
903typedef struct _Evas_Event_Multi_Move Evas_Event_Multi_Move; /**< Event structure for #EVAS_CALLBACK_MULTI_MOVE event callbacks */
904typedef struct _Evas_Event_Key_Down Evas_Event_Key_Down; /**< Event structure for #EVAS_CALLBACK_KEY_DOWN event callbacks */
905typedef struct _Evas_Event_Key_Up Evas_Event_Key_Up; /**< Event structure for #EVAS_CALLBACK_KEY_UP event callbacks */
906typedef struct _Evas_Event_Hold Evas_Event_Hold; /**< Event structure for #EVAS_CALLBACK_HOLD event callbacks */
907
908typedef enum _Evas_Load_Error
909{
910 EVAS_LOAD_ERROR_NONE = 0, /**< No error on load */
911 EVAS_LOAD_ERROR_GENERIC = 1, /**< A non-specific error occurred */
912 EVAS_LOAD_ERROR_DOES_NOT_EXIST = 2, /**< File (or file path) does not exist */
913 EVAS_LOAD_ERROR_PERMISSION_DENIED = 3, /**< Permission denied to an existing file (or path) */
914 EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED = 4, /**< Allocation of resources failure prevented load */
915 EVAS_LOAD_ERROR_CORRUPT_FILE = 5, /**< File corrupt (but was detected as a known format) */
916 EVAS_LOAD_ERROR_UNKNOWN_FORMAT = 6 /**< File is not a known format */
917} Evas_Load_Error; /**< Evas image load error codes one can get - see evas_load_error_str() too. */
918
919typedef enum _Evas_Alloc_Error
920{
921 EVAS_ALLOC_ERROR_NONE = 0, /**< No allocation error */
922 EVAS_ALLOC_ERROR_FATAL = 1, /**< Allocation failed despite attempts to free up memory */
923 EVAS_ALLOC_ERROR_RECOVERED = 2 /**< Allocation succeeded, but extra memory had to be found by freeing up speculative resources */
924} Evas_Alloc_Error; /**< Possible allocation errors returned by evas_alloc_error() */
925
926typedef enum _Evas_Fill_Spread
927{
928 EVAS_TEXTURE_REFLECT = 0, /**< image fill tiling mode - tiling reflects */
929 EVAS_TEXTURE_REPEAT = 1, /**< tiling repeats */
930 EVAS_TEXTURE_RESTRICT = 2, /**< tiling clamps - range offset ignored */
931 EVAS_TEXTURE_RESTRICT_REFLECT = 3, /**< tiling clamps and any range offset reflects */
932 EVAS_TEXTURE_RESTRICT_REPEAT = 4, /**< tiling clamps and any range offset repeats */
933 EVAS_TEXTURE_PAD = 5 /**< tiling extends with end values */
934} Evas_Fill_Spread; /**< Fill types used for evas_object_image_fill_spread_set() */
935
936typedef enum _Evas_Pixel_Import_Pixel_Format
937{
938 EVAS_PIXEL_FORMAT_NONE = 0, /**< No pixel format */
939 EVAS_PIXEL_FORMAT_ARGB32 = 1, /**< ARGB 32bit pixel format with A in the high byte per 32bit pixel word */
940 EVAS_PIXEL_FORMAT_YUV420P_601 = 2 /**< YUV 420 Planar format with CCIR 601 color encoding with contiguous planes in the order Y, U and V */
941} Evas_Pixel_Import_Pixel_Format; /**< Pixel format for import call. See evas_object_image_pixels_import() */
942
943struct _Evas_Pixel_Import_Source
944{
945 Evas_Pixel_Import_Pixel_Format format; /**< pixel format type ie ARGB32, YUV420P_601 etc. */
946 int w, h; /**< width and height of source in pixels */
947 void **rows; /**< an array of pointers (size depends on format) pointing to left edge of each scanline */
948};
949
950/* magic version number to know what the native surf struct looks like */
951#define EVAS_NATIVE_SURFACE_VERSION 2
952
953typedef enum _Evas_Native_Surface_Type
954{
955 EVAS_NATIVE_SURFACE_NONE,
956 EVAS_NATIVE_SURFACE_X11,
957 EVAS_NATIVE_SURFACE_OPENGL
958} Evas_Native_Surface_Type;
959
960struct _Evas_Native_Surface
961{
962 int version;
963 Evas_Native_Surface_Type type;
964 union {
965 struct
966 {
967 void *visual; /**< visual of the pixmap to use (Visual) */
968 unsigned long pixmap; /**< pixmap id to use (Pixmap) */
969 } x11;
970 struct
971 {
972 unsigned int texture_id; /**< opengl texture id to use from glGenTextures() */
973 unsigned int framebuffer_id; /**< 0 if not a FBO, FBO id otherwise from glGenFramebuffers() */
974 unsigned int internal_format; /**< same as 'internalFormat' for glTexImage2D() */
975 unsigned int format; /**< same as 'format' for glTexImage2D() */
976 unsigned int x, y, w, h; /**< region inside the texture to use (image size is assumed as texture size, with 0, 0 being the top-left and co-ordinates working down to the right and bottom being positive) */
977 } opengl;
978 } data;
979};
980
981/**
982 * @def EVAS_VIDEO_SURFACE_VERSION
983 * Magic version number to know what the video surf struct looks like
984 * @since 1.1
985 */
986#define EVAS_VIDEO_SURFACE_VERSION 1
987
988typedef void (*Evas_Video_Cb)(void *data, Evas_Object *obj, const Evas_Video_Surface *surface);
989typedef void (*Evas_Video_Coord_Cb)(void *data, Evas_Object *obj, const Evas_Video_Surface *surface, Evas_Coord a, Evas_Coord b);
990
991struct _Evas_Video_Surface
992{
993 int version;
994
995 Evas_Video_Coord_Cb move; /**< Move the video surface to this position */
996 Evas_Video_Coord_Cb resize; /**< Resize the video surface to that size */
997 Evas_Video_Cb show; /**< Show the video overlay surface */
998 Evas_Video_Cb hide; /**< Hide the video overlay surface */
999 Evas_Video_Cb update_pixels; /**< Please update the Evas_Object_Image pixels when called */
1000
1001 Evas_Object *parent;
1002 void *data;
1003};
1004
1005#define EVAS_LAYER_MIN -32768 /**< bottom-most layer number */
1006#define EVAS_LAYER_MAX 32767 /**< top-most layer number */
1007
1008#define EVAS_COLOR_SPACE_ARGB 0 /**< Not used for anything */
1009#define EVAS_COLOR_SPACE_AHSV 1 /**< Not used for anything */
1010#define EVAS_TEXT_INVALID -1 /**< Not used for anything */
1011#define EVAS_TEXT_SPECIAL -2 /**< Not used for anything */
1012
1013#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() */
1014#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() */
1015#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) */
1016#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) */
1017#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 */
1018#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 */
1019
1020/**
1021 * How the object should be rendered to output.
1022 * @ingroup Evas_Object_Group_Extras
1023 */
1024typedef enum _Evas_Render_Op
1025{
1026 EVAS_RENDER_BLEND = 0, /**< default op: d = d*(1-sa) + s */
1027 EVAS_RENDER_BLEND_REL = 1, /**< d = d*(1 - sa) + s*da */
1028 EVAS_RENDER_COPY = 2, /**< d = s */
1029 EVAS_RENDER_COPY_REL = 3, /**< d = s*da */
1030 EVAS_RENDER_ADD = 4, /* d = d + s */
1031 EVAS_RENDER_ADD_REL = 5, /**< d = d + s*da */
1032 EVAS_RENDER_SUB = 6, /**< d = d - s */
1033 EVAS_RENDER_SUB_REL = 7, /* d = d - s*da */
1034 EVAS_RENDER_TINT = 8, /**< d = d*s + d*(1 - sa) + s*(1 - da) */
1035 EVAS_RENDER_TINT_REL = 9, /**< d = d*(1 - sa + s) */
1036 EVAS_RENDER_MASK = 10, /**< d = d*sa */
1037 EVAS_RENDER_MUL = 11 /**< d = d*s */
1038} Evas_Render_Op; /**< How the object should be rendered to output. */
1039
1040typedef enum _Evas_Border_Fill_Mode
1041{
1042 EVAS_BORDER_FILL_NONE = 0, /**< Image's center region is @b not to be rendered */
1043 EVAS_BORDER_FILL_DEFAULT = 1, /**< Image's center region is to be @b blended with objects underneath it, if it has transparency. This is the default behavior for image objects */
1044 EVAS_BORDER_FILL_SOLID = 2 /**< Image's center region is to be made solid, even if it has transparency on it */
1045} Evas_Border_Fill_Mode; /**< How an image's center region (the complement to the border region) should be rendered by Evas */
1046
1047typedef enum _Evas_Image_Scale_Hint
1048{
1049 EVAS_IMAGE_SCALE_HINT_NONE = 0, /**< No scale hint at all */
1050 EVAS_IMAGE_SCALE_HINT_DYNAMIC = 1, /**< Image is being re-scaled over time, thus turning scaling cache @b off for its data */
1051 EVAS_IMAGE_SCALE_HINT_STATIC = 2 /**< Image is not being re-scaled over time, thus turning scaling cache @b on for its data */
1052} Evas_Image_Scale_Hint; /**< How an image's data is to be treated by Evas, with regard to scaling cache */
1053
1054typedef enum _Evas_Image_Animated_Loop_Hint
1055{
1056 EVAS_IMAGE_ANIMATED_HINT_NONE = 0,
1057 EVAS_IMAGE_ANIMATED_HINT_LOOP = 1, /**< Image's animation mode is loop like 1->2->3->1->2->3 */
1058 EVAS_IMAGE_ANIMATED_HINT_PINGPONG = 2 /**< Image's animation mode is pingpong like 1->2->3->2->1-> ... */
1059} Evas_Image_Animated_Loop_Hint;
1060
1061typedef enum _Evas_Engine_Render_Mode
1062{
1063 EVAS_RENDER_MODE_BLOCKING = 0,
1064 EVAS_RENDER_MODE_NONBLOCKING = 1,
1065} Evas_Engine_Render_Mode;
1066
1067typedef enum _Evas_Image_Content_Hint
1068{
1069 EVAS_IMAGE_CONTENT_HINT_NONE = 0, /**< No hint at all */
1070 EVAS_IMAGE_CONTENT_HINT_DYNAMIC = 1, /**< The contents will change over time */
1071 EVAS_IMAGE_CONTENT_HINT_STATIC = 2 /**< The contents won't change over time */
1072} Evas_Image_Content_Hint; /**< How an image's data is to be treated by Evas, for optimization */
1073
1074typedef enum _Evas_Device_Class
1075{
1076 EVAS_DEVICE_CLASS_NONE, /**< Not a device @since 1.8 */
1077 EVAS_DEVICE_CLASS_SEAT, /**< The user/seat (the user themselves) @since 1.8 */
1078 EVAS_DEVICE_CLASS_KEYBOARD, /**< A regular keyboard, numberpad or attached buttons @since 1.8 */
1079 EVAS_DEVICE_CLASS_MOUSE, /**< A mouse, trackball or touchpad relative motion device @since 1.8 */
1080 EVAS_DEVICE_CLASS_TOUCH, /**< A touchscreen with fingers or stylus @since 1.8 */
1081 EVAS_DEVICE_CLASS_PEN, /**< A special pen device @since 1.8 */
1082 EVAS_DEVICE_CLASS_POINTER, /**< A laser pointer, wii-style or "minority report" pointing device @since 1.8 */
1083 EVAS_DEVICE_CLASS_GAMEPAD /**< A gamepad controller or joystick @since 1.8 */
1084} Evas_Device_Class;
1085
1086struct _Evas_Engine_Info /** Generic engine information. Generic info is useless */
1087{
1088 int magic; /**< Magic number */
1089};
1090
1091struct _Evas_Event_Mouse_Down /** Mouse button press event */
1092{
1093 int button; /**< Mouse button number that went down (1 - 32) */
1094
1095 Evas_Point output; /**< The X/Y location of the cursor */
1096 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */
1097
1098 void *data;
1099 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1100 Evas_Lock *locks;
1101
1102 Evas_Button_Flags flags; /**< button flags set during the event */
1103 unsigned int timestamp;
1104 Evas_Event_Flags event_flags;
1105 Evas_Device *dev;
1106};
1107
1108struct _Evas_Event_Mouse_Up /** Mouse button release event */
1109{
1110 int button; /**< Mouse button number that was raised (1 - 32) */
1111
1112 Evas_Point output; /**< The X/Y location of the cursor */
1113 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */
1114
1115 void *data;
1116 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1117 Evas_Lock *locks;
1118
1119 Evas_Button_Flags flags; /**< button flags set during the event */
1120 unsigned int timestamp;
1121 Evas_Event_Flags event_flags;
1122 Evas_Device *dev;
1123};
1124
1125struct _Evas_Event_Mouse_In /** Mouse enter event */
1126{
1127 int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
1128
1129 Evas_Point output; /**< The X/Y location of the cursor */
1130 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */
1131
1132 void *data;
1133 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1134 Evas_Lock *locks;
1135 unsigned int timestamp;
1136 Evas_Event_Flags event_flags;
1137 Evas_Device *dev;
1138};
1139
1140struct _Evas_Event_Mouse_Out /** Mouse leave event */
1141{
1142 int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
1143
1144 Evas_Point output; /**< The X/Y location of the cursor */
1145 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */
1146
1147 void *data;
1148 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1149 Evas_Lock *locks;
1150 unsigned int timestamp;
1151 Evas_Event_Flags event_flags;
1152 Evas_Device *dev;
1153};
1154
1155struct _Evas_Event_Mouse_Move /** Mouse move event */
1156{
1157 int buttons; /**< Button pressed mask, Bits set to 1 are buttons currently pressed (bit 0 = mouse button 1, bit 1 = mouse button 2 etc.) */
1158
1159 Evas_Position cur; /**< Current mouse position */
1160 Evas_Position prev; /**< Previous mouse position */
1161
1162 void *data;
1163 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1164 Evas_Lock *locks;
1165 unsigned int timestamp;
1166 Evas_Event_Flags event_flags;
1167 Evas_Device *dev;
1168};
1169
1170struct _Evas_Event_Mouse_Wheel /** Wheel event */
1171{
1172 int direction; /* 0 = default up/down wheel FIXME: more wheel types */
1173 int z; /* ...,-2,-1 = down, 1,2,... = up */
1174
1175 Evas_Point output; /**< The X/Y location of the cursor */
1176 Evas_Coord_Point canvas; /**< The X/Y location of the cursor */
1177
1178 void *data;
1179 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1180 Evas_Lock *locks;
1181 unsigned int timestamp;
1182 Evas_Event_Flags event_flags;
1183 Evas_Device *dev;
1184};
1185
1186struct _Evas_Event_Multi_Down /** Multi button press event */
1187{
1188 int device; /**< Multi device number that went down (1 or more for extra touches) */
1189 double radius, radius_x, radius_y;
1190 double pressure, angle;
1191
1192 Evas_Point output;
1193 Evas_Coord_Precision_Point canvas;
1194
1195 void *data;
1196 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1197 Evas_Lock *locks;
1198
1199 Evas_Button_Flags flags; /**< button flags set during the event */
1200 unsigned int timestamp;
1201 Evas_Event_Flags event_flags;
1202 Evas_Device *dev;
1203};
1204
1205struct _Evas_Event_Multi_Up /** Multi button release event */
1206{
1207 int device; /**< Multi device number that went up (1 or more for extra touches) */
1208 double radius, radius_x, radius_y;
1209 double pressure, angle;
1210
1211 Evas_Point output;
1212 Evas_Coord_Precision_Point canvas;
1213
1214 void *data;
1215 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1216 Evas_Lock *locks;
1217
1218 Evas_Button_Flags flags; /**< button flags set during the event */
1219 unsigned int timestamp;
1220 Evas_Event_Flags event_flags;
1221 Evas_Device *dev;
1222};
1223
1224struct _Evas_Event_Multi_Move /** Multi button down event */
1225{
1226 int device; /**< Multi device number that moved (1 or more for extra touches) */
1227 double radius, radius_x, radius_y;
1228 double pressure, angle;
1229
1230 Evas_Precision_Position cur;
1231
1232 void *data;
1233 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1234 Evas_Lock *locks;
1235 unsigned int timestamp;
1236 Evas_Event_Flags event_flags;
1237 Evas_Device *dev;
1238};
1239
1240struct _Evas_Event_Key_Down /** Key press event */
1241{
1242 char *keyname; /**< the name string of the key pressed */
1243 void *data;
1244 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1245 Evas_Lock *locks;
1246
1247 const char *key; /**< The logical key : (eg shift+1 == exclamation) */
1248 const char *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */
1249 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 */
1250 unsigned int timestamp;
1251 Evas_Event_Flags event_flags;
1252 Evas_Device *dev;
1253};
1254
1255struct _Evas_Event_Key_Up /** Key release event */
1256{
1257 char *keyname; /**< the name string of the key released */
1258 void *data;
1259 Evas_Modifier *modifiers; /**< modifier keys pressed during the event */
1260 Evas_Lock *locks;
1261
1262 const char *key; /**< The logical key : (eg shift+1 == exclamation) */
1263 const char *string; /**< A UTF8 string if this keystroke has produced a visible string to be ADDED */
1264 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 */
1265 unsigned int timestamp;
1266 Evas_Event_Flags event_flags;
1267 Evas_Device *dev;
1268};
1269
1270struct _Evas_Event_Hold /** Hold change event */
1271{
1272 int hold; /**< The hold flag */
1273 void *data;
1274
1275 unsigned int timestamp;
1276 Evas_Event_Flags event_flags;
1277 Evas_Device *dev;
1278};
1279
1280/**
1281 * How the mouse pointer should be handled by Evas.
1282 *
1283 * In the mode #EVAS_OBJECT_POINTER_MODE_AUTOGRAB, when a mouse button
1284 * is pressed down over an object and held, with the mouse pointer
1285 * being moved outside of it, the pointer still behaves as being bound
1286 * to that object, albeit out of its drawing region. When the button
1287 * is released, the event will be fed to the object, that may check if
1288 * the final position is over it or not and do something about it.
1289 *
1290 * In the mode #EVAS_OBJECT_POINTER_MODE_NOGRAB, the pointer will
1291 * always be bound to the object right below it.
1292 *
1293 * @ingroup Evas_Object_Group_Extras
1294 */
1295typedef enum _Evas_Object_Pointer_Mode
1296{
1297 EVAS_OBJECT_POINTER_MODE_AUTOGRAB, /**< default, X11-like */
1298 EVAS_OBJECT_POINTER_MODE_NOGRAB, /**< pointer always bound to the object right below it */
1299 EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN /**< useful on object with "repeat events" enabled, where mouse/touch up and down events WONT be repeated to objects and these objects wont be auto-grabbed. @since 1.2 */
1300} Evas_Object_Pointer_Mode; /**< How the mouse pointer should be handled by Evas. */
1301
1302typedef void (*Evas_Smart_Cb)(void *data, Evas_Object *obj, void *event_info); /**< Evas smart objects' "smart callback" function signature */
1303typedef void (*Evas_Event_Cb)(void *data, Evas *e, void *event_info); /**< Evas event callback function signature */
1304typedef Eina_Bool (*Evas_Object_Event_Post_Cb)(void *data, Evas *e);
1305typedef void (*Evas_Object_Event_Cb)(void *data, Evas *e, Evas_Object *obj, void *event_info); /**< Evas object event callback function signature */
1306typedef void (*Evas_Async_Events_Put_Cb)(void *target, Evas_Callback_Type type, void *event_info);
1307
1308/**
1309 * @defgroup Evas_Group Top Level Functions
1310 *
1311 * Functions that affect Evas as a whole.
1312 */
1313
1314/**
1315 * Initialize Evas
1316 *
1317 * @return The init counter value.
1318 *
1319 * This function initializes Evas and increments a counter of the
1320 * number of calls to it. It returns the new counter's value.
1321 *
1322 * @see evas_shutdown().
1323 *
1324 * Most EFL users wouldn't be using this function directly, because
1325 * they wouldn't access Evas directly by themselves. Instead, they
1326 * would be using higher level helpers, like @c ecore_evas_init().
1327 * See http://docs.enlightenment.org/auto/ecore/.
1328 *
1329 * You should be using this if your use is something like the
1330 * following. The buffer engine is just one of the many ones Evas
1331 * provides.
1332 *
1333 * @dontinclude evas-buffer-simple.c
1334 * @skip int main
1335 * @until return -1;
1336 * And being the canvas creation something like:
1337 * @skip static Evas *create_canvas
1338 * @until evas_output_viewport_set(canvas,
1339 *
1340 * Note that this is code creating an Evas canvas with no usage of
1341 * Ecore helpers at all -- no linkage with Ecore on this scenario,
1342 * thus. Again, this wouldn't be on Evas common usage for most
1343 * developers. See the full @ref Example_Evas_Buffer_Simple "example".
1344 *
1345 * @ingroup Evas_Group
1346 */
1347EAPI int evas_init(void);
1348
1349/**
1350 * Shutdown Evas
1351 *
1352 * @return Evas' init counter value.
1353 *
1354 * This function finalizes Evas, decrementing the counter of the
1355 * number of calls to the function evas_init(). This new value for the
1356 * counter is returned.
1357 *
1358 * @see evas_init().
1359 *
1360 * If you were the sole user of Evas, by means of evas_init(), you can
1361 * check if it's being properly shut down by expecting a return value
1362 * of 0.
1363 *
1364 * Example code follows.
1365 * @dontinclude evas-buffer-simple.c
1366 * @skip // NOTE: use ecore_evas_buffer_new
1367 * @until evas_shutdown
1368 * Where that function would contain:
1369 * @skip evas_free(canvas)
1370 * @until evas_free(canvas)
1371 *
1372 * Most users would be using ecore_evas_shutdown() instead, like told
1373 * in evas_init(). See the full @ref Example_Evas_Buffer_Simple
1374 * "example".
1375 *
1376 * @ingroup Evas_Group
1377 */
1378EAPI int evas_shutdown(void);
1379
1380/**
1381 * Return if any allocation errors have occurred during the prior function
1382 * @return The allocation error flag
1383 *
1384 * This function will return if any memory allocation errors occurred during,
1385 * and what kind they were. The return value will be one of
1386 * EVAS_ALLOC_ERROR_NONE, EVAS_ALLOC_ERROR_FATAL or EVAS_ALLOC_ERROR_RECOVERED
1387 * with each meaning something different.
1388 *
1389 * EVAS_ALLOC_ERROR_NONE means that no errors occurred at all and the function
1390 * worked as expected.
1391 *
1392 * EVAS_ALLOC_ERROR_FATAL means the function was completely unable to perform
1393 * its job and will have exited as cleanly as possible. The programmer
1394 * should consider this as a sign of very low memory and should try and safely
1395 * recover from the prior functions failure (or try free up memory elsewhere
1396 * and try again after more memory is freed).
1397 *
1398 * EVAS_ALLOC_ERROR_RECOVERED means that an allocation error occurred, but was
1399 * recovered from by evas finding memory of its own it has allocated and
1400 * freeing what it sees as not really usefully allocated memory. What is freed
1401 * may vary. Evas may reduce the resolution of images, free cached images or
1402 * fonts, trhow out pre-rendered data, reduce the complexity of change lists
1403 * etc. Evas and the program will function as per normal after this, but this
1404 * is a sign of low memory, and it is suggested that the program try and
1405 * identify memory it doesn't need, and free it.
1406 *
1407 * Example:
1408 * @code
1409 * extern Evas_Object *object;
1410 * void callback (void *data, Evas *e, Evas_Object *obj, void *event_info);
1411 *
1412 * evas_object_event_callback_add(object, EVAS_CALLBACK_MOUSE_DOWN, callback, NULL);
1413 * if (evas_alloc_error() == EVAS_ALLOC_ERROR_FATAL)
1414 * {
1415 * fprintf(stderr, "ERROR: Completely unable to attach callback. Must\n");
1416 * fprintf(stderr, " destroy object now as it cannot be used.\n");
1417 * evas_object_del(object);
1418 * object = NULL;
1419 * fprintf(stderr, "WARNING: Memory is really low. Cleaning out RAM.\n");
1420 * my_memory_cleanup();
1421 * }
1422 * if (evas_alloc_error() == EVAS_ALLOC_ERROR_RECOVERED)
1423 * {
1424 * fprintf(stderr, "WARNING: Memory is really low. Cleaning out RAM.\n");
1425 * my_memory_cleanup();
1426 * }
1427 * @endcode
1428 *
1429 * @ingroup Evas_Group
1430 */
1431EAPI Evas_Alloc_Error evas_alloc_error(void);
1432
1433/**
1434 * @brief Get evas' internal asynchronous events read file descriptor.
1435 *
1436 * @return The canvas' asynchronous events read file descriptor.
1437 *
1438 * Evas' asynchronous events are meant to be dealt with internally,
1439 * i. e., when building stuff to be glued together into the EFL
1440 * infrastructure -- a module, for example. The context which demands
1441 * its use is when calculations need to be done out of the main
1442 * thread, asynchronously, and some action must be performed after
1443 * that.
1444 *
1445 * An example of actual use of this API is for image asynchronous
1446 * preload inside evas. If the canvas was instantiated through
1447 * ecore-evas usage, ecore itself will take care of calling those
1448 * events' processing.
1449 *
1450 * This function returns the read file descriptor where to get the
1451 * asynchronous events of the canvas. Naturally, other mainloops,
1452 * apart from ecore, may make use of it.
1453 *
1454 * @ingroup Evas_Group
1455 */
1456EAPI int evas_async_events_fd_get(void) EINA_WARN_UNUSED_RESULT;
1457
1458/**
1459 * @brief Trigger the processing of all events waiting on the file
1460 * descriptor returned by evas_async_events_fd_get().
1461 *
1462 * @return The number of events processed.
1463 *
1464 * All asynchronous events queued up by evas_async_events_put() are
1465 * processed here. More precisely, the callback functions, informed
1466 * together with other event parameters, when queued, get called (with
1467 * those parameters), in that order.
1468 *
1469 * @ingroup Evas_Group
1470 */
1471EAPI int evas_async_events_process(void);
1472
1473/**
1474 * Insert asynchronous events on the canvas.
1475 *
1476 * @param target The target to be affected by the events.
1477 * @param type The type of callback function.
1478 * @param event_info Information about the event.
1479 * @param func The callback function pointer.
1480 *
1481 * This is the way, for a routine running outside evas' main thread,
1482 * to report an asynchronous event. A callback function is informed,
1483 * whose call is to happen after evas_async_events_process() is
1484 * called.
1485 *
1486 * @ingroup Evas_Group
1487 */
1488EAPI Eina_Bool evas_async_events_put(const void *target, Evas_Callback_Type type, void *event_info, Evas_Async_Events_Put_Cb func) EINA_ARG_NONNULL(1, 4);
1489
1490/**
1491 * @defgroup Evas_Canvas Canvas Functions
1492 *
1493 * Low level Evas canvas functions. Sub groups will present more high
1494 * level ones, though.
1495 *
1496 * Most of these functions deal with low level Evas actions, like:
1497 * @li create/destroy raw canvases, not bound to any displaying engine
1498 * @li tell a canvas i got focused (in a windowing context, for example)
1499 * @li tell a canvas a region should not be calculated anymore in rendering
1500 * @li tell a canvas to render its contents, immediately
1501 *
1502 * Most users will be using Evas by means of the @c Ecore_Evas
1503 * wrapper, which deals with all the above mentioned issues
1504 * automatically for them. Thus, you'll be looking at this section
1505 * only if you're building low level stuff.
1506 *
1507 * The groups within present you functions that deal with the canvas
1508 * directly, too, and not yet with its @b objects. They are the
1509 * functions you need to use at a minimum to get a working canvas.
1510 *
1511 * Some of the functions in this group are exemplified @ref
1512 * Example_Evas_Events "here".
1513 */
1514
1515/**
1516 * Creates a new empty evas.
1517 *
1518 * Note that before you can use the evas, you will to at a minimum:
1519 * @li Set its render method with @ref evas_output_method_set .
1520 * @li Set its viewport size with @ref evas_output_viewport_set .
1521 * @li Set its size of the canvas with @ref evas_output_size_set .
1522 * @li Ensure that the render engine is given the correct settings
1523 * with @ref evas_engine_info_set .
1524 *
1525 * This function should only fail if the memory allocation fails
1526 *
1527 * @note this function is very low level. Instead of using it
1528 * directly, consider using the high level functions in
1529 * Ecore_Evas such as @c ecore_evas_new(). See
1530 * http://docs.enlightenment.org/auto/ecore/.
1531 *
1532 * @attention it is recommended that one calls evas_init() before
1533 * creating new canvas.
1534 *
1535 * @return A new uninitialised Evas canvas on success. Otherwise, @c NULL.
1536 * @ingroup Evas_Canvas
1537 */
1538EAPI Evas *evas_new(void) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
1539
1540/**
1541 * Frees the given evas and any objects created on it.
1542 *
1543 * Any objects with 'free' callbacks will have those callbacks called
1544 * in this function.
1545 *
1546 * @param e The given evas.
1547 *
1548 * @ingroup Evas_Canvas
1549 */
1550EAPI void evas_free(Evas *e) EINA_ARG_NONNULL(1);
1551
1552/**
1553 * Inform to the evas that it got the focus.
1554 *
1555 * @param e The evas to change information.
1556 * @ingroup Evas_Canvas
1557 */
1558EAPI void evas_focus_in(Evas *e);
1559
1560/**
1561 * Inform to the evas that it lost the focus.
1562 *
1563 * @param e The evas to change information.
1564 * @ingroup Evas_Canvas
1565 */
1566EAPI void evas_focus_out(Evas *e);
1567
1568/**
1569 * Get the focus state known by the given evas
1570 *
1571 * @param e The evas to query information.
1572 * @ingroup Evas_Canvas
1573 */
1574EAPI Eina_Bool evas_focus_state_get(const Evas *e);
1575
1576/**
1577 * Push the nochange flag up 1
1578 *
1579 * This tells evas, that while the nochange flag is greater than 0, do not
1580 * mark objects as "changed" when making changes.
1581 *
1582 * @param e The evas to change information.
1583 * @ingroup Evas_Canvas
1584 */
1585EAPI void evas_nochange_push(Evas *e);
1586
1587/**
1588 * Pop the nochange flag down 1
1589 *
1590 * This tells evas, that while the nochange flag is greater than 0, do not
1591 * mark objects as "changed" when making changes.
1592 *
1593 * @param e The evas to change information.
1594 * @ingroup Evas_Canvas
1595 */
1596EAPI void evas_nochange_pop(Evas *e);
1597
1598/**
1599 * Attaches a specific pointer to the evas for fetching later
1600 *
1601 * @param e The canvas to attach the pointer to
1602 * @param data The pointer to attach
1603 * @ingroup Evas_Canvas
1604 */
1605EAPI void evas_data_attach_set(Evas *e, void *data) EINA_ARG_NONNULL(1);
1606
1607/**
1608 * Returns the pointer attached by evas_data_attach_set()
1609 *
1610 * @param e The canvas to attach the pointer to
1611 * @return The pointer attached
1612 * @ingroup Evas_Canvas
1613 */
1614EAPI void *evas_data_attach_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1615
1616/**
1617 * Add a damage rectangle.
1618 *
1619 * @param e The given canvas pointer.
1620 * @param x The rectangle's left position.
1621 * @param y The rectangle's top position.
1622 * @param w The rectangle's width.
1623 * @param h The rectangle's height.
1624 *
1625 * This is the function by which one tells evas that a part of the
1626 * canvas has to be repainted.
1627 *
1628 * @note All newly created Evas rectangles get the default color values of 255 255 255 255 (opaque white).
1629 *
1630 * @ingroup Evas_Canvas
1631 */
1632EAPI void evas_damage_rectangle_add(Evas *e, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
1633
1634/**
1635 * Add an "obscured region" to an Evas canvas.
1636 *
1637 * @param e The given canvas pointer.
1638 * @param x The rectangle's top left corner's horizontal coordinate.
1639 * @param y The rectangle's top left corner's vertical coordinate
1640 * @param w The rectangle's width.
1641 * @param h The rectangle's height.
1642 *
1643 * This is the function by which one tells an Evas canvas that a part
1644 * of it <b>must not</b> be repainted. The region must be
1645 * rectangular and its coordinates inside the canvas viewport are
1646 * passed in the call. After this call, the region specified won't
1647 * participate in any form in Evas' calculations and actions during
1648 * its rendering updates, having its displaying content frozen as it
1649 * was just after this function took place.
1650 *
1651 * We call it "obscured region" because the most common use case for
1652 * this rendering (partial) freeze is something else (most probably
1653 * other canvas) being on top of the specified rectangular region,
1654 * thus shading it completely from the user's final scene in a
1655 * display. To avoid unnecessary processing, one should indicate to the
1656 * obscured canvas not to bother about the non-important area.
1657 *
1658 * The majority of users won't have to worry about this function, as
1659 * they'll be using just one canvas in their applications, with
1660 * nothing inset or on top of it in any form.
1661 *
1662 * To make this region one that @b has to be repainted again, call the
1663 * function evas_obscured_clear().
1664 *
1665 * @note This is a <b>very low level function</b>, which most of
1666 * Evas' users wouldn't care about.
1667 *
1668 * @note This function does @b not flag the canvas as having its state
1669 * changed. If you want to re-render it afterwards expecting new
1670 * contents, you have to add "damage" regions yourself (see
1671 * evas_damage_rectangle_add()).
1672 *
1673 * @see evas_obscured_clear()
1674 * @see evas_render_updates()
1675 *
1676 * Example code follows.
1677 * @dontinclude evas-events.c
1678 * @skip add an obscured
1679 * @until evas_obscured_clear(evas);
1680 *
1681 * In that example, pressing the "Ctrl" and "o" keys will impose or
1682 * remove an obscured region in the middle of the canvas. You'll get
1683 * the same contents at the time the key was pressed, if toggling it
1684 * on, until you toggle it off again (make sure the animation is
1685 * running on to get the idea better). See the full @ref
1686 * Example_Evas_Events "example".
1687 *
1688 * @ingroup Evas_Canvas
1689 */
1690EAPI void evas_obscured_rectangle_add(Evas *e, int x, int y, int w, int h) EINA_ARG_NONNULL(1);
1691
1692/**
1693 * Remove all "obscured regions" from an Evas canvas.
1694 *
1695 * @param e The given canvas pointer.
1696 *
1697 * This function removes all the rectangles from the obscured regions
1698 * list of the canvas @p e. It takes obscured areas added with
1699 * evas_obscured_rectangle_add() and make them again a regions that @b
1700 * have to be repainted on rendering updates.
1701 *
1702 * @note This is a <b>very low level function</b>, which most of
1703 * Evas' users wouldn't care about.
1704 *
1705 * @note This function does @b not flag the canvas as having its state
1706 * changed. If you want to re-render it afterwards expecting new
1707 * contents, you have to add "damage" regions yourself (see
1708 * evas_damage_rectangle_add()).
1709 *
1710 * @see evas_obscured_rectangle_add() for an example
1711 * @see evas_render_updates()
1712 *
1713 * @ingroup Evas_Canvas
1714 */
1715EAPI void evas_obscured_clear(Evas *e) EINA_ARG_NONNULL(1);
1716
1717/**
1718 * Force immediate renderization of the given Evas canvas.
1719 *
1720 * @param e The given canvas pointer.
1721 * @return A newly allocated list of updated rectangles of the canvas
1722 * (@c Eina_Rectangle structs). Free this list with
1723 * evas_render_updates_free().
1724 *
1725 * This function forces an immediate renderization update of the given
1726 * canvas @p e.
1727 *
1728 * @note This is a <b>very low level function</b>, which most of
1729 * Evas' users wouldn't care about. One would use it, for example, to
1730 * grab an Evas' canvas update regions and paint them back, using the
1731 * canvas' pixmap, on a displaying system working below Evas.
1732 *
1733 * @note Evas is a stateful canvas. If no operations changing its
1734 * state took place since the last rendering action, you won't see no
1735 * changes and this call will be a no-op.
1736 *
1737 * Example code follows.
1738 * @dontinclude evas-events.c
1739 * @skip add an obscured
1740 * @until d.obscured = !d.obscured;
1741 *
1742 * See the full @ref Example_Evas_Events "example".
1743 *
1744 * @ingroup Evas_Canvas
1745 */
1746EAPI Eina_List *evas_render_updates(Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1747
1748/**
1749 * Free the rectangles returned by evas_render_updates().
1750 *
1751 * @param updates The list of updated rectangles of the canvas.
1752 *
1753 * This function removes the region from the render updates list. It
1754 * makes the region doesn't be render updated anymore.
1755 *
1756 * @see evas_render_updates() for an example
1757 *
1758 * @ingroup Evas_Canvas
1759 */
1760EAPI void evas_render_updates_free(Eina_List *updates);
1761
1762/**
1763 * Force renderization of the given canvas.
1764 *
1765 * @param e The given canvas pointer.
1766 *
1767 * @ingroup Evas_Canvas
1768 */
1769EAPI void evas_render(Evas *e) EINA_ARG_NONNULL(1);
1770
1771/**
1772 * Update the canvas internal objects but not triggering immediate
1773 * renderization.
1774 *
1775 * @param e The given canvas pointer.
1776 *
1777 * This function updates the canvas internal objects not triggering
1778 * renderization. To force renderization function evas_render() should
1779 * be used.
1780 *
1781 * @see evas_render.
1782 *
1783 * @ingroup Evas_Canvas
1784 */
1785EAPI void evas_norender(Evas *e) EINA_ARG_NONNULL(1);
1786
1787/**
1788 * Make the canvas discard internally cached data used for rendering.
1789 *
1790 * @param e The given canvas pointer.
1791 *
1792 * This function flushes the arrays of delete, active and render objects.
1793 * Other things it may also discard are: shared memory segments,
1794 * temporary scratch buffers, cached data to avoid re-compute of that data etc.
1795 *
1796 * @ingroup Evas_Canvas
1797 */
1798EAPI void evas_render_idle_flush(Evas *e) EINA_ARG_NONNULL(1);
1799
1800/**
1801 * Make the canvas discard as much data as possible used by the engine at
1802 * runtime.
1803 *
1804 * @param e The given canvas pointer.
1805 *
1806 * This function will unload images, delete textures and much more, where
1807 * possible. You may also want to call evas_render_idle_flush() immediately
1808 * prior to this to perhaps discard a little more, though evas_render_dump()
1809 * should implicitly delete most of what evas_render_idle_flush() might
1810 * discard too.
1811 *
1812 * @ingroup Evas_Canvas
1813 */
1814EAPI void evas_render_dump(Evas *e) EINA_ARG_NONNULL(1);
1815
1816/**
1817 * @defgroup Evas_Output_Method Render Engine Functions
1818 *
1819 * Functions that are used to set the render engine for a given
1820 * function, and then get that engine working.
1821 *
1822 * The following code snippet shows how they can be used to
1823 * initialise an evas that uses the X11 software engine:
1824 * @code
1825 * Evas *evas;
1826 * Evas_Engine_Info_Software_X11 *einfo;
1827 * extern Display *display;
1828 * extern Window win;
1829 *
1830 * evas_init();
1831 *
1832 * evas = evas_new();
1833 * evas_output_method_set(evas, evas_render_method_lookup("software_x11"));
1834 * evas_output_size_set(evas, 640, 480);
1835 * evas_output_viewport_set(evas, 0, 0, 640, 480);
1836 * einfo = (Evas_Engine_Info_Software_X11 *)evas_engine_info_get(evas);
1837 * einfo->info.display = display;
1838 * einfo->info.visual = DefaultVisual(display, DefaultScreen(display));
1839 * einfo->info.colormap = DefaultColormap(display, DefaultScreen(display));
1840 * einfo->info.drawable = win;
1841 * einfo->info.depth = DefaultDepth(display, DefaultScreen(display));
1842 * evas_engine_info_set(evas, (Evas_Engine_Info *)einfo);
1843 * @endcode
1844 *
1845 * @ingroup Evas_Canvas
1846 */
1847
1848/**
1849 * Look up a numeric ID from a string name of a rendering engine.
1850 *
1851 * @param name the name string of an engine
1852 * @return A numeric (opaque) ID for the rendering engine
1853 * @ingroup Evas_Output_Method
1854 *
1855 * This function looks up a numeric return value for the named engine
1856 * in the string @p name. This is a normal C string, NUL byte
1857 * terminated. The name is case sensitive. If the rendering engine is
1858 * available, a numeric ID for that engine is returned that is not
1859 * 0. If the engine is not available, 0 is returned, indicating an
1860 * invalid engine.
1861 *
1862 * The programmer should NEVER rely on the numeric ID of an engine
1863 * unless it is returned by this function. Programs should NOT be
1864 * written accessing render method ID's directly, without first
1865 * obtaining it from this function.
1866 *
1867 * @attention it is mandatory that one calls evas_init() before
1868 * looking up the render method.
1869 *
1870 * Example:
1871 * @code
1872 * int engine_id;
1873 * Evas *evas;
1874 *
1875 * evas_init();
1876 *
1877 * evas = evas_new();
1878 * if (!evas)
1879 * {
1880 * fprintf(stderr, "ERROR: Canvas creation failed. Fatal error.\n");
1881 * exit(-1);
1882 * }
1883 * engine_id = evas_render_method_lookup("software_x11");
1884 * if (!engine_id)
1885 * {
1886 * fprintf(stderr, "ERROR: Requested rendering engine is absent.\n");
1887 * exit(-1);
1888 * }
1889 * evas_output_method_set(evas, engine_id);
1890 * @endcode
1891 */
1892EAPI int evas_render_method_lookup(const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1893
1894/**
1895 * List all the rendering engines compiled into the copy of the Evas library
1896 *
1897 * @return A linked list whose data members are C strings of engine names
1898 * @ingroup Evas_Output_Method
1899 *
1900 * Calling this will return a handle (pointer) to an Evas linked
1901 * list. Each node in the linked list will have the data pointer be a
1902 * (char *) pointer to the name string of the rendering engine
1903 * available. The strings should never be modified, neither should the
1904 * list be modified. This list should be cleaned up as soon as the
1905 * program no longer needs it using evas_render_method_list_free(). If
1906 * no engines are available from Evas, @c NULL will be returned.
1907 *
1908 * Example:
1909 * @code
1910 * Eina_List *engine_list, *l;
1911 * char *engine_name;
1912 *
1913 * engine_list = evas_render_method_list();
1914 * if (!engine_list)
1915 * {
1916 * fprintf(stderr, "ERROR: Evas supports no engines! Exit.\n");
1917 * exit(-1);
1918 * }
1919 * printf("Available Evas Engines:\n");
1920 * EINA_LIST_FOREACH(engine_list, l, engine_name)
1921 * printf("%s\n", engine_name);
1922 * evas_render_method_list_free(engine_list);
1923 * @endcode
1924 */
1925EAPI Eina_List *evas_render_method_list(void) EINA_WARN_UNUSED_RESULT;
1926
1927/**
1928 * This function should be called to free a list of engine names
1929 *
1930 * @param list The Eina_List base pointer for the engine list to be freed
1931 * @ingroup Evas_Output_Method
1932 *
1933 * When this function is called it will free the engine list passed in
1934 * as @p list. The list should only be a list of engines generated by
1935 * calling evas_render_method_list(). If @p list is NULL, nothing will
1936 * happen.
1937 *
1938 * Example:
1939 * @code
1940 * Eina_List *engine_list, *l;
1941 * char *engine_name;
1942 *
1943 * engine_list = evas_render_method_list();
1944 * if (!engine_list)
1945 * {
1946 * fprintf(stderr, "ERROR: Evas supports no engines! Exit.\n");
1947 * exit(-1);
1948 * }
1949 * printf("Available Evas Engines:\n");
1950 * EINA_LIST_FOREACH(engine_list, l, engine_name)
1951 * printf("%s\n", engine_name);
1952 * evas_render_method_list_free(engine_list);
1953 * @endcode
1954 */
1955EAPI void evas_render_method_list_free(Eina_List *list);
1956
1957/**
1958 * Sets the output engine for the given evas.
1959 *
1960 * Once the output engine for an evas is set, any attempt to change it
1961 * will be ignored. The value for @p render_method can be found using
1962 * @ref evas_render_method_lookup .
1963 *
1964 * @param e The given evas.
1965 * @param render_method The numeric engine value to use.
1966 *
1967 * @attention it is mandatory that one calls evas_init() before
1968 * setting the output method.
1969 *
1970 * @ingroup Evas_Output_Method
1971 */
1972EAPI void evas_output_method_set(Evas *e, int render_method) EINA_ARG_NONNULL(1);
1973
1974/**
1975 * Retrieves the number of the output engine used for the given evas.
1976 * @param e The given evas.
1977 * @return The ID number of the output engine being used. @c 0 is
1978 * returned if there is an error.
1979 * @ingroup Evas_Output_Method
1980 */
1981EAPI int evas_output_method_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1982
1983/**
1984 * Retrieves the current render engine info struct from the given evas.
1985 *
1986 * The returned structure is publicly modifiable. The contents are
1987 * valid until either @ref evas_engine_info_set or @ref evas_render
1988 * are called.
1989 *
1990 * This structure does not need to be freed by the caller.
1991 *
1992 * @param e The given evas.
1993 * @return A pointer to the Engine Info structure. @c NULL is returned if
1994 * an engine has not yet been assigned.
1995 * @ingroup Evas_Output_Method
1996 */
1997EAPI Evas_Engine_Info *evas_engine_info_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1998
1999/**
2000 * Applies the engine settings for the given evas from the given @c
2001 * Evas_Engine_Info structure.
2002 *
2003 * To get the Evas_Engine_Info structure to use, call @ref
2004 * evas_engine_info_get . Do not try to obtain a pointer to an
2005 * @c Evas_Engine_Info structure in any other way.
2006 *
2007 * You will need to call this function at least once before you can
2008 * create objects on an evas or render that evas. Some engines allow
2009 * their settings to be changed more than once.
2010 *
2011 * Once called, the @p info pointer should be considered invalid.
2012 *
2013 * @param e The pointer to the Evas Canvas
2014 * @param info The pointer to the Engine Info to use
2015 * @return @c EINA_TRUE if no error occurred, @c EINA_FALSE otherwise.
2016 * @ingroup Evas_Output_Method
2017 */
2018EAPI Eina_Bool evas_engine_info_set(Evas *e, Evas_Engine_Info *info) EINA_ARG_NONNULL(1);
2019
2020/**
2021 * @defgroup Evas_Output_Size Output and Viewport Resizing Functions
2022 *
2023 * Functions that set and retrieve the output and viewport size of an
2024 * evas.
2025 *
2026 * @ingroup Evas_Canvas
2027 */
2028
2029/**
2030 * Sets the output size of the render engine of the given evas.
2031 *
2032 * The evas will render to a rectangle of the given size once this
2033 * function is called. The output size is independent of the viewport
2034 * size. The viewport will be stretched to fill the given rectangle.
2035 *
2036 * The units used for @p w and @p h depend on the engine used by the
2037 * evas.
2038 *
2039 * @param e The given evas.
2040 * @param w The width in output units, usually pixels.
2041 * @param h The height in output units, usually pixels.
2042 * @ingroup Evas_Output_Size
2043 */
2044EAPI void evas_output_size_set(Evas *e, int w, int h) EINA_ARG_NONNULL(1);
2045
2046/**
2047 * Retrieve the output size of the render engine of the given evas.
2048 *
2049 * The output size is given in whatever the output units are for the
2050 * engine.
2051 *
2052 * If either @p w or @p h is @c NULL, then it is ignored. If @p e is
2053 * invalid, the returned results are undefined.
2054 *
2055 * @param e The given evas.
2056 * @param w The pointer to an integer to store the width in.
2057 * @param h The pointer to an integer to store the height in.
2058 * @ingroup Evas_Output_Size
2059 */
2060EAPI void evas_output_size_get(const Evas *e, int *w, int *h) EINA_ARG_NONNULL(1);
2061
2062/**
2063 * Sets the output viewport of the given evas in evas units.
2064 *
2065 * The output viewport is the area of the evas that will be visible to
2066 * the viewer. The viewport will be stretched to fit the output
2067 * target of the evas when rendering is performed.
2068 *
2069 * @note The coordinate values do not have to map 1-to-1 with the output
2070 * target. However, it is generally advised that it is done for ease
2071 * of use.
2072 *
2073 * @param e The given evas.
2074 * @param x The top-left corner x value of the viewport.
2075 * @param y The top-left corner y value of the viewport.
2076 * @param w The width of the viewport. Must be greater than 0.
2077 * @param h The height of the viewport. Must be greater than 0.
2078 * @ingroup Evas_Output_Size
2079 */
2080EAPI void evas_output_viewport_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1);
2081
2082/**
2083 * Get the render engine's output viewport co-ordinates in canvas units.
2084 * @param e The pointer to the Evas Canvas
2085 * @param x The pointer to a x variable to be filled in
2086 * @param y The pointer to a y variable to be filled in
2087 * @param w The pointer to a width variable to be filled in
2088 * @param h The pointer to a height variable to be filled in
2089 * @ingroup Evas_Output_Size
2090 *
2091 * Calling this function writes the current canvas output viewport
2092 * size and location values into the variables pointed to by @p x, @p
2093 * y, @p w and @p h. On success the variables have the output
2094 * location and size values written to them in canvas units. Any of @p
2095 * x, @p y, @p w or @p h that are @c NULL will not be written to. If @p e
2096 * is invalid, the results are undefined.
2097 *
2098 * Example:
2099 * @code
2100 * extern Evas *evas;
2101 * Evas_Coord x, y, width, height;
2102 *
2103 * evas_output_viewport_get(evas, &x, &y, &w, &h);
2104 * @endcode
2105 */
2106EAPI void evas_output_viewport_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
2107
2108/**
2109 * Sets the output framespace size of the render engine of the given evas.
2110 *
2111 * The framespace size is used in the Wayland engines to denote space where
2112 * the output is not drawn. This is mainly used in ecore_evas to draw borders
2113 *
2114 * The units used for @p w and @p h depend on the engine used by the
2115 * evas.
2116 *
2117 * @param e The given evas.
2118 * @param x The left coordinate in output units, usually pixels.
2119 * @param y The top coordinate in output units, usually pixels.
2120 * @param w The width in output units, usually pixels.
2121 * @param h The height in output units, usually pixels.
2122 * @ingroup Evas_Output_Size
2123 * @since 1.1
2124 */
2125EAPI void evas_output_framespace_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
2126
2127/**
2128 * Get the render engine's output framespace co-ordinates in canvas units.
2129 *
2130 * @param e The pointer to the Evas Canvas
2131 * @param x The pointer to a x variable to be filled in
2132 * @param y The pointer to a y variable to be filled in
2133 * @param w The pointer to a width variable to be filled in
2134 * @param h The pointer to a height variable to be filled in
2135 * @ingroup Evas_Output_Size
2136 * @since 1.1
2137 */
2138EAPI void evas_output_framespace_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
2139
2140/**
2141 * @defgroup Evas_Coord_Mapping_Group Coordinate Mapping Functions
2142 *
2143 * Functions that are used to map coordinates from the canvas to the
2144 * screen or the screen to the canvas.
2145 *
2146 * @ingroup Evas_Canvas
2147 */
2148
2149/**
2150 * Convert/scale an ouput screen co-ordinate into canvas co-ordinates
2151 *
2152 * @param e The pointer to the Evas Canvas
2153 * @param x The screen/output x co-ordinate
2154 * @return The screen co-ordinate translated to canvas unit co-ordinates
2155 * @ingroup Evas_Coord_Mapping_Group
2156 *
2157 * This function takes in a horizontal co-ordinate as the @p x
2158 * parameter and converts it into canvas units, accounting for output
2159 * size, viewport size and location, returning it as the function
2160 * return value. If @p e is invalid, the results are undefined.
2161 *
2162 * Example:
2163 * @code
2164 * extern Evas *evas;
2165 * extern int screen_x;
2166 * Evas_Coord canvas_x;
2167 *
2168 * canvas_x = evas_coord_screen_x_to_world(evas, screen_x);
2169 * @endcode
2170 */
2171EAPI Evas_Coord evas_coord_screen_x_to_world(const Evas *e, int x) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2172
2173/**
2174 * Convert/scale an ouput screen co-ordinate into canvas co-ordinates
2175 *
2176 * @param e The pointer to the Evas Canvas
2177 * @param y The screen/output y co-ordinate
2178 * @return The screen co-ordinate translated to canvas unit co-ordinates
2179 * @ingroup Evas_Coord_Mapping_Group
2180 *
2181 * This function takes in a vertical co-ordinate as the @p y parameter
2182 * and converts it into canvas units, accounting for output size,
2183 * viewport size and location, returning it as the function return
2184 * value. If @p e is invalid, the results are undefined.
2185 *
2186 * Example:
2187 * @code
2188 * extern Evas *evas;
2189 * extern int screen_y;
2190 * Evas_Coord canvas_y;
2191 *
2192 * canvas_y = evas_coord_screen_y_to_world(evas, screen_y);
2193 * @endcode
2194 */
2195EAPI Evas_Coord evas_coord_screen_y_to_world(const Evas *e, int y) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2196
2197/**
2198 * Convert/scale a canvas co-ordinate into output screen co-ordinates
2199 *
2200 * @param e The pointer to the Evas Canvas
2201 * @param x The canvas x co-ordinate
2202 * @return The output/screen co-ordinate translated to output co-ordinates
2203 * @ingroup Evas_Coord_Mapping_Group
2204 *
2205 * This function takes in a horizontal co-ordinate as the @p x
2206 * parameter and converts it into output units, accounting for output
2207 * size, viewport size and location, returning it as the function
2208 * return value. If @p e is invalid, the results are undefined.
2209 *
2210 * Example:
2211 * @code
2212 * extern Evas *evas;
2213 * int screen_x;
2214 * extern Evas_Coord canvas_x;
2215 *
2216 * screen_x = evas_coord_world_x_to_screen(evas, canvas_x);
2217 * @endcode
2218 */
2219EAPI int evas_coord_world_x_to_screen(const Evas *e, Evas_Coord x) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2220
2221/**
2222 * Convert/scale a canvas co-ordinate into output screen co-ordinates
2223 *
2224 * @param e The pointer to the Evas Canvas
2225 * @param y The canvas y co-ordinate
2226 * @return The output/screen co-ordinate translated to output co-ordinates
2227 * @ingroup Evas_Coord_Mapping_Group
2228 *
2229 * This function takes in a vertical co-ordinate as the @p x parameter
2230 * and converts it into output units, accounting for output size,
2231 * viewport size and location, returning it as the function return
2232 * value. If @p e is invalid, the results are undefined.
2233 *
2234 * Example:
2235 * @code
2236 * extern Evas *evas;
2237 * int screen_y;
2238 * extern Evas_Coord canvas_y;
2239 *
2240 * screen_y = evas_coord_world_y_to_screen(evas, canvas_y);
2241 * @endcode
2242 */
2243EAPI int evas_coord_world_y_to_screen(const Evas *e, Evas_Coord y) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2244
2245/**
2246 * @defgroup Evas_Pointer_Group Pointer (Mouse) Functions
2247 *
2248 * Functions that deal with the status of the pointer (mouse cursor).
2249 *
2250 * @ingroup Evas_Canvas
2251 */
2252
2253/**
2254 * This function returns the current known pointer co-ordinates
2255 *
2256 * @param e The pointer to the Evas Canvas
2257 * @param x The pointer to an integer to be filled in
2258 * @param y The pointer to an integer to be filled in
2259 * @ingroup Evas_Pointer_Group
2260 *
2261 * This function returns the current known screen/output co-ordinates
2262 * of the mouse pointer and sets the contents of the integers pointed
2263 * to by @p x and @p y to contain these co-ordinates. If @p e is not a
2264 * valid canvas the results of this function are undefined.
2265 *
2266 * Example:
2267 * @code
2268 * extern Evas *evas;
2269 * int mouse_x, mouse_y;
2270 *
2271 * evas_pointer_output_xy_get(evas, &mouse_x, &mouse_y);
2272 * printf("Mouse is at screen position %i, %i\n", mouse_x, mouse_y);
2273 * @endcode
2274 */
2275EAPI void evas_pointer_output_xy_get(const Evas *e, int *x, int *y) EINA_ARG_NONNULL(1);
2276
2277/**
2278 * This function returns the current known pointer co-ordinates
2279 *
2280 * @param e The pointer to the Evas Canvas
2281 * @param x The pointer to a Evas_Coord to be filled in
2282 * @param y The pointer to a Evas_Coord to be filled in
2283 * @ingroup Evas_Pointer_Group
2284 *
2285 * This function returns the current known canvas unit co-ordinates of
2286 * the mouse pointer and sets the contents of the Evas_Coords pointed
2287 * to by @p x and @p y to contain these co-ordinates. If @p e is not a
2288 * valid canvas the results of this function are undefined.
2289 *
2290 * Example:
2291 * @code
2292 * extern Evas *evas;
2293 * Evas_Coord mouse_x, mouse_y;
2294 *
2295 * evas_pointer_output_xy_get(evas, &mouse_x, &mouse_y);
2296 * printf("Mouse is at canvas position %f, %f\n", mouse_x, mouse_y);
2297 * @endcode
2298 */
2299EAPI void evas_pointer_canvas_xy_get(const Evas *e, Evas_Coord *x, Evas_Coord *y) EINA_ARG_NONNULL(1);
2300
2301/**
2302 * Returns a bitmask with the mouse buttons currently pressed, set to 1
2303 *
2304 * @param e The pointer to the Evas Canvas
2305 * @return A bitmask of the currently depressed buttons on the canvas
2306 * @ingroup Evas_Pointer_Group
2307 *
2308 * Calling this function will return a 32-bit integer with the
2309 * appropriate bits set to 1 that correspond to a mouse button being
2310 * depressed. This limits Evas to a mouse devices with a maximum of 32
2311 * buttons, but that is generally in excess of any host system's
2312 * pointing device abilities.
2313 *
2314 * A canvas by default begins with no mouse buttons being pressed and
2315 * only calls to evas_event_feed_mouse_down(),
2316 * evas_event_feed_mouse_down_data(), evas_event_feed_mouse_up() and
2317 * evas_event_feed_mouse_up_data() will alter that.
2318 *
2319 * The least significant bit corresponds to the first mouse button
2320 * (button 1) and the most significant bit corresponds to the last
2321 * mouse button (button 32).
2322 *
2323 * If @p e is not a valid canvas, the return value is undefined.
2324 *
2325 * Example:
2326 * @code
2327 * extern Evas *evas;
2328 * int button_mask, i;
2329 *
2330 * button_mask = evas_pointer_button_down_mask_get(evas);
2331 * printf("Buttons currently pressed:\n");
2332 * for (i = 0; i < 32; i++)
2333 * {
2334 * if ((button_mask & (1 << i)) != 0) printf("Button %i\n", i + 1);
2335 * }
2336 * @endcode
2337 */
2338EAPI int evas_pointer_button_down_mask_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2339
2340/**
2341 * Returns whether the mouse pointer is logically inside the canvas
2342 *
2343 * @param e The pointer to the Evas Canvas
2344 * @return An integer that is 1 if the mouse is inside the canvas, 0 otherwise
2345 * @ingroup Evas_Pointer_Group
2346 *
2347 * When this function is called it will return a value of either 0 or
2348 * 1, depending on if evas_event_feed_mouse_in(),
2349 * evas_event_feed_mouse_in_data(), or evas_event_feed_mouse_out(),
2350 * evas_event_feed_mouse_out_data() have been called to feed in a
2351 * mouse enter event into the canvas.
2352 *
2353 * A return value of 1 indicates the mouse is logically inside the
2354 * canvas, and 0 implies it is logically outside the canvas.
2355 *
2356 * A canvas begins with the mouse being assumed outside (0).
2357 *
2358 * If @p e is not a valid canvas, the return value is undefined.
2359 *
2360 * Example:
2361 * @code
2362 * extern Evas *evas;
2363 *
2364 * if (evas_pointer_inside_get(evas)) printf("Mouse is in!\n");
2365 * else printf("Mouse is out!\n");
2366 * @endcode
2367 */
2368EAPI Eina_Bool evas_pointer_inside_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2369
2370EAPI void evas_sync(Evas *e) EINA_ARG_NONNULL(1);
2371
2372#define EVAS_CLASS evas_class_get()
2373
2374const Eo_Class *evas_class_get(void) EINA_CONST;
2375
2376extern EAPI Eo_Op EVAS_CANVAS_BASE_ID;
2377
2378enum
2379{
2380 EVAS_CANVAS_SUB_ID_OUTPUT_METHOD_SET,
2381 EVAS_CANVAS_SUB_ID_OUTPUT_METHOD_GET,
2382 EVAS_CANVAS_SUB_ID_ENGINE_INFO_GET,
2383 EVAS_CANVAS_SUB_ID_ENGINE_INFO_SET,
2384 EVAS_CANVAS_SUB_ID_OUTPUT_SIZE_SET,
2385 EVAS_CANVAS_SUB_ID_OUTPUT_SIZE_GET,
2386 EVAS_CANVAS_SUB_ID_OUTPUT_VIEWPORT_SET,
2387 EVAS_CANVAS_SUB_ID_OUTPUT_VIEWPORT_GET,
2388 EVAS_CANVAS_SUB_ID_OUTPUT_FRAMESPACE_SET,
2389 EVAS_CANVAS_SUB_ID_OUTPUT_FRAMESPACE_GET,
2390 EVAS_CANVAS_SUB_ID_COORD_SCREEN_X_TO_WORLD,
2391 EVAS_CANVAS_SUB_ID_COORD_SCREEN_Y_TO_WORLD,
2392 EVAS_CANVAS_SUB_ID_COORD_WORLD_X_TO_SCREEN,
2393 EVAS_CANVAS_SUB_ID_COORD_WORLD_Y_TO_SCREEN,
2394 EVAS_CANVAS_SUB_ID_POINTER_OUTPUT_XY_GET,
2395 EVAS_CANVAS_SUB_ID_POINTER_CANVAS_XY_GET,
2396 EVAS_CANVAS_SUB_ID_POINTER_BUTTON_DOWN_MASK_GET,
2397 EVAS_CANVAS_SUB_ID_POINTER_INSIDE_GET,
2398 EVAS_CANVAS_SUB_ID_DATA_ATTACH_SET,
2399 EVAS_CANVAS_SUB_ID_DATA_ATTACH_GET,
2400 EVAS_CANVAS_SUB_ID_FOCUS_IN,
2401 EVAS_CANVAS_SUB_ID_FOCUS_OUT,
2402 EVAS_CANVAS_SUB_ID_FOCUS_STATE_GET,
2403 EVAS_CANVAS_SUB_ID_NOCHANGE_PUSH,
2404 EVAS_CANVAS_SUB_ID_NOCHANGE_POP,
2405 EVAS_CANVAS_SUB_ID_EVENT_DEFAULT_FLAGS_SET,
2406 EVAS_CANVAS_SUB_ID_EVENT_DEFAULT_FLAGS_GET,
2407 EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_DOWN,
2408 EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_UP,
2409 EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_CANCEL,
2410 EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_WHEEL,
2411 EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_MOVE,
2412 EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_IN,
2413 EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_OUT,
2414 EVAS_CANVAS_SUB_ID_EVENT_FEED_MULTI_DOWN,
2415 EVAS_CANVAS_SUB_ID_EVENT_FEED_MULTI_UP,
2416 EVAS_CANVAS_SUB_ID_EVENT_FEED_MULTI_MOVE,
2417 EVAS_CANVAS_SUB_ID_EVENT_FEED_KEY_DOWN,
2418 EVAS_CANVAS_SUB_ID_EVENT_FEED_KEY_UP,
2419 EVAS_CANVAS_SUB_ID_EVENT_FEED_HOLD,
2420 EVAS_CANVAS_SUB_ID_EVENT_REFEED_EVENT,
2421 EVAS_CANVAS_SUB_ID_EVENT_DOWN_COUNT_GET,
2422 EVAS_CANVAS_SUB_ID_FOCUS_GET,
2423 EVAS_CANVAS_SUB_ID_FONT_PATH_CLEAR,
2424 EVAS_CANVAS_SUB_ID_FONT_PATH_APPEND,
2425 EVAS_CANVAS_SUB_ID_FONT_PATH_PREPEND,
2426 EVAS_CANVAS_SUB_ID_FONT_PATH_LIST,
2427 EVAS_CANVAS_SUB_ID_FONT_HINTING_SET,
2428 EVAS_CANVAS_SUB_ID_FONT_HINTING_GET,
2429 EVAS_CANVAS_SUB_ID_FONT_HINTING_CAN_HINT,
2430 EVAS_CANVAS_SUB_ID_FONT_CACHE_FLUSH,
2431 EVAS_CANVAS_SUB_ID_FONT_CACHE_SET,
2432 EVAS_CANVAS_SUB_ID_FONT_CACHE_GET,
2433 EVAS_CANVAS_SUB_ID_FONT_AVAILABLE_LIST,
2434 EVAS_CANVAS_SUB_ID_KEY_MODIFIER_GET,
2435 EVAS_CANVAS_SUB_ID_KEY_LOCK_GET,
2436 EVAS_CANVAS_SUB_ID_KEY_MODIFIER_ADD,
2437 EVAS_CANVAS_SUB_ID_KEY_MODIFIER_DEL,
2438 EVAS_CANVAS_SUB_ID_KEY_LOCK_ADD,
2439 EVAS_CANVAS_SUB_ID_KEY_LOCK_DEL,
2440 EVAS_CANVAS_SUB_ID_KEY_MODIFIER_ON,
2441 EVAS_CANVAS_SUB_ID_KEY_MODIFIER_OFF,
2442 EVAS_CANVAS_SUB_ID_KEY_LOCK_ON,
2443 EVAS_CANVAS_SUB_ID_KEY_LOCK_OFF,
2444 EVAS_CANVAS_SUB_ID_KEY_MODIFIER_MASK_GET,
2445 EVAS_CANVAS_SUB_ID_DAMAGE_RECTANGLE_ADD,
2446 EVAS_CANVAS_SUB_ID_OBSCURED_RECTANGLE_ADD,
2447 EVAS_CANVAS_SUB_ID_OBSCURED_CLEAR,
2448 EVAS_CANVAS_SUB_ID_RENDER_UPDATES,
2449 EVAS_CANVAS_SUB_ID_RENDER,
2450 EVAS_CANVAS_SUB_ID_NORENDER,
2451 EVAS_CANVAS_SUB_ID_RENDER_IDLE_FLUSH,
2452 EVAS_CANVAS_SUB_ID_SYNC,
2453 EVAS_CANVAS_SUB_ID_RENDER_DUMP,
2454 EVAS_CANVAS_SUB_ID_OBJECT_BOTTOM_GET,
2455 EVAS_CANVAS_SUB_ID_OBJECT_TOP_GET,
2456 EVAS_CANVAS_SUB_ID_TOUCH_POINT_LIST_COUNT,
2457 EVAS_CANVAS_SUB_ID_TOUCH_POINT_LIST_NTH_XY_GET,
2458 EVAS_CANVAS_SUB_ID_TOUCH_POINT_LIST_NTH_ID_GET,
2459 EVAS_CANVAS_SUB_ID_TOUCH_POINT_LIST_NTH_STATE_GET,
2460 EVAS_CANVAS_SUB_ID_IMAGE_CACHE_FLUSH,
2461 EVAS_CANVAS_SUB_ID_IMAGE_CACHE_RELOAD,
2462 EVAS_CANVAS_SUB_ID_IMAGE_CACHE_SET,
2463 EVAS_CANVAS_SUB_ID_IMAGE_CACHE_GET,
2464 EVAS_CANVAS_SUB_ID_IMAGE_MAX_SIZE_GET,
2465 EVAS_CANVAS_SUB_ID_OBJECT_NAME_FIND,
2466 EVAS_CANVAS_SUB_ID_OBJECT_TOP_AT_XY_GET,
2467 EVAS_CANVAS_SUB_ID_OBJECT_TOP_IN_RECTANGLE_GET,
2468 EVAS_CANVAS_SUB_ID_OBJECTS_AT_XY_GET,
2469 EVAS_CANVAS_SUB_ID_OBJECTS_IN_RECTANGLE_GET,
2470 EVAS_CANVAS_SUB_ID_SMART_OBJECTS_CALCULATE,
2471 EVAS_CANVAS_SUB_ID_SMART_OBJECTS_CALCULATE_COUNT_GET,
2472 EVAS_CANVAS_SUB_ID_LAST
2473};
2474
2475#define EVAS_CANVAS_ID(sub_id) (EVAS_CANVAS_BASE_ID + sub_id)
2476
2477
2478/**
2479 * @def evas_canvas_output_method_set
2480 * @since 1.8
2481 *
2482 * Sets the output engine for the given evas.
2483 *
2484 * @param[in] render_method
2485 *
2486 * @see evas_output_method_set
2487 */
2488#define evas_canvas_output_method_set(render_method) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_METHOD_SET), EO_TYPECHECK(int, render_method)
2489
2490/**
2491 * @def evas_canvas_output_method_get
2492 * @since 1.8
2493 *
2494 * Retrieves the number of the output engine used for the given evas.
2495 *
2496 * @param[out] ret
2497 *
2498 * @see evas_output_method_get
2499 */
2500#define evas_canvas_output_method_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_METHOD_GET), EO_TYPECHECK(int *, ret)
2501
2502/**
2503 * @def evas_canvas_engine_info_get
2504 * @since 1.8
2505 *
2506 * Retrieves the current render engine info struct from the given evas.
2507 *
2508 * @param[out] ret
2509 *
2510 * @see evas_engine_info_get
2511 */
2512#define evas_canvas_engine_info_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_ENGINE_INFO_GET), EO_TYPECHECK(Evas_Engine_Info **, ret)
2513
2514/**
2515 * @def evas_canvas_engine_info_set
2516 * @since 1.8
2517 *
2518 * Applies the engine settings for the given evas from the given @c
2519 * Evas_Engine_Info structure.
2520 *
2521 * @param[in] info
2522 * @param[out] ret
2523 *
2524 * @see evas_engine_info_set
2525 */
2526#define evas_canvas_engine_info_set(info, ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_ENGINE_INFO_SET), EO_TYPECHECK(Evas_Engine_Info *, info), EO_TYPECHECK(Eina_Bool *, ret)
2527
2528/**
2529 * @def evas_canvas_output_size_set
2530 * @since 1.8
2531 *
2532 * Sets the output size of the render engine of the given evas.
2533 *
2534 * @param[in] w
2535 * @param[in] h
2536 *
2537 * @see evas_output_size_set
2538 */
2539#define evas_canvas_output_size_set(w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_SIZE_SET), EO_TYPECHECK(int, w), EO_TYPECHECK(int, h)
2540
2541/**
2542 * @def evas_canvas_output_size_get
2543 * @since 1.8
2544 *
2545 * Retrieve the output size of the render engine of the given evas.
2546 *
2547 * @param[out] w
2548 * @param[out] h
2549 *
2550 * @see evas_output_size_get
2551 */
2552#define evas_canvas_output_size_get(w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_SIZE_GET), EO_TYPECHECK(int *, w), EO_TYPECHECK(int *, h)
2553
2554/**
2555 * @def evas_canvas_output_viewport_set
2556 * @since 1.8
2557 *
2558 * Sets the output viewport of the given evas in evas units.
2559 *
2560 * @param[in] x
2561 * @param[in] y
2562 * @param[in] w
2563 * @param[in] h
2564 *
2565 * @see evas_output_viewport_set
2566 */
2567#define evas_canvas_output_viewport_set(x, y, w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_VIEWPORT_SET), EO_TYPECHECK(Evas_Coord, x), EO_TYPECHECK(Evas_Coord, y), EO_TYPECHECK(Evas_Coord, w), EO_TYPECHECK(Evas_Coord, h)
2568
2569/**
2570 * @def evas_canvas_output_viewport_get
2571 * @since 1.8
2572 *
2573 * Get the render engine's output viewport co-ordinates in canvas units.
2574 *
2575 * @param[out] x
2576 * @param[out] y
2577 * @param[out] w
2578 * @param[out] h
2579 *
2580 * @see evas_output_viewport_get
2581 */
2582#define evas_canvas_output_viewport_get(x, y, w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_VIEWPORT_GET), EO_TYPECHECK(Evas_Coord *, x), EO_TYPECHECK(Evas_Coord *, y), EO_TYPECHECK(Evas_Coord *, w), EO_TYPECHECK(Evas_Coord *, h)
2583
2584/**
2585 * @def evas_canvas_output_framespace_set
2586 * @since 1.8
2587 *
2588 * Sets the output framespace size of the render engine of the given evas.
2589 *
2590 * @param[in] x
2591 * @param[in] y
2592 * @param[in] w
2593 * @param[in] h
2594 *
2595 * @see evas_output_framespace_set
2596 */
2597#define evas_canvas_output_framespace_set(x, y, w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_FRAMESPACE_SET), EO_TYPECHECK(Evas_Coord, x), EO_TYPECHECK(Evas_Coord, y), EO_TYPECHECK(Evas_Coord, w), EO_TYPECHECK(Evas_Coord, h)
2598
2599/**
2600 * @def evas_canvas_output_framespace_get
2601 * @since 1.8
2602 *
2603 * Get the render engine's output framespace co-ordinates in canvas units.
2604 *
2605 * @param[out] x
2606 * @param[out] y
2607 * @param[out] w
2608 * @param[out] h
2609 *
2610 * @see evas_output_framespace_get
2611 */
2612#define evas_canvas_output_framespace_get(x, y, w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OUTPUT_FRAMESPACE_GET), EO_TYPECHECK(Evas_Coord *, x), EO_TYPECHECK(Evas_Coord *, y), EO_TYPECHECK(Evas_Coord *, w), EO_TYPECHECK(Evas_Coord *, h)
2613
2614/**
2615 * @def evas_canvas_coord_screen_x_to_world
2616 * @since 1.8
2617 *
2618 * Convert/scale an ouput screen co-ordinate into canvas co-ordinates
2619 *
2620 * @param[in] x
2621 * @param[out] ret
2622 *
2623 * @see evas_coord_screen_x_to_world
2624 */
2625#define evas_canvas_coord_screen_x_to_world(x, ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_COORD_SCREEN_X_TO_WORLD), EO_TYPECHECK(int, x), EO_TYPECHECK(Evas_Coord *, ret)
2626
2627/**
2628 * @def evas_canvas_coord_screen_y_to_world
2629 * @since 1.8
2630 *
2631 * Convert/scale an ouput screen co-ordinate into canvas co-ordinates
2632 *
2633 * @param[in] y
2634 * @param[out] ret
2635 *
2636 * @see evas_coord_screen_y_to_world
2637 */
2638#define evas_canvas_coord_screen_y_to_world(y, ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_COORD_SCREEN_Y_TO_WORLD), EO_TYPECHECK(int, y), EO_TYPECHECK(Evas_Coord *, ret)
2639
2640/**
2641 * @def evas_canvas_coord_world_x_to_screen
2642 * @since 1.8
2643 *
2644 * Convert/scale a canvas co-ordinate into output screen co-ordinates
2645 *
2646 * @param[in] x
2647 * @param[out] ret
2648 *
2649 * @see evas_coord_world_x_to_screen
2650 */
2651#define evas_canvas_coord_world_x_to_screen(x, ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_COORD_WORLD_X_TO_SCREEN), EO_TYPECHECK(Evas_Coord, x), EO_TYPECHECK(int *, ret)
2652
2653/**
2654 * @def evas_canvas_coord_world_y_to_screen
2655 * @since 1.8
2656 *
2657 * Convert/scale a canvas co-ordinate into output screen co-ordinates
2658 *
2659 * @param[in] y
2660 * @param[out] ret
2661 *
2662 * @see evas_coord_world_y_to_screen
2663 */
2664#define evas_canvas_coord_world_y_to_screen(y, ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_COORD_WORLD_Y_TO_SCREEN), EO_TYPECHECK(Evas_Coord, y), EO_TYPECHECK(int *, ret)
2665
2666/**
2667 * @def evas_canvas_pointer_output_xy_get
2668 * @since 1.8
2669 *
2670 * This function returns the current known pointer co-ordinates
2671 *
2672 * @param[out] x
2673 * @param[out] y
2674 *
2675 * @see evas_pointer_output_xy_get
2676 */
2677#define evas_canvas_pointer_output_xy_get(x, y) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_POINTER_OUTPUT_XY_GET), EO_TYPECHECK(int *, x), EO_TYPECHECK(int *, y)
2678
2679/**
2680 * @def evas_canvas_pointer_canvas_xy_get
2681 * @since 1.8
2682 *
2683 * This function returns the current known pointer co-ordinates
2684 *
2685 * @param[out] x
2686 * @param[out] y
2687 *
2688 * @see evas_pointer_canvas_xy_get
2689 */
2690#define evas_canvas_pointer_canvas_xy_get(x, y) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_POINTER_CANVAS_XY_GET), EO_TYPECHECK(Evas_Coord *, x), EO_TYPECHECK(Evas_Coord *, y)
2691
2692/**
2693 * @def evas_canvas_pointer_button_down_mask_get
2694 * @since 1.8
2695 *
2696 * Returns a bitmask with the mouse buttons currently pressed, set to 1
2697 *
2698 * @param[out] ret
2699 *
2700 * @see evas_pointer_button_down_mask_get
2701 */
2702#define evas_canvas_pointer_button_down_mask_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_POINTER_BUTTON_DOWN_MASK_GET), EO_TYPECHECK(int *, ret)
2703
2704/**
2705 * @def evas_canvas_pointer_inside_get
2706 * @since 1.8
2707 *
2708 * Returns whether the mouse pointer is logically inside the canvas
2709 *
2710 * @param[out] ret
2711 *
2712 * @see evas_pointer_inside_get
2713 */
2714#define evas_canvas_pointer_inside_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_POINTER_INSIDE_GET), EO_TYPECHECK(Eina_Bool *, ret)
2715
2716/**
2717 * @def evas_canvas_data_attach_set
2718 * @since 1.8
2719 *
2720 * Attaches a specific pointer to the evas for fetching later
2721 *
2722 * @param[in] data
2723 *
2724 * @see evas_data_attach_set
2725 */
2726#define evas_canvas_data_attach_set(data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_DATA_ATTACH_SET), EO_TYPECHECK(void *, data)
2727
2728/**
2729 * @def evas_canvas_data_attach_get
2730 * @since 1.8
2731 *
2732 * Returns the pointer attached by evas_data_attach_set()
2733 *
2734 * @param[out] ret
2735 *
2736 * @see evas_data_attach_get
2737 */
2738#define evas_canvas_data_attach_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_DATA_ATTACH_GET), EO_TYPECHECK(void **, ret)
2739
2740/**
2741 * @def evas_canvas_focus_in
2742 * @since 1.8
2743 *
2744 * Inform to the evas that it got the focus.
2745 *
2746 *
2747 * @see evas_focus_in
2748 */
2749#define evas_canvas_focus_in() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FOCUS_IN)
2750
2751/**
2752 * @def evas_canvas_focus_out
2753 * @since 1.8
2754 *
2755 * Inform to the evas that it lost the focus.
2756 *
2757 *
2758 * @see evas_focus_out
2759 */
2760#define evas_canvas_focus_out() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FOCUS_OUT)
2761
2762/**
2763 * @def evas_canvas_focus_state_get
2764 * @since 1.8
2765 *
2766 * Get the focus state known by the given evas
2767 *
2768 * @param[out] ret
2769 *
2770 * @see evas_focus_state_get
2771 */
2772#define evas_canvas_focus_state_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FOCUS_STATE_GET), EO_TYPECHECK(Eina_Bool *, ret)
2773
2774/**
2775 * @def evas_canvas_nochange_push
2776 * @since 1.8
2777 *
2778 * Push the nochange flag up 1
2779 *
2780 *
2781 * @see evas_nochange_push
2782 */
2783#define evas_canvas_nochange_push() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_NOCHANGE_PUSH)
2784
2785/**
2786 * @def evas_canvas_nochange_pop
2787 * @since 1.8
2788 *
2789 * Pop the nochange flag down 1
2790 *
2791 *
2792 * @see evas_nochange_pop
2793 */
2794#define evas_canvas_nochange_pop() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_NOCHANGE_POP)
2795
2796
2797/**
2798 * @def evas_canvas_event_default_flags_set
2799 * @since 1.8
2800 *
2801 * Set the default set of flags an event begins with
2802 *
2803 * @param[in] flags
2804 *
2805 * @see evas_event_default_flags_set
2806 */
2807#define evas_canvas_event_default_flags_set(flags) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_DEFAULT_FLAGS_SET), EO_TYPECHECK(Evas_Event_Flags, flags)
2808
2809/**
2810 * @def evas_canvas_event_default_flags_get
2811 * @since 1.8
2812 *
2813 * Get the defaulty set of flags an event begins with
2814 *
2815 * @param[out] ret
2816 *
2817 * @see evas_event_default_flags_get
2818 */
2819#define evas_canvas_event_default_flags_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_DEFAULT_FLAGS_GET), EO_TYPECHECK(Evas_Event_Flags *, ret)
2820
2821/**
2822 * @def evas_canvas_event_freeze
2823 * @since 1.8
2824 *
2825 * Freeze all input events processing.
2826 *
2827 *
2828 * @see evas_event_freeze
2829 */
2830#define evas_canvas_event_freeze() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FREEZE)
2831
2832/**
2833 * @def evas_canvas_event_thaw
2834 * @since 1.8
2835 *
2836 * Thaw a canvas out after freezing (for input events).
2837 *
2838 *
2839 * @see evas_event_thaw
2840 */
2841#define evas_canvas_event_thaw() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_THAW)
2842
2843/**
2844 * @def evas_canvas_event_freeze_get
2845 * @since 1.8
2846 *
2847 * Return the freeze count on input events of a given canvas.
2848 *
2849 * @param[out] ret
2850 *
2851 * @see evas_event_freeze_get
2852 */
2853#define evas_canvas_event_freeze_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FREEZE_GET), EO_TYPECHECK(int *, ret)
2854
2855/**
2856 * @def evas_canvas_event_thaw_eval
2857 * @since 1.8
2858 *
2859 * After thaw of a canvas, re-evaluate the state of objects and call callbacks
2860 *
2861 *
2862 * @see evas_event_thaw_eval
2863 */
2864#define evas_canvas_event_thaw_eval() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_THAW_EVAL)
2865
2866/**
2867 * @def evas_canvas_event_feed_mouse_down
2868 * @since 1.8
2869 *
2870 * Mouse down event feed.
2871 *
2872 * @param[in] b
2873 * @param[in] flags
2874 * @param[in] timestamp
2875 * @param[in] data
2876 *
2877 * @see evas_event_feed_mouse_down
2878 */
2879#define evas_canvas_event_feed_mouse_down(b, flags, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_DOWN), EO_TYPECHECK(int, b), EO_TYPECHECK(Evas_Button_Flags, flags), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2880
2881/**
2882 * @def evas_canvas_event_feed_mouse_up
2883 * @since 1.8
2884 *
2885 * Mouse up event feed.
2886 *
2887 * @param[in] b
2888 * @param[in] flags
2889 * @param[in] timestamp
2890 * @param[in] data
2891 *
2892 * @see evas_event_feed_mouse_up
2893 */
2894#define evas_canvas_event_feed_mouse_up(b, flags, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_UP), EO_TYPECHECK(int, b), EO_TYPECHECK(Evas_Button_Flags, flags), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2895
2896/**
2897 * @def evas_canvas_event_feed_mouse_cancel
2898 * @since 1.8
2899 *
2900 * Mouse cancel event feed.
2901 *
2902 * @param[in] timestamp
2903 * @param[in] data
2904 *
2905 * @see evas_event_feed_mouse_cancel
2906 */
2907#define evas_canvas_event_feed_mouse_cancel(timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_CANCEL), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2908
2909/**
2910 * @def evas_canvas_event_feed_mouse_wheel
2911 * @since 1.8
2912 *
2913 * Mouse wheel event feed.
2914 *
2915 * @param[in] direction
2916 * @param[in] z
2917 * @param[in] timestamp
2918 * @param[in] data
2919 *
2920 * @see evas_event_feed_mouse_wheel
2921 */
2922#define evas_canvas_event_feed_mouse_wheel(direction, z, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_WHEEL), EO_TYPECHECK(int, direction), EO_TYPECHECK(int, z), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2923
2924/**
2925 * @def evas_canvas_event_feed_mouse_move
2926 * @since 1.8
2927 *
2928 * Mouse move event feed.
2929 *
2930 * @param[in] x
2931 * @param[in] y
2932 * @param[in] timestamp
2933 * @param[in] data
2934 *
2935 * @see evas_event_feed_mouse_move
2936 */
2937#define evas_canvas_event_feed_mouse_move(x, y, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_MOVE), EO_TYPECHECK(int, x), EO_TYPECHECK(int, y), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2938
2939/**
2940 * @def evas_canvas_event_feed_mouse_in
2941 * @since 1.8
2942 *
2943 * Mouse in event feed.
2944 *
2945 * @param[in] timestamp
2946 * @param[in] data
2947 *
2948 * @see evas_event_feed_mouse_in
2949 */
2950#define evas_canvas_event_feed_mouse_in(timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_IN), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2951
2952/**
2953 * @def evas_canvas_event_feed_mouse_out
2954 * @since 1.8
2955 *
2956 * Mouse out event feed.
2957 *
2958 * @param[in] timestamp
2959 * @param[in] data
2960 *
2961 * @see evas_event_feed_mouse_out
2962 */
2963#define evas_canvas_event_feed_mouse_out(timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MOUSE_OUT), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2964#define evas_canvas_event_feed_multi_down(d, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MULTI_DOWN), EO_TYPECHECK(int, d), EO_TYPECHECK(int, x), EO_TYPECHECK(int, y), EO_TYPECHECK(double, rad), EO_TYPECHECK(double, radx), EO_TYPECHECK(double, rady), EO_TYPECHECK(double, pres), EO_TYPECHECK(double, ang), EO_TYPECHECK(double, fx), EO_TYPECHECK(double, fy), EO_TYPECHECK(Evas_Button_Flags, flags), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2965#define evas_canvas_event_feed_multi_up(d, x, y, rad, radx, rady, pres, ang, fx, fy, flags, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MULTI_UP), EO_TYPECHECK(int, d), EO_TYPECHECK(int, x), EO_TYPECHECK(int, y), EO_TYPECHECK(double, rad), EO_TYPECHECK(double, radx), EO_TYPECHECK(double, rady), EO_TYPECHECK(double, pres), EO_TYPECHECK(double, ang), EO_TYPECHECK(double, fx), EO_TYPECHECK(double, fy), EO_TYPECHECK(Evas_Button_Flags, flags), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2966#define evas_canvas_event_feed_multi_move(d, x, y, rad, radx, rady, pres, ang, fx, fy, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_MULTI_MOVE), EO_TYPECHECK(int, d), EO_TYPECHECK(int, x), EO_TYPECHECK(int, y), EO_TYPECHECK(double, rad), EO_TYPECHECK(double, radx), EO_TYPECHECK(double, rady), EO_TYPECHECK(double, pres), EO_TYPECHECK(double, ang), EO_TYPECHECK(double, fx), EO_TYPECHECK(double, fy), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2967
2968/**
2969 * @def evas_canvas_event_feed_key_down
2970 * @since 1.8
2971 *
2972 * Key down event feed
2973 *
2974 * @param[in] keyname
2975 * @param[in] key
2976 * @param[in] string
2977 * @param[in] compose
2978 * @param[in] timestamp
2979 * @param[in] data
2980 *
2981 * @see evas_event_feed_key_down
2982 */
2983#define evas_canvas_event_feed_key_down(keyname, key, string, compose, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_KEY_DOWN), EO_TYPECHECK(const char *, keyname), EO_TYPECHECK(const char *, key), EO_TYPECHECK(const char *, string), EO_TYPECHECK(const char *, compose), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
2984
2985/**
2986 * @def evas_canvas_event_feed_key_up
2987 * @since 1.8
2988 *
2989 * Key up event feed
2990 *
2991 * @param[in] keyname
2992 * @param[in] key
2993 * @param[in] string
2994 * @param[in] compose
2995 * @param[in] timestamp
2996 * @param[in] data
2997 *
2998 * @see evas_event_feed_key_up
2999 */
3000#define evas_canvas_event_feed_key_up(keyname, key, string, compose, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_KEY_UP), EO_TYPECHECK(const char *, keyname), EO_TYPECHECK(const char *, key), EO_TYPECHECK(const char *, string), EO_TYPECHECK(const char *, compose), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
3001
3002/**
3003 * @def evas_canvas_event_feed_hold
3004 * @since 1.8
3005 *
3006 * Hold event feed
3007 *
3008 * @param[in] hold
3009 * @param[in] timestamp
3010 * @param[in] data
3011 *
3012 * @see evas_event_feed_hold
3013 */
3014#define evas_canvas_event_feed_hold(hold, timestamp, data) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_FEED_HOLD), EO_TYPECHECK(int, hold), EO_TYPECHECK(unsigned int, timestamp), EO_TYPECHECK(const void *, data)
3015
3016/**
3017 * @def evas_canvas_event_refeed_event
3018 * @since 1.8
3019 *
3020 * Re feed event.
3021 *
3022 * @param[in] event_copy
3023 * @param[in] event_type
3024 *
3025 * @see evas_event_refeed_event
3026 */
3027#define evas_canvas_event_refeed_event(event_copy, event_type) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_REFEED_EVENT), EO_TYPECHECK(void *, event_copy), EO_TYPECHECK(Evas_Callback_Type, event_type)
3028
3029/**
3030 * @def evas_canvas_event_down_count_get
3031 * @since 1.8
3032 *
3033 * Get the number of mouse or multi presses currently active
3034 *
3035 * @param[out] ret
3036 *
3037 * @see evas_event_down_count_get
3038 */
3039#define evas_canvas_event_down_count_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_EVENT_DOWN_COUNT_GET), EO_TYPECHECK(int *, ret)
3040
3041/**
3042 * @def evas_canvas_focus_get
3043 * @since 1.8
3044 *
3045 * Retrieve the object that currently has focus.
3046 *
3047 * @param[out] ret
3048 *
3049 * @see evas_focus_get
3050 */
3051#define evas_canvas_focus_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FOCUS_GET), EO_TYPECHECK(Evas_Object **, ret)
3052
3053
3054/**
3055 * @def evas_canvas_font_path_clear
3056 * @since 1.8
3057 *
3058 * Removes all font paths loaded into memory for the given evas.
3059 *
3060 *
3061 * @see evas_font_path_clear
3062 */
3063#define evas_canvas_font_path_clear() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_PATH_CLEAR)
3064
3065/**
3066 * @def evas_canvas_font_path_append
3067 * @since 1.8
3068 *
3069 * Appends a font path to the list of font paths used by the given evas.
3070 *
3071 * @param[in] path
3072 *
3073 * @see evas_font_path_append
3074 */
3075#define evas_canvas_font_path_append(path) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_PATH_APPEND), EO_TYPECHECK(const char *, path)
3076
3077/**
3078 * @def evas_canvas_font_path_prepend
3079 * @since 1.8
3080 *
3081 * Prepends a font path to the list of font paths used by the given evas.
3082 *
3083 * @param[in] path
3084 *
3085 * @see evas_font_path_prepend
3086 */
3087#define evas_canvas_font_path_prepend(path) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_PATH_PREPEND), EO_TYPECHECK(const char *, path)
3088
3089/**
3090 * @def evas_canvas_font_path_list
3091 * @since 1.8
3092 *
3093 * Retrieves the list of font paths used by the given evas.
3094 *
3095 * @param[out] ret
3096 *
3097 * @see evas_font_path_list
3098 */
3099#define evas_canvas_font_path_list(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_PATH_LIST), EO_TYPECHECK(const Eina_List **, ret)
3100
3101/**
3102 * @def evas_canvas_font_hinting_set
3103 * @since 1.8
3104 *
3105 * Changes the font hinting for the given evas.
3106 *
3107 * @param[in] hinting
3108 *
3109 * @see evas_font_hinting_set
3110 */
3111#define evas_canvas_font_hinting_set(hinting) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_HINTING_SET), EO_TYPECHECK(Evas_Font_Hinting_Flags, hinting)
3112
3113/**
3114 * @def evas_canvas_font_hinting_get
3115 * @since 1.8
3116 *
3117 * Retrieves the font hinting used by the given evas.
3118 *
3119 * @param[out] ret
3120 *
3121 * @see evas_font_hinting_get
3122 */
3123#define evas_canvas_font_hinting_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_HINTING_GET), EO_TYPECHECK(Evas_Font_Hinting_Flags *, ret)
3124
3125/**
3126 * @def evas_canvas_font_hinting_can_hint
3127 * @since 1.8
3128 *
3129 * Checks if the font hinting is supported by the given evas.
3130 *
3131 * @param[in] hinting
3132 * @param[out] ret
3133 *
3134 * @see evas_font_hinting_can_hint
3135 */
3136#define evas_canvas_font_hinting_can_hint(hinting, ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_HINTING_CAN_HINT), EO_TYPECHECK(Evas_Font_Hinting_Flags, hinting), EO_TYPECHECK(Eina_Bool *, ret)
3137
3138/**
3139 * @def evas_canvas_font_cache_flush
3140 * @since 1.8
3141 *
3142 * Force the given evas and associated engine to flush its font cache.
3143 *
3144 *
3145 * @see evas_font_cache_flush
3146 */
3147#define evas_canvas_font_cache_flush() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_CACHE_FLUSH)
3148
3149/**
3150 * @def evas_canvas_font_cache_set
3151 * @since 1.8
3152 *
3153 * Changes the size of font cache of the given evas.
3154 *
3155 * @param[in] size
3156 *
3157 * @see evas_font_cache_set
3158 */
3159#define evas_canvas_font_cache_set(size) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_CACHE_SET), EO_TYPECHECK(int, size)
3160
3161/**
3162 * @def evas_canvas_font_cache_get
3163 * @since 1.8
3164 *
3165 * Changes the size of font cache of the given evas.
3166 *
3167 * @param[out] ret
3168 *
3169 * @see evas_font_cache_get
3170 */
3171#define evas_canvas_font_cache_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_CACHE_GET), EO_TYPECHECK(int *, ret)
3172
3173/**
3174 * @def evas_canvas_font_available_list
3175 * @since 1.8
3176 *
3177 * List of available font descriptions known or found by this evas.
3178 *
3179 * @param[out] ret
3180 *
3181 * @see evas_font_available_list
3182 */
3183#define evas_canvas_font_available_list(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_FONT_AVAILABLE_LIST), EO_TYPECHECK(Eina_List **, ret)
3184
3185
3186/**
3187 * @def evas_canvas_key_modifier_get
3188 * @since 1.8
3189 *
3190 * Returns a handle to the list of modifier keys registered in the
3191 *
3192 * @param[out] ret
3193 *
3194 * @see evas_key_modifier_get
3195 */
3196#define evas_canvas_key_modifier_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_MODIFIER_GET), EO_TYPECHECK(const Evas_Modifier **, ret)
3197
3198/**
3199 * @def evas_canvas_key_lock_get
3200 * @since 1.8
3201 *
3202 * Returns a handle to the list of lock keys registered in the canvas
3203 *
3204 * @param[out] ret
3205 *
3206 * @see evas_key_lock_get
3207 */
3208#define evas_canvas_key_lock_get(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_LOCK_GET), EO_TYPECHECK(const Evas_Lock **, ret)
3209
3210/**
3211 * @def evas_canvas_key_modifier_add
3212 * @since 1.8
3213 *
3214 * Adds the keyname key to the current list of modifier keys.
3215 *
3216 * @param[in] keyname
3217 *
3218 * @see evas_key_modifier_add
3219 */
3220#define evas_canvas_key_modifier_add(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_MODIFIER_ADD), EO_TYPECHECK(const char *, keyname)
3221
3222/**
3223 * @def evas_canvas_key_modifier_del
3224 * @since 1.8
3225 *
3226 * Removes the keyname key from the current list of modifier keys
3227 *
3228 * @param[in] keyname
3229 *
3230 * @see evas_key_modifier_del
3231 */
3232#define evas_canvas_key_modifier_del(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_MODIFIER_DEL), EO_TYPECHECK(const char *, keyname)
3233
3234/**
3235 * @def evas_canvas_key_lock_add
3236 * @since 1.8
3237 *
3238 * Adds the keyname key to the current list of lock keys.
3239 *
3240 * @param[in] keyname
3241 *
3242 * @see evas_key_lock_add
3243 */
3244#define evas_canvas_key_lock_add(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_LOCK_ADD), EO_TYPECHECK(const char *, keyname)
3245
3246/**
3247 * @def evas_canvas_key_lock_del
3248 * @since 1.8
3249 *
3250 * Removes the keyname key from the current list of lock keys on
3251 *
3252 * @param[in] keyname
3253 *
3254 * @see evas_key_lock_del
3255 */
3256#define evas_canvas_key_lock_del(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_LOCK_DEL), EO_TYPECHECK(const char *, keyname)
3257
3258/**
3259 * @def evas_canvas_key_modifier_on
3260 * @since 1.8
3261 *
3262 * Enables or turns on programmatically the modifier key with name @p keyname.
3263 *
3264 * @param[in] keyname
3265 *
3266 * @see evas_key_modifier_on
3267 */
3268#define evas_canvas_key_modifier_on(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_MODIFIER_ON), EO_TYPECHECK(const char *, keyname)
3269
3270/**
3271 * @def evas_canvas_key_modifier_off
3272 * @since 1.8
3273 *
3274 * Disables or turns off programmatically the modifier key with name @p keyname
3275 *
3276 * @param[in] keyname
3277 *
3278 * @see evas_key_modifier_off
3279 */
3280#define evas_canvas_key_modifier_off(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_MODIFIER_OFF), EO_TYPECHECK(const char *, keyname)
3281
3282/**
3283 * @def evas_canvas_key_lock_on
3284 * @since 1.8
3285 *
3286 * Enables or turns on programmatically the lock key with name @p keyname
3287 *
3288 * @param[in] keyname
3289 *
3290 * @see evas_key_lock_on
3291 */
3292#define evas_canvas_key_lock_on(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_LOCK_ON), EO_TYPECHECK(const char *, keyname)
3293
3294/**
3295 * @def evas_canvas_key_lock_off
3296 * @since 1.8
3297 *
3298 * Disables or turns off programmatically the lock key with name @p keyname
3299 *
3300 * @param[in] keyname
3301 *
3302 * @see evas_key_lock_off
3303 */
3304#define evas_canvas_key_lock_off(keyname) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_LOCK_OFF), EO_TYPECHECK(const char *, keyname)
3305
3306/**
3307 * @def evas_canvas_key_modifier_mask_get
3308 * @since 1.8
3309 *
3310 * Creates a bit mask from the keyname @b modifier key.
3311 *
3312 * @param[in] keyname
3313 * @param[out] ret
3314 *
3315 * @see evas_key_modifier_mask_get
3316 */
3317#define evas_canvas_key_modifier_mask_get(keyname, ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_KEY_MODIFIER_MASK_GET), EO_TYPECHECK(const char *, keyname), EO_TYPECHECK(Evas_Modifier_Mask *, ret)
3318
3319/**
3320 * @def evas_canvas_damage_rectangle_add
3321 * @since 1.8
3322 *
3323 * Add a damage rectangle.
3324 *
3325 * @param[in] x
3326 * @param[in] y
3327 * @param[in] w
3328 * @param[in] h
3329 *
3330 * @see evas_damage_rectangle_add
3331 */
3332#define evas_canvas_damage_rectangle_add(x, y, w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_DAMAGE_RECTANGLE_ADD), EO_TYPECHECK(int, x), EO_TYPECHECK(int, y), EO_TYPECHECK(int, w), EO_TYPECHECK(int, h)
3333
3334/**
3335 * @def evas_canvas_obscured_rectangle_add
3336 * @since 1.8
3337 *
3338 * Add an "obscured region" to an Evas canvas.
3339 *
3340 * @param[in] x
3341 * @param[in] y
3342 * @param[in] w
3343 * @param[in] h
3344 *
3345 * @see evas_obscured_rectangle_add
3346 */
3347#define evas_canvas_obscured_rectangle_add(x, y, w, h) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OBSCURED_RECTANGLE_ADD), EO_TYPECHECK(int, x), EO_TYPECHECK(int, y), EO_TYPECHECK(int, w), EO_TYPECHECK(int, h)
3348
3349/**
3350 * @def evas_canvas_obscured_clear
3351 * @since 1.8
3352 *
3353 * Remove all "obscured regions" from an Evas canvas.
3354 *
3355 *
3356 * @see evas_obscured_clear
3357 */
3358#define evas_canvas_obscured_clear() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_OBSCURED_CLEAR)
3359
3360/**
3361 * @def evas_canvas_render_updates
3362 * @since 1.8
3363 *
3364 * Force immediate renderization of the given Evas canvas.
3365 *
3366 * @param[out] ret
3367 *
3368 * @see evas_render_updates
3369 */
3370#define evas_canvas_render_updates(ret) EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_RENDER_UPDATES), EO_TYPECHECK(Eina_List **, ret)
3371
3372/**
3373 * @def evas_canvas_render
3374 * @since 1.8
3375 *
3376 * Force renderization of the given canvas.
3377 *
3378 *
3379 * @see evas_render
3380 */
3381#define evas_canvas_render() EVAS_CANVAS_ID(EVAS_CANVAS_SUB_ID_RENDER)
3382
3383/**
3384 * @def evas_canvas_norender
3385 * @since 1.8
3386 *
3387 * Update the canvas internal objects bu