aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-01-23 23:30:42 +1000
committerDavid Walter Seikel2012-01-23 23:30:42 +1000
commit825a3d837a33f226c879cd02ad15c3fba57e8b2c (patch)
tree75f57bd9c4253508d338dc79ba8e57a7abc42255 /libraries/evas/src/lib
parentAdd ability to disable the test harness, or the Lua compile test. (diff)
downloadSledjHamr-825a3d837a33f226c879cd02ad15c3fba57e8b2c.zip
SledjHamr-825a3d837a33f226c879cd02ad15c3fba57e8b2c.tar.gz
SledjHamr-825a3d837a33f226c879cd02ad15c3fba57e8b2c.tar.bz2
SledjHamr-825a3d837a33f226c879cd02ad15c3fba57e8b2c.tar.xz
Update the EFL to what I'm actually using, coz I'm using some stuff not yet released.
Diffstat (limited to 'libraries/evas/src/lib')
-rw-r--r--libraries/evas/src/lib/Evas.h433
-rw-r--r--libraries/evas/src/lib/Evas_GL.h52
-rw-r--r--libraries/evas/src/lib/Makefile.am9
-rw-r--r--libraries/evas/src/lib/Makefile.in139
-rw-r--r--libraries/evas/src/lib/cache/Makefile.in8
-rw-r--r--libraries/evas/src/lib/cache/evas_cache_engine_image.c4
-rw-r--r--libraries/evas/src/lib/cache/evas_cache_image.c17
-rw-r--r--libraries/evas/src/lib/cache/evas_preload.c4
-rw-r--r--libraries/evas/src/lib/canvas/Makefile.in8
-rw-r--r--libraries/evas/src/lib/canvas/evas_callbacks.c274
-rw-r--r--libraries/evas/src/lib/canvas/evas_events.c520
-rw-r--r--libraries/evas/src/lib/canvas/evas_focus.c22
-rw-r--r--libraries/evas/src/lib/canvas/evas_gl.c27
-rw-r--r--libraries/evas/src/lib/canvas/evas_main.c41
-rw-r--r--libraries/evas/src/lib/canvas/evas_map.c18
-rw-r--r--libraries/evas/src/lib/canvas/evas_name.c32
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_box.c3
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_grid.c2
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_image.c46
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_inform.c16
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_intercept.c112
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_main.c112
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_smart.c31
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_table.c2
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_text.c4
-rw-r--r--libraries/evas/src/lib/canvas/evas_object_textblock.c909
-rw-r--r--libraries/evas/src/lib/canvas/evas_render.c31
-rw-r--r--libraries/evas/src/lib/cserve/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/evas_convert_rgb_16.c84
-rw-r--r--libraries/evas/src/lib/engines/common/evas_convert_rgb_32.c347
-rw-r--r--libraries/evas/src/lib/engines/common/evas_convert_yuv.c4
-rw-r--r--libraries/evas/src/lib/engines/common/evas_cpu.c4
-rw-r--r--libraries/evas/src/lib/engines/common/evas_draw_main.c68
-rw-r--r--libraries/evas/src/lib/engines/common/evas_font_draw.c135
-rw-r--r--libraries/evas/src/lib/engines/common/evas_font_main.c4
-rw-r--r--libraries/evas/src/lib/engines/common/evas_image_data.c4
-rw-r--r--libraries/evas/src/lib/engines/common/evas_image_load.c4
-rw-r--r--libraries/evas/src/lib/engines/common/evas_image_main.c56
-rw-r--r--libraries/evas/src/lib/engines/common/evas_image_scalecache.c2
-rw-r--r--libraries/evas/src/lib/engines/common/evas_line_main.c475
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_add/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c3
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c3
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c1
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_mask/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_mul/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_sub/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common/evas_polygon_main.c40
-rw-r--r--libraries/evas/src/lib/engines/common/evas_rectangle_main.c34
-rw-r--r--libraries/evas/src/lib/engines/common/evas_scale_sample.c113
-rw-r--r--libraries/evas/src/lib/engines/common/evas_tiler.c4
-rw-r--r--libraries/evas/src/lib/engines/common/language/evas_bidi_utils.c4
-rw-r--r--libraries/evas/src/lib/engines/common/language/evas_language_utils.c6
-rw-r--r--libraries/evas/src/lib/engines/common_16/Makefile.in8
-rw-r--r--libraries/evas/src/lib/engines/common_8/Makefile.in8
-rw-r--r--libraries/evas/src/lib/file/Makefile.in8
-rw-r--r--libraries/evas/src/lib/file/evas_module.c4
-rw-r--r--libraries/evas/src/lib/file/evas_path.c2
-rw-r--r--libraries/evas/src/lib/include/Makefile.in8
-rw-r--r--libraries/evas/src/lib/include/evas_common.h64
-rw-r--r--libraries/evas/src/lib/include/evas_private.h18
65 files changed, 3169 insertions, 1294 deletions
diff --git a/libraries/evas/src/lib/Evas.h b/libraries/evas/src/lib/Evas.h
index 5898290..b85bbeb 100644
--- a/libraries/evas/src/lib/Evas.h
+++ b/libraries/evas/src/lib/Evas.h
@@ -5,6 +5,7 @@
5@date 2000-2011 5@date 2000-2011
6 6
7Please see the @ref authors page for contact details. 7Please see the @ref authors page for contact details.
8
8@link Evas.h Evas API @endlink 9@link Evas.h Evas API @endlink
9 10
10@section toc Table of Contents 11@section toc Table of Contents
@@ -342,7 +343,7 @@ extern "C" {
342#endif 343#endif
343 344
344#define EVAS_VERSION_MAJOR 1 345#define EVAS_VERSION_MAJOR 1
345#define EVAS_VERSION_MINOR 0 346#define EVAS_VERSION_MINOR 2
346 347
347typedef struct _Evas_Version 348typedef struct _Evas_Version
348{ 349{
@@ -432,6 +433,9 @@ typedef enum _Evas_Callback_Type
432 */ 433 */
433 EVAS_CALLBACK_IMAGE_UNLOADED, /**< Image data has been unloaded (by some mechanims in Evas that throw out original image data) */ 434 EVAS_CALLBACK_IMAGE_UNLOADED, /**< Image data has been unloaded (by some mechanims in Evas that throw out original image data) */
434 435
436 EVAS_CALLBACK_RENDER_PRE, /**< Called just before rendering starts on the canvas target @since 1.2 */
437 EVAS_CALLBACK_RENDER_POST, /**< Called just after rendering stops on the canvas target @since 1.2 */
438
435 EVAS_CALLBACK_LAST /**< kept as last element/sentinel -- not really an event */ 439 EVAS_CALLBACK_LAST /**< kept as last element/sentinel -- not really an event */
436} Evas_Callback_Type; /**< The types of events triggering a callback */ 440} Evas_Callback_Type; /**< The types of events triggering a callback */
437 441
@@ -1061,7 +1065,8 @@ struct _Evas_Event_Hold /** Hold change event */
1061typedef enum _Evas_Object_Pointer_Mode 1065typedef enum _Evas_Object_Pointer_Mode
1062{ 1066{
1063 EVAS_OBJECT_POINTER_MODE_AUTOGRAB, /**< default, X11-like */ 1067 EVAS_OBJECT_POINTER_MODE_AUTOGRAB, /**< default, X11-like */
1064 EVAS_OBJECT_POINTER_MODE_NOGRAB /**< pointer always bound to the object right below it */ 1068 EVAS_OBJECT_POINTER_MODE_NOGRAB, /**< pointer always bound to the object right below it */
1069 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 */
1065} Evas_Object_Pointer_Mode; /**< How the mouse pointer should be handled by Evas. */ 1070} Evas_Object_Pointer_Mode; /**< How the mouse pointer should be handled by Evas. */
1066 1071
1067typedef void (*Evas_Smart_Cb) (void *data, Evas_Object *obj, void *event_info); /**< Evas smart objects' "smart callback" function signature */ 1072typedef void (*Evas_Smart_Cb) (void *data, Evas_Object *obj, void *event_info); /**< Evas smart objects' "smart callback" function signature */
@@ -1220,7 +1225,7 @@ EAPI Evas_Alloc_Error evas_alloc_error (void);
1220 * 1225 *
1221 * @ingroup Evas_Group 1226 * @ingroup Evas_Group
1222 */ 1227 */
1223EAPI int evas_async_events_fd_get (void) EINA_WARN_UNUSED_RESULT EINA_PURE; 1228EAPI int evas_async_events_fd_get (void) EINA_WARN_UNUSED_RESULT;
1224 1229
1225/** 1230/**
1226 * @brief Trigger the processing of all events waiting on the file 1231 * @brief Trigger the processing of all events waiting on the file
@@ -1339,7 +1344,7 @@ EAPI void evas_focus_out (Evas *e);
1339 * @param e The evas to query information. 1344 * @param e The evas to query information.
1340 * @ingroup Evas_Canvas 1345 * @ingroup Evas_Canvas
1341 */ 1346 */
1342EAPI Eina_Bool evas_focus_state_get (const Evas *e) EINA_PURE; 1347EAPI Eina_Bool evas_focus_state_get (const Evas *e);
1343 1348
1344/** 1349/**
1345 * Push the nochange flag up 1 1350 * Push the nochange flag up 1
@@ -1380,7 +1385,7 @@ EAPI void evas_data_attach_set (Evas *e, void *data) E
1380 * @return The pointer attached 1385 * @return The pointer attached
1381 * @ingroup Evas_Canvas 1386 * @ingroup Evas_Canvas
1382 */ 1387 */
1383EAPI void *evas_data_attach_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 1388EAPI void *evas_data_attach_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1384 1389
1385 1390
1386/** 1391/**
@@ -1747,7 +1752,7 @@ EAPI void evas_output_method_set (Evas *e, int render_me
1747 * returned if there is an error. 1752 * returned if there is an error.
1748 * @ingroup Evas_Output_Method 1753 * @ingroup Evas_Output_Method
1749 */ 1754 */
1750EAPI int evas_output_method_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 1755EAPI int evas_output_method_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1751 1756
1752 1757
1753/** 1758/**
@@ -1764,7 +1769,7 @@ EAPI int evas_output_method_get (const Evas *e) EINA_WA
1764 * an engine has not yet been assigned. 1769 * an engine has not yet been assigned.
1765 * @ingroup Evas_Output_Method 1770 * @ingroup Evas_Output_Method
1766 */ 1771 */
1767EAPI Evas_Engine_Info *evas_engine_info_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 1772EAPI Evas_Engine_Info *evas_engine_info_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
1768 1773
1769/** 1774/**
1770 * Applies the engine settings for the given evas from the given @c 1775 * Applies the engine settings for the given evas from the given @c
@@ -1876,6 +1881,38 @@ EAPI void evas_output_viewport_set (Evas *e, Evas_Coord x,
1876EAPI void evas_output_viewport_get (const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1); 1881EAPI void evas_output_viewport_get (const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) EINA_ARG_NONNULL(1);
1877 1882
1878/** 1883/**
1884 * Sets the output framespace size of the render engine of the given evas.
1885 *
1886 * The framespace size is used in the Wayland engines to denote space where
1887 * the output is not drawn. This is mainly used in ecore_evas to draw borders
1888 *
1889 * The units used for @p w and @p h depend on the engine used by the
1890 * evas.
1891 *
1892 * @param e The given evas.
1893 * @param x The left coordinate in output units, usually pixels.
1894 * @param y The top coordinate in output units, usually pixels.
1895 * @param w The width in output units, usually pixels.
1896 * @param h The height in output units, usually pixels.
1897 * @ingroup Evas_Output_Size
1898 * @since 1.1.0
1899 */
1900EAPI void evas_output_framespace_set (Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h);
1901
1902/**
1903 * Get the render engine's output framespace co-ordinates in canvas units.
1904 *
1905 * @param e The pointer to the Evas Canvas
1906 * @param x The pointer to a x variable to be filled in
1907 * @param y The pointer to a y variable to be filled in
1908 * @param w The pointer to a width variable to be filled in
1909 * @param h The pointer to a height variable to be filled in
1910 * @ingroup Evas_Output_Size
1911 * @since 1.1.0
1912 */
1913EAPI void evas_output_framespace_get (const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h);
1914
1915/**
1879 * @defgroup Evas_Coord_Mapping_Group Coordinate Mapping Functions 1916 * @defgroup Evas_Coord_Mapping_Group Coordinate Mapping Functions
1880 * 1917 *
1881 * Functions that are used to map coordinates from the canvas to the 1918 * Functions that are used to map coordinates from the canvas to the
@@ -2342,6 +2379,33 @@ EAPI void evas_post_event_callback_remove_full (Evas *e, Evas_Objec
2342 */ 2379 */
2343 2380
2344/** 2381/**
2382 * Set the default set of flags an event begins with
2383 *
2384 * @param e The canvas to set the default event flags of
2385 * @param flags The default flags to use
2386 *
2387 * Events in evas can have an event_flags member. This starts out with
2388 * and initial value (no flags). this lets you set the default flags that
2389 * an event begins with to be @p flags
2390 *
2391 * @since 1.2
2392 */
2393EAPI void evas_event_default_flags_set (Evas *e, Evas_Event_Flags flags) EINA_ARG_NONNULL(1);
2394
2395/**
2396 * Get the defaulty set of flags an event begins with
2397 *
2398 * @param e The canvas to get the default event flags from
2399 * @return The default event flags for that canvas
2400 *
2401 * This gets the default event flags events are produced with when fed in.
2402 *
2403 * @see evas_event_default_flags_set()
2404 * @since 1.2
2405 */
2406EAPI Evas_Event_Flags evas_event_default_flags_get (const Evas *e) EINA_ARG_NONNULL(1);
2407
2408/**
2345 * Freeze all input events processing. 2409 * Freeze all input events processing.
2346 * 2410 *
2347 * @param e The canvas to freeze input events processing on. 2411 * @param e The canvas to freeze input events processing on.
@@ -2407,7 +2471,7 @@ EAPI void evas_event_thaw (Evas *e) EINA_ARG_NONN
2407 * @endcode 2471 * @endcode
2408 * 2472 *
2409 */ 2473 */
2410EAPI int evas_event_freeze_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 2474EAPI int evas_event_freeze_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2411 2475
2412/** 2476/**
2413 * After thaw of a canvas, re-evaluate the state of objects and call callbacks 2477 * After thaw of a canvas, re-evaluate the state of objects and call callbacks
@@ -2448,6 +2512,16 @@ EAPI void evas_event_thaw_eval (Evas *e) EINA_ARG_NONN
2448 */ 2512 */
2449 2513
2450/** 2514/**
2515 * Get the number of mouse or multi presses currently active
2516 *
2517 * @p e The given canvas pointer.
2518 * @return The numer of presses (0 if none active).
2519 *
2520 * @since 1.2
2521 */
2522EAPI int evas_event_down_count_get (const Evas *e) EINA_ARG_NONNULL(1);
2523
2524/**
2451 * Mouse down event feed. 2525 * Mouse down event feed.
2452 * 2526 *
2453 * @param e The given canvas pointer. 2527 * @param e The given canvas pointer.
@@ -2679,7 +2753,7 @@ EAPI void evas_image_cache_set (Evas *e, int size) EIN
2679 * This function returns the image cache size of canvas in bytes. 2753 * This function returns the image cache size of canvas in bytes.
2680 * 2754 *
2681 */ 2755 */
2682EAPI int evas_image_cache_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 2756EAPI int evas_image_cache_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2683 2757
2684/** 2758/**
2685 * Get the maximum image size evas can possibly handle 2759 * Get the maximum image size evas can possibly handle
@@ -2728,7 +2802,7 @@ EAPI void evas_font_hinting_set (Evas *e, Evas_Font_H
2728 * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE. 2802 * #EVAS_FONT_HINTING_AUTO, #EVAS_FONT_HINTING_BYTECODE.
2729 * @ingroup Evas_Font_Group 2803 * @ingroup Evas_Font_Group
2730 */ 2804 */
2731EAPI Evas_Font_Hinting_Flags evas_font_hinting_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 2805EAPI Evas_Font_Hinting_Flags evas_font_hinting_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2732 2806
2733/** 2807/**
2734 * Checks if the font hinting is supported by the given evas. 2808 * Checks if the font hinting is supported by the given evas.
@@ -2739,7 +2813,7 @@ EAPI Evas_Font_Hinting_Flags evas_font_hinting_get (const Evas *e) EINA_
2739 * @return @c EINA_TRUE if it is supported, @c EINA_FALSE otherwise. 2813 * @return @c EINA_TRUE if it is supported, @c EINA_FALSE otherwise.
2740 * @ingroup Evas_Font_Group 2814 * @ingroup Evas_Font_Group
2741 */ 2815 */
2742EAPI Eina_Bool evas_font_hinting_can_hint (const Evas *e, Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 2816EAPI Eina_Bool evas_font_hinting_can_hint (const Evas *e, Evas_Font_Hinting_Flags hinting) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2743 2817
2744 2818
2745/** 2819/**
@@ -2768,7 +2842,7 @@ EAPI void evas_font_cache_set (Evas *e, int size) E
2768 * 2842 *
2769 * @ingroup Evas_Font_Group 2843 * @ingroup Evas_Font_Group
2770 */ 2844 */
2771EAPI int evas_font_cache_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 2845EAPI int evas_font_cache_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2772 2846
2773 2847
2774/** 2848/**
@@ -2785,7 +2859,7 @@ EAPI int evas_font_cache_get (const Evas *e) EINA_
2785 * 2859 *
2786 * @ingroup Evas_Font_Group 2860 * @ingroup Evas_Font_Group
2787 */ 2861 */
2788EAPI Eina_List *evas_font_available_list (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 2862EAPI Eina_List *evas_font_available_list (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2789 2863
2790/** 2864/**
2791 * Free list of font descriptions returned by evas_font_dir_available_list(). 2865 * Free list of font descriptions returned by evas_font_dir_available_list().
@@ -2834,7 +2908,7 @@ EAPI void evas_font_path_prepend (Evas *e, const char *p
2834 * @return The list of font paths used. 2908 * @return The list of font paths used.
2835 * @ingroup Evas_Font_Path_Group 2909 * @ingroup Evas_Font_Path_Group
2836 */ 2910 */
2837EAPI const Eina_List *evas_font_path_list (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 2911EAPI const Eina_List *evas_font_path_list (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2838 2912
2839/** 2913/**
2840 * @defgroup Evas_Object_Group Generic Object Functions 2914 * @defgroup Evas_Object_Group Generic Object Functions
@@ -2958,7 +3032,7 @@ EAPI void evas_object_clip_set (Evas_Object *obj, Evas
2958 * 3032 *
2959 * See the full @ref Example_Evas_Object_Manipulation "example". 3033 * See the full @ref Example_Evas_Object_Manipulation "example".
2960 */ 3034 */
2961EAPI Evas_Object *evas_object_clip_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3035EAPI Evas_Object *evas_object_clip_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
2962 3036
2963/** 3037/**
2964 * Disable/cease clipping on a clipped @p obj object. 3038 * Disable/cease clipping on a clipped @p obj object.
@@ -3015,7 +3089,7 @@ EAPI void evas_object_clip_unset (Evas_Object *obj);
3015 * } 3089 * }
3016 * @endcode 3090 * @endcode
3017 */ 3091 */
3018EAPI const Eina_List *evas_object_clipees_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3092EAPI const Eina_List *evas_object_clipees_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3019 3093
3020 3094
3021/** 3095/**
@@ -3068,7 +3142,7 @@ EAPI void evas_object_focus_set (Evas_Object *obj, Eina
3068 * @see evas_object_key_grab 3142 * @see evas_object_key_grab
3069 * @see evas_object_key_ungrab 3143 * @see evas_object_key_ungrab
3070 */ 3144 */
3071EAPI Eina_Bool evas_object_focus_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3145EAPI Eina_Bool evas_object_focus_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3072 3146
3073 3147
3074/** 3148/**
@@ -3104,7 +3178,7 @@ EAPI void evas_object_layer_set (Evas_Object *obj, shor
3104 * 3178 *
3105 * @see evas_object_layer_set() 3179 * @see evas_object_layer_set()
3106 */ 3180 */
3107EAPI short evas_object_layer_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3181EAPI short evas_object_layer_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3108 3182
3109 3183
3110/** 3184/**
@@ -3139,7 +3213,7 @@ EAPI void evas_object_name_set (Evas_Object *obj, cons
3139 * 3213 *
3140 * See the full @ref Example_Evas_Events "example". 3214 * See the full @ref Example_Evas_Events "example".
3141 */ 3215 */
3142EAPI const char *evas_object_name_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3216EAPI const char *evas_object_name_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3143 3217
3144 3218
3145/** 3219/**
@@ -3382,7 +3456,7 @@ EAPI void evas_object_hide (Evas_Object *obj) EINA
3382 * 3456 *
3383 * @ingroup Evas_Object_Group_Basic 3457 * @ingroup Evas_Object_Group_Basic
3384 */ 3458 */
3385EAPI Eina_Bool evas_object_visible_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3459EAPI Eina_Bool evas_object_visible_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3386 3460
3387 3461
3388/** 3462/**
@@ -3455,7 +3529,7 @@ EAPI void evas_object_color_get (const Evas_Object *obj
3455 * 3529 *
3456 * @ingroup Evas_Object_Group_Basic 3530 * @ingroup Evas_Object_Group_Basic
3457 */ 3531 */
3458EAPI Evas *evas_object_evas_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3532EAPI Evas *evas_object_evas_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3459 3533
3460/** 3534/**
3461 * Retrieves the type of the given Evas object. 3535 * Retrieves the type of the given Evas object.
@@ -3485,7 +3559,7 @@ EAPI Evas *evas_object_evas_get (const Evas_Object *obj
3485 * 3559 *
3486 * See the full @ref Example_Evas_Object_Manipulation "example". 3560 * See the full @ref Example_Evas_Object_Manipulation "example".
3487 */ 3561 */
3488EAPI const char *evas_object_type_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3562EAPI const char *evas_object_type_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3489 3563
3490/** 3564/**
3491 * Raise @p obj to the top of its layer. 3565 * Raise @p obj to the top of its layer.
@@ -3586,7 +3660,7 @@ EAPI void evas_object_stack_below (Evas_Object *obj, Evas
3586 * @see evas_object_below_get() 3660 * @see evas_object_below_get()
3587 * 3661 *
3588 */ 3662 */
3589EAPI Evas_Object *evas_object_above_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3663EAPI Evas_Object *evas_object_above_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3590 3664
3591/** 3665/**
3592 * Get the Evas object stacked right below @p obj 3666 * Get the Evas object stacked right below @p obj
@@ -3602,7 +3676,7 @@ EAPI Evas_Object *evas_object_above_get (const Evas_Object *obj
3602 * @see evas_object_layer_set() 3676 * @see evas_object_layer_set()
3603 * @see evas_object_below_get() 3677 * @see evas_object_below_get()
3604 */ 3678 */
3605EAPI Evas_Object *evas_object_below_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 3679EAPI Evas_Object *evas_object_below_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3606 3680
3607/** 3681/**
3608 * @} 3682 * @}
@@ -3946,7 +4020,7 @@ EAPI void evas_object_pass_events_set (Evas_Object *obj, Ein
3946 * @see evas_object_propagate_events_get() 4020 * @see evas_object_propagate_events_get()
3947 * @see evas_object_freeze_events_get() 4021 * @see evas_object_freeze_events_get()
3948 */ 4022 */
3949EAPI Eina_Bool evas_object_pass_events_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 4023EAPI Eina_Bool evas_object_pass_events_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3950 4024
3951/** 4025/**
3952 * Set whether an Evas object is to repeat events. 4026 * Set whether an Evas object is to repeat events.
@@ -3988,7 +4062,7 @@ EAPI void evas_object_repeat_events_set (Evas_Object *obj, Ein
3988 * @see evas_object_propagate_events_get() 4062 * @see evas_object_propagate_events_get()
3989 * @see evas_object_freeze_events_get() 4063 * @see evas_object_freeze_events_get()
3990 */ 4064 */
3991EAPI Eina_Bool evas_object_repeat_events_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 4065EAPI Eina_Bool evas_object_repeat_events_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
3992 4066
3993/** 4067/**
3994 * Set whether events on a smart object's member should get propagated 4068 * Set whether events on a smart object's member should get propagated
@@ -4026,7 +4100,7 @@ EAPI void evas_object_propagate_events_set (Evas_Object *obj, Ein
4026 * @see evas_object_pass_events_get() 4100 * @see evas_object_pass_events_get()
4027 * @see evas_object_freeze_events_get() 4101 * @see evas_object_freeze_events_get()
4028 */ 4102 */
4029EAPI Eina_Bool evas_object_propagate_events_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 4103EAPI Eina_Bool evas_object_propagate_events_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
4030 4104
4031/** 4105/**
4032 * Set whether an Evas object is to freeze (discard) events. 4106 * Set whether an Evas object is to freeze (discard) events.
@@ -4064,7 +4138,7 @@ EAPI void evas_object_freeze_events_set(Evas_Object *obj, Eina_Bool
4064 * @see evas_object_propagate_events_get() 4138 * @see evas_object_propagate_events_get()
4065 * @since 1.1.0 4139 * @since 1.1.0
4066 */ 4140 */
4067EAPI Eina_Bool evas_object_freeze_events_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 4141EAPI Eina_Bool evas_object_freeze_events_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
4068 4142
4069/** 4143/**
4070 * @} 4144 * @}
@@ -5028,7 +5102,7 @@ EAPI void evas_object_size_hint_min_get (const Evas_Object *obj
5028 * @skip evas_object_size_hint_min_set 5102 * @skip evas_object_size_hint_min_set
5029 * @until return 5103 * @until return
5030 * 5104 *
5031 * In this example the minimum size hints change de behavior of an 5105 * In this example the minimum size hints change the behavior of an
5032 * Evas box when layouting its children. See the full @ref 5106 * Evas box when layouting its children. See the full @ref
5033 * Example_Evas_Size_Hints "example". 5107 * Example_Evas_Size_Hints "example".
5034 * 5108 *
@@ -5072,7 +5146,7 @@ EAPI void evas_object_size_hint_max_get (const Evas_Object *obj
5072 * @skip evas_object_size_hint_max_set 5146 * @skip evas_object_size_hint_max_set
5073 * @until return 5147 * @until return
5074 * 5148 *
5075 * In this example the maximum size hints change de behavior of an 5149 * In this example the maximum size hints change the behavior of an
5076 * Evas box when layouting its children. See the full @ref 5150 * Evas box when layouting its children. See the full @ref
5077 * Example_Evas_Size_Hints "example". 5151 * Example_Evas_Size_Hints "example".
5078 * 5152 *
@@ -5247,7 +5321,7 @@ EAPI void evas_object_size_hint_align_get (const Evas_Object *obj
5247 * @skip evas_object_size_hint_align_set 5321 * @skip evas_object_size_hint_align_set
5248 * @until return 5322 * @until return
5249 * 5323 *
5250 * In this example the alignment hints change de behavior of an Evas 5324 * In this example the alignment hints change the behavior of an Evas
5251 * box when layouting its children. See the full @ref 5325 * box when layouting its children. See the full @ref
5252 * Example_Evas_Size_Hints "example". 5326 * Example_Evas_Size_Hints "example".
5253 * 5327 *
@@ -5306,7 +5380,7 @@ EAPI void evas_object_size_hint_weight_get (const Evas_Object *obj
5306 * @skip evas_object_size_hint_weight_set 5380 * @skip evas_object_size_hint_weight_set
5307 * @until return 5381 * @until return
5308 * 5382 *
5309 * In this example the weight hints change de behavior of an Evas box 5383 * In this example the weight hints change the behavior of an Evas box
5310 * when layouting its children. See the full @ref 5384 * when layouting its children. See the full @ref
5311 * Example_Evas_Size_Hints "example". 5385 * Example_Evas_Size_Hints "example".
5312 * 5386 *
@@ -5342,7 +5416,7 @@ EAPI void evas_object_size_hint_weight_set (Evas_Object *obj, doub
5342 * @skip evas_object_size_hint_padding_set 5416 * @skip evas_object_size_hint_padding_set
5343 * @until return 5417 * @until return
5344 * 5418 *
5345 * In this example the padding hints change de behavior of an Evas box 5419 * In this example the padding hints change the behavior of an Evas box
5346 * when layouting its children. See the full @ref 5420 * when layouting its children. See the full @ref
5347 * Example_Evas_Size_Hints "example". 5421 * Example_Evas_Size_Hints "example".
5348 * 5422 *
@@ -5456,7 +5530,7 @@ EAPI void evas_object_data_set (Evas_Object *ob
5456 * else printf("No data was stored on the object\n"); 5530 * else printf("No data was stored on the object\n");
5457 * @endcode 5531 * @endcode
5458 */ 5532 */
5459EAPI void *evas_object_data_get (const Evas_Object *obj, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 5533EAPI void *evas_object_data_get (const Evas_Object *obj, const char *key) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
5460 5534
5461/** 5535/**
5462 * Delete an attached data pointer from an object. 5536 * Delete an attached data pointer from an object.
@@ -5510,7 +5584,7 @@ EAPI void evas_object_pointer_mode_set (Evas_Object *ob
5510 * @return pointer behavior. 5584 * @return pointer behavior.
5511 * @ingroup Evas_Object_Group_Extras 5585 * @ingroup Evas_Object_Group_Extras
5512 */ 5586 */
5513EAPI Evas_Object_Pointer_Mode evas_object_pointer_mode_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5587EAPI Evas_Object_Pointer_Mode evas_object_pointer_mode_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5514 5588
5515 5589
5516/** 5590/**
@@ -5528,7 +5602,7 @@ EAPI void evas_object_anti_alias_set (Evas_Object *ob
5528 * @return @c 1 if the object is to be anti_aliased. @c 0 otherwise. 5602 * @return @c 1 if the object is to be anti_aliased. @c 0 otherwise.
5529 * @ingroup Evas_Object_Group_Extras 5603 * @ingroup Evas_Object_Group_Extras
5530 */ 5604 */
5531EAPI Eina_Bool evas_object_anti_alias_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5605EAPI Eina_Bool evas_object_anti_alias_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5532 5606
5533 5607
5534/** 5608/**
@@ -5562,7 +5636,7 @@ EAPI void evas_object_scale_set (Evas_Object *ob
5562 * 5636 *
5563 * @see evas_object_scale_set() 5637 * @see evas_object_scale_set()
5564 */ 5638 */
5565EAPI double evas_object_scale_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5639EAPI double evas_object_scale_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5566 5640
5567 5641
5568/** 5642/**
@@ -5579,7 +5653,7 @@ EAPI void evas_object_render_op_set (Evas_Object *ob
5579 * @return one of the enumerated values in Evas_Render_Op. 5653 * @return one of the enumerated values in Evas_Render_Op.
5580 * @ingroup Evas_Object_Group_Extras 5654 * @ingroup Evas_Object_Group_Extras
5581 */ 5655 */
5582EAPI Evas_Render_Op evas_object_render_op_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5656EAPI Evas_Render_Op evas_object_render_op_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5583 5657
5584/** 5658/**
5585 * Set whether to use precise (usually expensive) point collision 5659 * Set whether to use precise (usually expensive) point collision
@@ -5621,7 +5695,7 @@ EAPI Evas_Render_Op evas_object_render_op_get (const Evas_Obje
5621 * 5695 *
5622 * @ingroup Evas_Object_Group_Extras 5696 * @ingroup Evas_Object_Group_Extras
5623 */ 5697 */
5624 EAPI Eina_Bool evas_object_precise_is_inside_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5698 EAPI Eina_Bool evas_object_precise_is_inside_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5625 5699
5626/** 5700/**
5627 * Set a hint flag on the given Evas object that it's used as a "static 5701 * Set a hint flag on the given Evas object that it's used as a "static
@@ -5653,7 +5727,7 @@ EAPI Evas_Render_Op evas_object_render_op_get (const Evas_Obje
5653 * 5727 *
5654 * @ingroup Evas_Object_Group_Extras 5728 * @ingroup Evas_Object_Group_Extras
5655 */ 5729 */
5656 EAPI Eina_Bool evas_object_static_clip_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5730 EAPI Eina_Bool evas_object_static_clip_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5657 5731
5658/** 5732/**
5659 * @} 5733 * @}
@@ -5710,7 +5784,7 @@ EAPI Evas_Render_Op evas_object_render_op_get (const Evas_Obje
5710 * 5784 *
5711 * @ingroup Evas_Object_Group_Find 5785 * @ingroup Evas_Object_Group_Find
5712 */ 5786 */
5713EAPI Evas_Object *evas_focus_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5787EAPI Evas_Object *evas_focus_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5714 5788
5715/** 5789/**
5716 * Retrieves the object on the given evas with the given name. 5790 * Retrieves the object on the given evas with the given name.
@@ -5718,9 +5792,36 @@ EAPI Evas_Object *evas_focus_get (const Evas *e) EINA_WA
5718 * @param name The given name. 5792 * @param name The given name.
5719 * @return If successful, the Evas object with the given name. Otherwise, 5793 * @return If successful, the Evas object with the given name. Otherwise,
5720 * @c NULL. 5794 * @c NULL.
5795 *
5796 * This looks for the evas object given a name by evas_object_name_set(). If
5797 * the name is not unique canvas-wide, then which one of the many objects
5798 * with that name is returned is undefined, so only use this if you can ensure
5799 * the object name is unique.
5800 *
5801 * @ingroup Evas_Object_Group_Find
5802 */
5803EAPI Evas_Object *evas_object_name_find (const Evas *e, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5804
5805/**
5806 * Retrieves the object from children of the given object with the given name.
5807 * @param obj The parent (smart) object whose children to search.
5808 * @param name The given name.
5809 * @param recurse Set to the number of child levels to recurse (0 == don't recurse, 1 == only look at the children of @p obj or their immediate children, but no further etc.).
5810 * @return If successful, the Evas object with the given name. Otherwise,
5811 * @c NULL.
5812 *
5813 * This looks for the evas object given a name by evas_object_name_set(), but
5814 * it ONLY looks at the children of the object *p obj, and will only recurse
5815 * into those children if @p recurse is greater than 0. If the name is not
5816 * unique within immediate children (or the whole child tree) then it is not
5817 * defined which child object will be returned. If @p recurse is set to -1 then
5818 * it will recurse without limit.
5819 *
5820 * @since 1.2
5821 *
5721 * @ingroup Evas_Object_Group_Find 5822 * @ingroup Evas_Object_Group_Find
5722 */ 5823 */
5723EAPI Evas_Object *evas_object_name_find (const Evas *e, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5824EAPI Evas_Object *evas_object_name_child_find (const Evas_Object *obj, const char *name, int recurse) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5724 5825
5725/** 5826/**
5726 * Retrieve the Evas object stacked at the top of a given position in 5827 * Retrieve the Evas object stacked at the top of a given position in
@@ -5745,7 +5846,7 @@ EAPI Evas_Object *evas_object_name_find (const Evas *e, const c
5745 * objects, acting only on the ones at the "top level", with regard to 5846 * objects, acting only on the ones at the "top level", with regard to
5746 * object parenting. 5847 * object parenting.
5747 */ 5848 */
5748EAPI Evas_Object *evas_object_top_at_xy_get (const Evas *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5849EAPI Evas_Object *evas_object_top_at_xy_get (const Evas *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5749 5850
5750/** 5851/**
5751 * Retrieve the Evas object stacked at the top at the position of the 5852 * Retrieve the Evas object stacked at the top at the position of the
@@ -5763,7 +5864,7 @@ EAPI Evas_Object *evas_object_top_at_xy_get (const Evas *e, Evas_Co
5763 * objects, acting only on the ones at the "top level", with regard to 5864 * objects, acting only on the ones at the "top level", with regard to
5764 * object parenting. 5865 * object parenting.
5765 */ 5866 */
5766EAPI Evas_Object *evas_object_top_at_pointer_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5867EAPI Evas_Object *evas_object_top_at_pointer_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5767 5868
5768/** 5869/**
5769 * Retrieve the Evas object stacked at the top of a given rectangular 5870 * Retrieve the Evas object stacked at the top of a given rectangular
@@ -5793,7 +5894,7 @@ EAPI Evas_Object *evas_object_top_at_pointer_get (const Evas *e) EINA_WA
5793 * objects, acting only on the ones at the "top level", with regard to 5894 * objects, acting only on the ones at the "top level", with regard to
5794 * object parenting. 5895 * object parenting.
5795 */ 5896 */
5796EAPI Evas_Object *evas_object_top_in_rectangle_get (const Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5897EAPI Evas_Object *evas_object_top_in_rectangle_get (const Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5797 5898
5798/** 5899/**
5799 * Retrieve a list of Evas objects lying over a given position in 5900 * Retrieve a list of Evas objects lying over a given position in
@@ -5818,8 +5919,8 @@ EAPI Evas_Object *evas_object_top_in_rectangle_get (const Evas *e, Evas_Co
5818 * objects, acting only on the ones at the "top level", with regard to 5919 * objects, acting only on the ones at the "top level", with regard to
5819 * object parenting. 5920 * object parenting.
5820 */ 5921 */
5821EAPI Eina_List *evas_objects_at_xy_get (const Evas *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5922EAPI Eina_List *evas_objects_at_xy_get (const Evas *e, Evas_Coord x, Evas_Coord y, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5822 EAPI Eina_List *evas_objects_in_rectangle_get (const Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5923 EAPI Eina_List *evas_objects_in_rectangle_get (const Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h, Eina_Bool include_pass_events_objects, Eina_Bool include_hidden_objects) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5823 5924
5824/** 5925/**
5825 * Get the lowest (stacked) Evas object on the canvas @p 5926 * Get the lowest (stacked) Evas object on the canvas @p
@@ -5840,7 +5941,7 @@ EAPI Eina_List *evas_objects_at_xy_get (const Evas *e, Evas_Co
5840 * objects, acting only on the ones at the "top level", with regard to 5941 * objects, acting only on the ones at the "top level", with regard to
5841 * object parenting. 5942 * object parenting.
5842 */ 5943 */
5843EAPI Evas_Object *evas_object_bottom_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5944EAPI Evas_Object *evas_object_bottom_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5844 5945
5845/** 5946/**
5846 * Get the highest (stacked) Evas object on the canvas @p 5947 * Get the highest (stacked) Evas object on the canvas @p
@@ -5862,7 +5963,7 @@ EAPI Evas_Object *evas_object_bottom_get (const Evas *e) EINA_WA
5862 * objects, acting only on the ones at the "top level", with regard to 5963 * objects, acting only on the ones at the "top level", with regard to
5863 * object parenting. 5964 * object parenting.
5864 */ 5965 */
5865EAPI Evas_Object *evas_object_top_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 5966EAPI Evas_Object *evas_object_top_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
5866 5967
5867/** 5968/**
5868 * @} 5969 * @}
@@ -6502,7 +6603,7 @@ EAPI void evas_object_image_border_center_fill_set (Evas_Obj
6502 * 6603 *
6503 * See @ref evas_object_image_fill_set() for more details. 6604 * See @ref evas_object_image_fill_set() for more details.
6504 */ 6605 */
6505EAPI Evas_Border_Fill_Mode evas_object_image_border_center_fill_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6606EAPI Evas_Border_Fill_Mode evas_object_image_border_center_fill_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6506 6607
6507/** 6608/**
6508 * Set whether the image object's fill property should track the 6609 * Set whether the image object's fill property should track the
@@ -6532,7 +6633,7 @@ EAPI void evas_object_image_filled_set (Evas_Obj
6532 * 6633 *
6533 * @see evas_object_image_filled_set() for more information 6634 * @see evas_object_image_filled_set() for more information
6534 */ 6635 */
6535EAPI Eina_Bool evas_object_image_filled_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6636EAPI Eina_Bool evas_object_image_filled_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6536 6637
6537/** 6638/**
6538 * Sets the scaling factor (multiplier) for the borders of an image 6639 * Sets the scaling factor (multiplier) for the borders of an image
@@ -6633,7 +6734,7 @@ EAPI void evas_object_image_fill_spread_set (Evas_Obj
6633 * @param obj The given evas image object. 6734 * @param obj The given evas image object.
6634 * @return The current spread mode of the image object. 6735 * @return The current spread mode of the image object.
6635 */ 6736 */
6636EAPI Evas_Fill_Spread evas_object_image_fill_spread_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6737EAPI Evas_Fill_Spread evas_object_image_fill_spread_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6637 6738
6638/** 6739/**
6639 * Sets the size of the given image object. 6740 * Sets the size of the given image object.
@@ -6670,7 +6771,7 @@ EAPI void evas_object_image_size_get (const Ev
6670 * The row stride is the number of bytes between the start of a row 6771 * The row stride is the number of bytes between the start of a row
6671 * and the start of the next row for image data. 6772 * and the start of the next row for image data.
6672 */ 6773 */
6673EAPI int evas_object_image_stride_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6774EAPI int evas_object_image_stride_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6674 6775
6675/** 6776/**
6676 * Retrieves a number representing any error that occurred during the 6777 * Retrieves a number representing any error that occurred during the
@@ -6681,7 +6782,7 @@ EAPI int evas_object_image_stride_get (const Ev
6681 * one of the #Evas_Load_Error values. #EVAS_LOAD_ERROR_NONE 6782 * one of the #Evas_Load_Error values. #EVAS_LOAD_ERROR_NONE
6682 * is returned if there was no error. 6783 * is returned if there was no error.
6683 */ 6784 */
6684EAPI Evas_Load_Error evas_object_image_load_error_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6785EAPI Evas_Load_Error evas_object_image_load_error_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6685 6786
6686/** 6787/**
6687 * Sets the raw image data of the given image object. 6788 * Sets the raw image data of the given image object.
@@ -6730,7 +6831,7 @@ EAPI void evas_object_image_data_set (Evas_Obj
6730 * 6831 *
6731 * @see evas_object_image_data_set() 6832 * @see evas_object_image_data_set()
6732 */ 6833 */
6733EAPI void *evas_object_image_data_get (const Evas_Object *obj, Eina_Bool for_writing) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6834EAPI void *evas_object_image_data_get (const Evas_Object *obj, Eina_Bool for_writing) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6734 6835
6735/** 6836/**
6736 * Converts the raw image data of the given image object to the 6837 * Converts the raw image data of the given image object to the
@@ -6748,7 +6849,7 @@ EAPI void *evas_object_image_data_get (const Ev
6748 * @param to_cspace The colorspace to which the image raw data will be converted. 6849 * @param to_cspace The colorspace to which the image raw data will be converted.
6749 * @return data A newly allocated data in the format specified by to_cspace. 6850 * @return data A newly allocated data in the format specified by to_cspace.
6750 */ 6851 */
6751EAPI void *evas_object_image_data_convert (Evas_Object *obj, Evas_Colorspace to_cspace) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6852EAPI void *evas_object_image_data_convert (Evas_Object *obj, Evas_Colorspace to_cspace) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6752 6853
6753/** 6854/**
6754 * Replaces the raw image data of the given image object. 6855 * Replaces the raw image data of the given image object.
@@ -6819,7 +6920,7 @@ EAPI void evas_object_image_alpha_set (Evas_Obj
6819 * 6920 *
6820 * See @ref evas_object_image_alpha_set() for more details. 6921 * See @ref evas_object_image_alpha_set() for more details.
6821 */ 6922 */
6822EAPI Eina_Bool evas_object_image_alpha_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6923EAPI Eina_Bool evas_object_image_alpha_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6823 6924
6824/** 6925/**
6825 * Sets whether to use high-quality image scaling algorithm on the 6926 * Sets whether to use high-quality image scaling algorithm on the
@@ -6849,7 +6950,7 @@ EAPI void evas_object_image_smooth_scale_set (Evas_Obj
6849 * 6950 *
6850 * See @ref evas_object_image_smooth_scale_set() for more details. 6951 * See @ref evas_object_image_smooth_scale_set() for more details.
6851 */ 6952 */
6852EAPI Eina_Bool evas_object_image_smooth_scale_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 6953EAPI Eina_Bool evas_object_image_smooth_scale_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6853 6954
6854/** 6955/**
6855 * Preload an image object's image data in the background 6956 * Preload an image object's image data in the background
@@ -6947,7 +7048,7 @@ EAPI void evas_object_image_pixels_dirty_set (Evas_Obj
6947 * @param obj The given image object. 7048 * @param obj The given image object.
6948 * @return Whether the image is dirty. 7049 * @return Whether the image is dirty.
6949 */ 7050 */
6950EAPI Eina_Bool evas_object_image_pixels_dirty_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7051EAPI Eina_Bool evas_object_image_pixels_dirty_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6951 7052
6952/** 7053/**
6953 * Set the DPI resolution of an image object's source image. 7054 * Set the DPI resolution of an image object's source image.
@@ -6972,7 +7073,7 @@ EAPI void evas_object_image_load_dpi_set (Evas_Obj
6972 * 7073 *
6973 * @see evas_object_image_load_dpi_set() for more details 7074 * @see evas_object_image_load_dpi_set() for more details
6974 */ 7075 */
6975EAPI double evas_object_image_load_dpi_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7076EAPI double evas_object_image_load_dpi_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
6976 7077
6977/** 7078/**
6978 * Set the size of a given image object's source image, when loading 7079 * Set the size of a given image object's source image, when loading
@@ -7026,7 +7127,7 @@ EAPI void evas_object_image_load_scale_down_set (Evas_Obj
7026 * 7127 *
7027 * @see evas_object_image_load_scale_down_set() for more details 7128 * @see evas_object_image_load_scale_down_set() for more details
7028 */ 7129 */
7029EAPI int evas_object_image_load_scale_down_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7130EAPI int evas_object_image_load_scale_down_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7030 7131
7031/** 7132/**
7032 * Inform a given image object to load a selective region of its 7133 * Inform a given image object to load a selective region of its
@@ -7103,7 +7204,18 @@ EAPI void evas_object_image_colorspace_set (Evas_Obj
7103 * This function returns the colorspace of given canvas image. 7204 * This function returns the colorspace of given canvas image.
7104 * 7205 *
7105 */ 7206 */
7106EAPI Evas_Colorspace evas_object_image_colorspace_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7207EAPI Evas_Colorspace evas_object_image_colorspace_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7208
7209/**
7210 * Get the support state of a given image
7211 *
7212 * @param obj The given image object pointer
7213 * @return The region support state
7214 * @since 1.2.0
7215 *
7216 * This function returns the state of the region support of given image
7217 */
7218EAPI Eina_Bool evas_object_image_region_support_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7107 7219
7108/** 7220/**
7109 * Set the native surface of a given image of the canvas 7221 * Set the native surface of a given image of the canvas
@@ -7125,7 +7237,7 @@ EAPI void evas_object_image_native_surface_set (Evas_Obj
7125 * This function returns the native surface of a given canvas image. 7237 * This function returns the native surface of a given canvas image.
7126 * 7238 *
7127 */ 7239 */
7128EAPI Evas_Native_Surface *evas_object_image_native_surface_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7240EAPI Evas_Native_Surface *evas_object_image_native_surface_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7129 7241
7130/** 7242/**
7131 * Set the video surface linked to a given image of the canvas 7243 * Set the video surface linked to a given image of the canvas
@@ -7149,7 +7261,7 @@ EAPI void evas_object_image_video_surface_set (Evas_Obj
7149 * This function returns the video surface linked to a given canvas image. 7261 * This function returns the video surface linked to a given canvas image.
7150 * 7262 *
7151 */ 7263 */
7152EAPI const Evas_Video_Surface *evas_object_image_video_surface_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7264EAPI const Evas_Video_Surface *evas_object_image_video_surface_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7153 7265
7154/** 7266/**
7155 * Set the scale hint of a given image of the canvas. 7267 * Set the scale hint of a given image of the canvas.
@@ -7178,7 +7290,7 @@ EAPI void evas_object_image_scale_hint_set (Evas_Obj
7178 * 7290 *
7179 * @see evas_object_image_scale_hint_set() for more details. 7291 * @see evas_object_image_scale_hint_set() for more details.
7180 */ 7292 */
7181EAPI Evas_Image_Scale_Hint evas_object_image_scale_hint_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7293EAPI Evas_Image_Scale_Hint evas_object_image_scale_hint_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7182 7294
7183/** 7295/**
7184 * Set the content hint setting of a given image object of the canvas. 7296 * Set the content hint setting of a given image object of the canvas.
@@ -7210,7 +7322,7 @@ EAPI void evas_object_image_content_hint_set (Evas_Obj
7210 * 7322 *
7211 * @see evas_object_image_content_hint_set() 7323 * @see evas_object_image_content_hint_set()
7212 */ 7324 */
7213EAPI Evas_Image_Content_Hint evas_object_image_content_hint_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7325EAPI Evas_Image_Content_Hint evas_object_image_content_hint_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7214 7326
7215 7327
7216/** 7328/**
@@ -7563,7 +7675,7 @@ EAPI void evas_object_text_font_source_set (Evas_Object *obj, cons
7563 * 7675 *
7564 * @see evas_object_text_font_get() for more details 7676 * @see evas_object_text_font_get() for more details
7565 */ 7677 */
7566EAPI const char *evas_object_text_font_source_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7678EAPI const char *evas_object_text_font_source_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7567 7679
7568/** 7680/**
7569 * Set the font family and size on a given text object. 7681 * Set the font family and size on a given text object.
@@ -7620,7 +7732,7 @@ EAPI void evas_object_text_text_set (Evas_Object *obj, cons
7620 * 7732 *
7621 * @see evas_object_text_text_set() 7733 * @see evas_object_text_text_set()
7622 */ 7734 */
7623EAPI const char *evas_object_text_text_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7735EAPI const char *evas_object_text_text_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7624 7736
7625/** 7737/**
7626 * @brief Sets the BiDi delimiters used in the textblock. 7738 * @brief Sets the BiDi delimiters used in the textblock.
@@ -7648,13 +7760,13 @@ EAPI void evas_object_text_bidi_delimiters_set(Evas_Object *obj, co
7648 */ 7760 */
7649EAPI const char *evas_object_text_bidi_delimiters_get(const Evas_Object *obj); 7761EAPI const char *evas_object_text_bidi_delimiters_get(const Evas_Object *obj);
7650 7762
7651 EAPI Evas_Coord evas_object_text_ascent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7763 EAPI Evas_Coord evas_object_text_ascent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7652 EAPI Evas_Coord evas_object_text_descent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7764 EAPI Evas_Coord evas_object_text_descent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7653 EAPI Evas_Coord evas_object_text_max_ascent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7765 EAPI Evas_Coord evas_object_text_max_ascent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7654 EAPI Evas_Coord evas_object_text_max_descent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7766 EAPI Evas_Coord evas_object_text_max_descent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7655 EAPI Evas_Coord evas_object_text_horiz_advance_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7767 EAPI Evas_Coord evas_object_text_horiz_advance_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7656 EAPI Evas_Coord evas_object_text_vert_advance_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7768 EAPI Evas_Coord evas_object_text_vert_advance_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7657 EAPI Evas_Coord evas_object_text_inset_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7769 EAPI Evas_Coord evas_object_text_inset_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7658 7770
7659/** 7771/**
7660 * Retrieve position and dimension information of a character within a text @c Evas_Object. 7772 * Retrieve position and dimension information of a character within a text @c Evas_Object.
@@ -7692,7 +7804,7 @@ EAPI int evas_object_text_last_up_to_pos (const Evas_Object *obj
7692 * 7804 *
7693 * @see evas_object_text_style_set() for more details. 7805 * @see evas_object_text_style_set() for more details.
7694 */ 7806 */
7695EAPI Evas_Text_Style_Type evas_object_text_style_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 7807EAPI Evas_Text_Style_Type evas_object_text_style_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
7696 7808
7697/** 7809/**
7698 * Sets the style to apply on the given text object. 7810 * Sets the style to apply on the given text object.
@@ -7742,7 +7854,7 @@ EAPI void evas_object_text_style_set (Evas_Object *obj, Evas
7742 * - #EVAS_TEXT_STYLE_SOFT_SHADOW 7854 * - #EVAS_TEXT_STYLE_SOFT_SHADOW
7743 * - #EVAS_TEXT_STYLE_FAR_SOFT_SHADOW 7855 * - #EVAS_TEXT_STYLE_FAR_SOFT_SHADOW
7744 * 7856 *
7745 * One can also change de direction the shadow grows to, with 7857 * One can also change the direction where the shadow grows to, with
7746 * evas_object_text_style_set(). 7858 * evas_object_text_style_set().
7747 * 7859 *
7748 * @see evas_object_text_shadow_color_get() 7860 * @see evas_object_text_shadow_color_get()
@@ -8081,7 +8193,7 @@ EAPI Evas_Object *evas_object_textblock_add(Evas *e) EINA_WARN_U
8081 * @param escape the string to be escaped 8193 * @param escape the string to be escaped
8082 * @return the unescaped version of escape 8194 * @return the unescaped version of escape
8083 */ 8195 */
8084EAPI const char *evas_textblock_escape_string_get(const char *escape) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8196EAPI const char *evas_textblock_escape_string_get(const char *escape) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8085 8197
8086/** 8198/**
8087 * Returns the escaped version of the string. 8199 * Returns the escaped version of the string.
@@ -8089,7 +8201,7 @@ EAPI const char *evas_textblock_escape_string_get(const char *e
8089 * @param len_ret the len of the part of the string that was used. 8201 * @param len_ret the len of the part of the string that was used.
8090 * @return the escaped string. 8202 * @return the escaped string.
8091 */ 8203 */
8092EAPI const char *evas_textblock_string_escape_get(const char *string, int *len_ret) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8204EAPI const char *evas_textblock_string_escape_get(const char *string, int *len_ret) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8093 8205
8094/** 8206/**
8095 * Return the unescaped version of the string between start and end. 8207 * Return the unescaped version of the string between start and end.
@@ -8098,8 +8210,35 @@ EAPI const char *evas_textblock_string_escape_get(const char *s
8098 * @param escape_end the end of the string. 8210 * @param escape_end the end of the string.
8099 * @return the unescaped version of the range 8211 * @return the unescaped version of the range
8100 */ 8212 */
8101EAPI const char *evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 8213EAPI const char *evas_textblock_escape_string_range_get(const char *escape_start, const char *escape_end) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
8102 8214
8215/**
8216 * Return the plain version of the markup.
8217 *
8218 * Works as if you set the markup to a textblock and then retrieve the plain
8219 * version of the text. i.e: <br> and <\n> will be replaced with \n, &...; with
8220 * the actual char and etc.
8221 *
8222 * @param obj the textblock object to work with. (if NULL, tries the default)
8223 * @param text the markup text (if NULL, return NULL)
8224 * @return an allocated plain text version of the markup
8225 * @since 1.2.0
8226 */
8227EAPI char *evas_textblock_text_markup_to_utf8(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
8228
8229/**
8230 * Return the markup version of the plain text.
8231 *
8232 * Replaces \n -> <br/> \t -> <tab/> and etc. Generally needed before you pass
8233 * plain text to be set in a textblock.
8234 *
8235 * @param obj the textblock object to work with (if NULL, it just does the
8236 * default behaviour, i.e with no extra object information).
8237 * @param text the markup text (if NULL, return NULL)
8238 * @return an allocated plain text version of the markup
8239 * @since 1.2.0
8240 */
8241EAPI char *evas_textblock_text_utf8_to_markup(const Evas_Object *obj, const char *text) EINA_WARN_UNUSED_RESULT EINA_MALLOC;
8103 8242
8104/** 8243/**
8105 * Creates a new textblock style. 8244 * Creates a new textblock style.
@@ -8128,7 +8267,7 @@ EAPI void evas_textblock_style_set(Evas_Textblock_Style
8128 * @param ts the style to get it's text. 8267 * @param ts the style to get it's text.
8129 * @return the text of the style or null on error. 8268 * @return the text of the style or null on error.
8130 */ 8269 */
8131EAPI const char *evas_textblock_style_get(const Evas_Textblock_Style *ts) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8270EAPI const char *evas_textblock_style_get(const Evas_Textblock_Style *ts) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8132 8271
8133 8272
8134/** 8273/**
@@ -8144,7 +8283,7 @@ EAPI void evas_object_textblock_style_set(Evas_Object *o
8144 * @param obj the object to get the style from. 8283 * @param obj the object to get the style from.
8145 * @return the style of the object. 8284 * @return the style of the object.
8146 */ 8285 */
8147EAPI const Evas_Textblock_Style *evas_object_textblock_style_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8286EAPI const Evas_Textblock_Style *evas_object_textblock_style_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8148 8287
8149/** 8288/**
8150 * @brief Set the "replacement character" to use for the given textblock object. 8289 * @brief Set the "replacement character" to use for the given textblock object.
@@ -8161,7 +8300,7 @@ EAPI void evas_object_textblock_replace_char_set(Evas_Ob
8161 * @param obj The given textblock object 8300 * @param obj The given textblock object
8162 * @return replacement character or @c NULL 8301 * @return replacement character or @c NULL
8163 */ 8302 */
8164EAPI const char *evas_object_textblock_replace_char_get(Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8303EAPI const char *evas_object_textblock_replace_char_get(Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8165 8304
8166/** 8305/**
8167 * @brief Sets the vertical alignment of text within the textblock object 8306 * @brief Sets the vertical alignment of text within the textblock object
@@ -8230,7 +8369,7 @@ EAPI void evas_object_textblock_legacy_newline_set(Evas_
8230 * @return EINA_TRUE if in legacy mode, EINA_FALSE otherwise. 8369 * @return EINA_TRUE if in legacy mode, EINA_FALSE otherwise.
8231 * @since 1.1.0 8370 * @since 1.1.0
8232 */ 8371 */
8233EAPI Eina_Bool evas_object_textblock_legacy_newline_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8372EAPI Eina_Bool evas_object_textblock_legacy_newline_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8234 8373
8235 8374
8236/** 8375/**
@@ -8270,7 +8409,7 @@ EAPI const char *evas_object_textblock_text_markup_get(const Ev
8270 * @param obj the object. 8409 * @param obj the object.
8271 * @return the obj's main cursor. 8410 * @return the obj's main cursor.
8272 */ 8411 */
8273EAPI Evas_Textblock_Cursor *evas_object_textblock_cursor_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8412EAPI Evas_Textblock_Cursor *evas_object_textblock_cursor_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8274 8413
8275/** 8414/**
8276 * Create a new cursor, associate it to the obj and init it to point 8415 * Create a new cursor, associate it to the obj and init it to point
@@ -8421,7 +8560,7 @@ EAPI void evas_textblock_cursor_at_format_set(Evas_Textb
8421 * @return #EINA_TRUE if the cursor points to a visible format, #EINA_FALSE otherwise. 8560 * @return #EINA_TRUE if the cursor points to a visible format, #EINA_FALSE otherwise.
8422 * @see evas_textblock_cursor_format_get() 8561 * @see evas_textblock_cursor_format_get()
8423 */ 8562 */
8424EAPI Eina_Bool evas_textblock_cursor_format_is_visible_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8563EAPI Eina_Bool evas_textblock_cursor_format_is_visible_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8425 8564
8426/** 8565/**
8427 * Advances to the next format node 8566 * Advances to the next format node
@@ -8464,6 +8603,24 @@ EAPI Eina_Bool evas_textblock_cursor_char_next(Evas_Textblock
8464EAPI Eina_Bool evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1); 8603EAPI Eina_Bool evas_textblock_cursor_char_prev(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
8465 8604
8466/** 8605/**
8606 * Moves the cursor to the start of the word under the cursor.
8607 *
8608 * @param cur the cursor to move.
8609 * @return #EINA_TRUE on success #EINA_FALSE otherwise.
8610 * @since 1.2.0
8611 */
8612EAPI Eina_Bool evas_textblock_cursor_word_start(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
8613
8614/**
8615 * Moves the cursor to the end of the word under the cursor.
8616 *
8617 * @param cur the cursor to move.
8618 * @return #EINA_TRUE on success #EINA_FALSE otherwise.
8619 * @since 1.2.0
8620 */
8621EAPI Eina_Bool evas_textblock_cursor_word_end(Evas_Textblock_Cursor *cur) EINA_ARG_NONNULL(1);
8622
8623/**
8467 * Go to the first char in the node the cursor is pointing on. 8624 * Go to the first char in the node the cursor is pointing on.
8468 * 8625 *
8469 * @param cur the cursor to update. 8626 * @param cur the cursor to update.
@@ -8501,7 +8658,7 @@ EAPI void evas_textblock_cursor_line_char_last(Evas_Text
8501 * @param cur the cursor to take the position from. 8658 * @param cur the cursor to take the position from.
8502 * @return the position or -1 on error 8659 * @return the position or -1 on error
8503 */ 8660 */
8504EAPI int evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8661EAPI int evas_textblock_cursor_pos_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8505 8662
8506/** 8663/**
8507 * Set the cursor pos. 8664 * Set the cursor pos.
@@ -8527,7 +8684,7 @@ EAPI Eina_Bool evas_textblock_cursor_line_set(Evas_Textblock_
8527 * @param cur2 the second cursor. 8684 * @param cur2 the second cursor.
8528 * @return -1 if cur1 < cur2, 0 if cur1 == cur2 and 1 otherwise. 8685 * @return -1 if cur1 < cur2, 0 if cur1 == cur2 and 1 otherwise.
8529 */ 8686 */
8530EAPI int evas_textblock_cursor_compare(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 8687EAPI int evas_textblock_cursor_compare(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
8531 8688
8532/** 8689/**
8533 * Make cur_dest point to the same place as cur. Does not work if they don't 8690 * Make cur_dest point to the same place as cur. Does not work if they don't
@@ -8630,7 +8787,7 @@ EAPI void evas_textblock_cursor_range_delete(Evas_Textbl
8630 * @param cur the cursor pointing to the paragraph. 8787 * @param cur the cursor pointing to the paragraph.
8631 * @return the text on success, NULL otherwise. 8788 * @return the text on success, NULL otherwise.
8632 */ 8789 */
8633EAPI const char *evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8790EAPI const char *evas_textblock_cursor_paragraph_text_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8634 8791
8635/** 8792/**
8636 * Return the length of the paragraph, cheaper the eina_unicode_strlen() 8793 * Return the length of the paragraph, cheaper the eina_unicode_strlen()
@@ -8638,7 +8795,7 @@ EAPI const char *evas_textblock_cursor_paragraph_text_get(const
8638 * @param cur the position of the paragraph. 8795 * @param cur the position of the paragraph.
8639 * @return the length of the paragraph on success, -1 otehrwise. 8796 * @return the length of the paragraph on success, -1 otehrwise.
8640 */ 8797 */
8641EAPI int evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8798EAPI int evas_textblock_cursor_paragraph_text_length_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8642 8799
8643/** 8800/**
8644 * Return the currently visible range. 8801 * Return the currently visible range.
@@ -8648,7 +8805,7 @@ EAPI int evas_textblock_cursor_paragraph_text_length_ge
8648 * @return EINA_TRUE on success. EINA_FALSE otherwise. 8805 * @return EINA_TRUE on success. EINA_FALSE otherwise.
8649 * @since 1.1.0 8806 * @since 1.1.0
8650 */ 8807 */
8651Eina_Bool evas_textblock_cursor_visible_range_get(Evas_Textblock_Cursor *start, Evas_Textblock_Cursor *end) EINA_ARG_NONNULL(1, 2); 8808EAPI Eina_Bool evas_textblock_cursor_visible_range_get(Evas_Textblock_Cursor *start, Evas_Textblock_Cursor *end) EINA_ARG_NONNULL(1, 2);
8652 8809
8653/** 8810/**
8654 * Return the format nodes in the range between cur1 and cur2. 8811 * Return the format nodes in the range between cur1 and cur2.
@@ -8658,7 +8815,7 @@ Eina_Bool evas_textblock_cursor_visible_range_get(Evas_T
8658 * @return the foramt nodes in the range. You have to free it. 8815 * @return the foramt nodes in the range. You have to free it.
8659 * @since 1.1.0 8816 * @since 1.1.0
8660 */ 8817 */
8661EAPI Eina_List * evas_textblock_cursor_range_formats_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 8818EAPI Eina_List * evas_textblock_cursor_range_formats_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
8662 8819
8663/** 8820/**
8664 * Return the text in the range between cur1 and cur2 8821 * Return the text in the range between cur1 and cur2
@@ -8669,13 +8826,15 @@ EAPI Eina_List * evas_textblock_cursor_range_formats_get(const E
8669 * @return the text in the range 8826 * @return the text in the range
8670 * @see elm_entry_markup_to_utf8() 8827 * @see elm_entry_markup_to_utf8()
8671 */ 8828 */
8672EAPI char *evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 8829EAPI char *evas_textblock_cursor_range_text_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2, Evas_Textblock_Text_Type format) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
8673 8830
8674/** 8831/**
8675 * Return the content of the cursor. 8832 * Return the content of the cursor.
8676 * 8833 *
8834 * Free the returned string pointer when done (if it is not NULL).
8835 *
8677 * @param cur the cursor 8836 * @param cur the cursor
8678 * @return the text in the range 8837 * @return the text in the range, terminated by a nul byte (may be utf8).
8679 */ 8838 */
8680EAPI char *evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC; 8839EAPI char *evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_MALLOC;
8681 8840
@@ -8766,7 +8925,7 @@ EAPI int evas_textblock_cursor_line_coord_set(Evas_Text
8766 * @param cur2 other side of the range. 8925 * @param cur2 other side of the range.
8767 * @return a list of Rectangles representing the geometry of the range. 8926 * @return a list of Rectangles representing the geometry of the range.
8768 */ 8927 */
8769EAPI Eina_List *evas_textblock_cursor_range_geometry_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 8928EAPI Eina_List *evas_textblock_cursor_range_geometry_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *cur2) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
8770 EAPI Eina_Bool evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1); 8929 EAPI Eina_Bool evas_textblock_cursor_format_item_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord *cx, Evas_Coord *cy, Evas_Coord *cw, Evas_Coord *ch) EINA_ARG_NONNULL(1);
8771 8930
8772 8931
@@ -8776,7 +8935,7 @@ EAPI Eina_List *evas_textblock_cursor_range_geometry_get(const
8776 * @param cur the cursor to check. 8935 * @param cur the cursor to check.
8777 * @return #EINA_TRUE if true, #EINA_FALSE otherwise. 8936 * @return #EINA_TRUE if true, #EINA_FALSE otherwise.
8778 */ 8937 */
8779EAPI Eina_Bool evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 8938EAPI Eina_Bool evas_textblock_cursor_eol_get(const Evas_Textblock_Cursor *cur) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
8780 8939
8781 8940
8782/** 8941/**
@@ -8931,6 +9090,12 @@ EAPI void evas_object_polygon_points_clear (Evas_Object *obj) EINA
8931 * @} 9090 * @}
8932 */ 9091 */
8933 9092
9093/* @since 1.2.0 */
9094EAPI void evas_object_is_frame_object_set(Evas_Object *obj, Eina_Bool is_frame);
9095
9096/* @since 1.2.0 */
9097EAPI Eina_Bool evas_object_is_frame_object_get(Evas_Object *obj);
9098
8934/** 9099/**
8935 * @defgroup Evas_Smart_Group Smart Functions 9100 * @defgroup Evas_Smart_Group Smart Functions
8936 * 9101 *
@@ -9273,7 +9438,7 @@ EAPI Evas_Smart *evas_smart_class_new (const
9273 * @param s a valid #Evas_Smart pointer 9438 * @param s a valid #Evas_Smart pointer
9274 * @return the #Evas_Smart_Class in it 9439 * @return the #Evas_Smart_Class in it
9275 */ 9440 */
9276EAPI const Evas_Smart_Class *evas_smart_class_get (const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 9441EAPI const Evas_Smart_Class *evas_smart_class_get (const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9277 9442
9278 9443
9279/** 9444/**
@@ -9284,7 +9449,7 @@ EAPI const Evas_Smart_Class *evas_smart_class_get (const
9284 * This data pointer is set as the data field in the #Evas_Smart_Class 9449 * This data pointer is set as the data field in the #Evas_Smart_Class
9285 * passed in to evas_smart_class_new(). 9450 * passed in to evas_smart_class_new().
9286 */ 9451 */
9287EAPI void *evas_smart_data_get (const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 9452EAPI void *evas_smart_data_get (const Evas_Smart *s) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9288 9453
9289/** 9454/**
9290 * Get the smart callbacks known by this #Evas_Smart handle's smart 9455 * Get the smart callbacks known by this #Evas_Smart handle's smart
@@ -9338,7 +9503,7 @@ EAPI const Evas_Smart_Cb_Description **evas_smart_callbacks_descriptions_get(con
9338 * 9503 *
9339 * @see evas_smart_callbacks_descriptions_get() 9504 * @see evas_smart_callbacks_descriptions_get()
9340 */ 9505 */
9341EAPI const Evas_Smart_Cb_Description *evas_smart_callback_description_find(const Evas_Smart *s, const char *name) EINA_ARG_NONNULL(1, 2) EINA_PURE; 9506EAPI const Evas_Smart_Cb_Description *evas_smart_callback_description_find(const Evas_Smart *s, const char *name) EINA_ARG_NONNULL(1, 2);
9342 9507
9343 9508
9344/** 9509/**
@@ -9507,7 +9672,7 @@ EAPI void evas_object_smart_member_del (Evas_Object *obj) EINA
9507 * @see evas_object_smart_member_add() 9672 * @see evas_object_smart_member_add()
9508 * @see evas_object_smart_member_del() 9673 * @see evas_object_smart_member_del()
9509*/ 9674*/
9510EAPI Eina_List *evas_object_smart_members_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 9675EAPI Eina_List *evas_object_smart_members_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9511 9676
9512/** 9677/**
9513 * Gets the parent smart object of a given Evas object, if it has one. 9678 * Gets the parent smart object of a given Evas object, if it has one.
@@ -9519,7 +9684,7 @@ EAPI Eina_List *evas_object_smart_members_get (const Evas_Object *obj
9519 * 9684 *
9520 * @ingroup Evas_Smart_Object_Group 9685 * @ingroup Evas_Smart_Object_Group
9521 */ 9686 */
9522EAPI Evas_Object *evas_object_smart_parent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 9687EAPI Evas_Object *evas_object_smart_parent_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9523 9688
9524/** 9689/**
9525 * Checks whether a given smart object or any of its smart object 9690 * Checks whether a given smart object or any of its smart object
@@ -9546,7 +9711,7 @@ EAPI Evas_Object *evas_object_smart_parent_get (const Evas_Object *obj
9546 * 9711 *
9547 * @ingroup Evas_Smart_Object_Group 9712 * @ingroup Evas_Smart_Object_Group
9548 */ 9713 */
9549EAPI Eina_Bool evas_object_smart_type_check (const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 9714EAPI Eina_Bool evas_object_smart_type_check (const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
9550 9715
9551/** 9716/**
9552 * Checks whether a given smart object or any of its smart object 9717 * Checks whether a given smart object or any of its smart object
@@ -9561,7 +9726,7 @@ EAPI Eina_Bool evas_object_smart_type_check (const Evas_Object *obj
9561 * 9726 *
9562 * @ingroup Evas_Smart_Object_Group 9727 * @ingroup Evas_Smart_Object_Group
9563 */ 9728 */
9564EAPI Eina_Bool evas_object_smart_type_check_ptr (const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 9729EAPI Eina_Bool evas_object_smart_type_check_ptr (const Evas_Object *obj, const char *type) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
9565 9730
9566/** 9731/**
9567 * Get the #Evas_Smart from which @p obj smart object was created. 9732 * Get the #Evas_Smart from which @p obj smart object was created.
@@ -9571,7 +9736,7 @@ EAPI Eina_Bool evas_object_smart_type_check_ptr (const Evas_Object *obj
9571 * 9736 *
9572 * @ingroup Evas_Smart_Object_Group 9737 * @ingroup Evas_Smart_Object_Group
9573 */ 9738 */
9574EAPI Evas_Smart *evas_object_smart_smart_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 9739EAPI Evas_Smart *evas_object_smart_smart_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9575 9740
9576/** 9741/**
9577 * Retrieve user data stored on a given smart object. 9742 * Retrieve user data stored on a given smart object.
@@ -9585,7 +9750,7 @@ EAPI Evas_Smart *evas_object_smart_smart_get (const Evas_Object *obj
9585 * 9750 *
9586 * @ingroup Evas_Smart_Object_Group 9751 * @ingroup Evas_Smart_Object_Group
9587 */ 9752 */
9588EAPI void *evas_object_smart_data_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 9753EAPI void *evas_object_smart_data_get (const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9589 9754
9590/** 9755/**
9591 * Store a pointer to user data for a given smart object. 9756 * Store a pointer to user data for a given smart object.
@@ -9683,6 +9848,34 @@ EAPI void evas_object_smart_callback_priority_add(Evas_Object *obj,
9683EAPI void *evas_object_smart_callback_del (Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3); 9848EAPI void *evas_object_smart_callback_del (Evas_Object *obj, const char *event, Evas_Smart_Cb func) EINA_ARG_NONNULL(1, 2, 3);
9684 9849
9685/** 9850/**
9851 * Delete (unregister) a callback function from the smart event
9852 * specified by @p event on the smart object @p obj.
9853 *
9854 * @param obj a smart object
9855 * @param event the event's name string
9856 * @param func the callback function
9857 * @param data the data pointer that was passed to the callback
9858 * @return the data pointer
9859 *
9860 * This function removes <b>the first</b> added smart callback on the
9861 * object @p obj matching the event name @p event, the registered
9862 * function pointer @p func and the callback data pointer @p data. If
9863 * the removal is successful it will also return the data pointer that
9864 * was passed to evas_object_smart_callback_add() (that will be the same
9865 * as the parameter) when the callback(s) was(were) added to the canvas.
9866 * If not successful @c NULL will be returned. A common use would be to
9867 * remove an exact match of a callback
9868 *
9869 * @see evas_object_smart_callback_add() for more details.
9870 * @since 1.2.0
9871 * @ingroup Evas_Smart_Object_Group
9872 *
9873 * @note To delete all smart event callbacks which match @p type and @p func,
9874 * use evas_object_smart_callback_del().
9875 */
9876EAPI void *evas_object_smart_callback_del_full(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1, 2, 3);
9877
9878/**
9686 * Call a given smart callback on the smart object @p obj. 9879 * Call a given smart callback on the smart object @p obj.
9687 * 9880 *
9688 * @param obj the smart object 9881 * @param obj the smart object
@@ -9856,7 +10049,7 @@ EAPI void evas_object_smart_need_recalculate_set(Evas_Object *obj,
9856 * 10049 *
9857 * @ingroup Evas_Smart_Object_Group 10050 * @ingroup Evas_Smart_Object_Group
9858 */ 10051 */
9859EAPI Eina_Bool evas_object_smart_need_recalculate_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 10052EAPI Eina_Bool evas_object_smart_need_recalculate_get(const Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9860 10053
9861/** 10054/**
9862 * Call the @b calculate() smart function immediataly on a given smart 10055 * Call the @b calculate() smart function immediataly on a given smart
@@ -9977,7 +10170,7 @@ EAPI void evas_object_smart_move_children_relative(Evas_Objec
9977 * 10170 *
9978 * @see evas_object_smart_clipped_smart_add() 10171 * @see evas_object_smart_clipped_smart_add()
9979 */ 10172 */
9980EAPI Evas_Object *evas_object_smart_clipped_clipper_get (Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 10173EAPI Evas_Object *evas_object_smart_clipped_clipper_get (Evas_Object *obj) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
9981 10174
9982/** 10175/**
9983 * Set a given smart class' callbacks so it implements the <b>clipped smart 10176 * Set a given smart class' callbacks so it implements the <b>clipped smart
@@ -10885,7 +11078,7 @@ EAPI Eina_List *evas_object_box_children_get
10885 * _Evas_Object_Box_Api::property_name_get smart class function of the 11078 * _Evas_Object_Box_Api::property_name_get smart class function of the
10886 * box, which is originally set to @c NULL. 11079 * box, which is originally set to @c NULL.
10887 */ 11080 */
10888EAPI const char *evas_object_box_option_property_name_get (Evas_Object *o, int property) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 11081EAPI const char *evas_object_box_option_property_name_get (Evas_Object *o, int property) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
10889 11082
10890/** 11083/**
10891 * Get the numerical identifier of the property of the child elements 11084 * Get the numerical identifier of the property of the child elements
@@ -10904,7 +11097,7 @@ EAPI const char *evas_object_box_option_property_name_get
10904 * _Evas_Object_Box_Api::property_id_get smart class function of the 11097 * _Evas_Object_Box_Api::property_id_get smart class function of the
10905 * box, which is originally set to @c NULL. 11098 * box, which is originally set to @c NULL.
10906 */ 11099 */
10907EAPI int evas_object_box_option_property_id_get (Evas_Object *o, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 11100EAPI int evas_object_box_option_property_id_get (Evas_Object *o, const char *name) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
10908 11101
10909/** 11102/**
10910 * Set a property value (by its given numerical identifier), on a 11103 * Set a property value (by its given numerical identifier), on a
@@ -11081,7 +11274,7 @@ EAPI void evas_object_table_homogeneous_set (Evas
11081 * 11274 *
11082 * @see evas_object_table_homogeneous_set() 11275 * @see evas_object_table_homogeneous_set()
11083 */ 11276 */
11084EAPI Evas_Object_Table_Homogeneous_Mode evas_object_table_homogeneous_get (const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 11277EAPI Evas_Object_Table_Homogeneous_Mode evas_object_table_homogeneous_get (const Evas_Object *o) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
11085 11278
11086/** 11279/**
11087 * Set padding between cells. 11280 * Set padding between cells.
@@ -11455,7 +11648,7 @@ EAPI Eina_List *evas_object_grid_children_get (const
11455 * @return @c EINA_TRUE if it wants, @c EINA_FALSE otherwise. 11648 * @return @c EINA_TRUE if it wants, @c EINA_FALSE otherwise.
11456 * @ingroup Evas_Cserve 11649 * @ingroup Evas_Cserve
11457 */ 11650 */
11458EAPI Eina_Bool evas_cserve_want_get (void) EINA_WARN_UNUSED_RESULT EINA_PURE; 11651EAPI Eina_Bool evas_cserve_want_get (void) EINA_WARN_UNUSED_RESULT;
11459 11652
11460/** 11653/**
11461 * Retrieves if the system is connected to the server used to share 11654 * Retrieves if the system is connected to the server used to share
@@ -11482,7 +11675,7 @@ EAPI Eina_Bool evas_cserve_stats_get (Evas_Cserve_Stats
11482 * 11675 *
11483 * @param cache A handle to the given images cache. 11676 * @param cache A handle to the given images cache.
11484 */ 11677 */
11485EAPI void evas_cserve_image_cache_contents_clean (Evas_Cserve_Image_Cache *cache) EINA_PURE; 11678EAPI void evas_cserve_image_cache_contents_clean (Evas_Cserve_Image_Cache *cache);
11486 11679
11487/** 11680/**
11488 * Retrieves the current configuration of the Evas image caching 11681 * Retrieves the current configuration of the Evas image caching
@@ -11501,7 +11694,7 @@ EAPI void evas_cserve_image_cache_contents_clean (Evas_Cserve_Image
11501 * 11694 *
11502 * @ingroup Evas_Cserve 11695 * @ingroup Evas_Cserve
11503 */ 11696 */
11504EAPI Eina_Bool evas_cserve_config_get (Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT EINA_PURE; 11697EAPI Eina_Bool evas_cserve_config_get (Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT;
11505 11698
11506/** 11699/**
11507 * Changes the configurations of the Evas image caching server. 11700 * Changes the configurations of the Evas image caching server.
@@ -11515,7 +11708,7 @@ EAPI Eina_Bool evas_cserve_config_get (Evas_Cserve_Confi
11515 * 11708 *
11516 * @ingroup Evas_Cserve 11709 * @ingroup Evas_Cserve
11517 */ 11710 */
11518EAPI Eina_Bool evas_cserve_config_set (const Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT EINA_PURE; 11711EAPI Eina_Bool evas_cserve_config_set (const Evas_Cserve_Config *config) EINA_WARN_UNUSED_RESULT;
11519 11712
11520/** 11713/**
11521 * Force the system to disconnect from the bitmap caching server. 11714 * Force the system to disconnect from the bitmap caching server.
@@ -11711,7 +11904,7 @@ EAPI int evas_string_char_prev_get (const char *str, int p
11711 * @return The length in characters (not bytes) 11904 * @return The length in characters (not bytes)
11712 * @ingroup Evas_Utils 11905 * @ingroup Evas_Utils
11713 */ 11906 */
11714EAPI int evas_string_char_len_get (const char *str) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 11907EAPI int evas_string_char_len_get (const char *str) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
11715 11908
11716/** 11909/**
11717 * @defgroup Evas_Keys Key Input Functions 11910 * @defgroup Evas_Keys Key Input Functions
@@ -11769,7 +11962,7 @@ EAPI int evas_string_char_len_get (const char *str) EINA_
11769 * @return An ::Evas_Modifier handle to query Evas' keys subsystem 11962 * @return An ::Evas_Modifier handle to query Evas' keys subsystem
11770 * with evas_key_modifier_is_set(), or @c NULL on error. 11963 * with evas_key_modifier_is_set(), or @c NULL on error.
11771 */ 11964 */
11772EAPI const Evas_Modifier *evas_key_modifier_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 11965EAPI const Evas_Modifier *evas_key_modifier_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
11773 11966
11774/** 11967/**
11775 * Returns a handle to the list of lock keys registered in the canvas 11968 * Returns a handle to the list of lock keys registered in the canvas
@@ -11787,7 +11980,7 @@ EAPI const Evas_Modifier *evas_key_modifier_get (const Evas *e) EINA_WA
11787 * @return An ::Evas_Lock handle to query Evas' keys subsystem with 11980 * @return An ::Evas_Lock handle to query Evas' keys subsystem with
11788 * evas_key_lock_is_set(), or @c NULL on error. 11981 * evas_key_lock_is_set(), or @c NULL on error.
11789 */ 11982 */
11790EAPI const Evas_Lock *evas_key_lock_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1) EINA_PURE; 11983EAPI const Evas_Lock *evas_key_lock_get (const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
11791 11984
11792 11985
11793/** 11986/**
@@ -11808,7 +12001,7 @@ EAPI const Evas_Lock *evas_key_lock_get (const Evas *e) EINA_WA
11808 * @see evas_key_modifier_on 12001 * @see evas_key_modifier_on
11809 * @see evas_key_modifier_off 12002 * @see evas_key_modifier_off
11810 */ 12003 */
11811EAPI Eina_Bool evas_key_modifier_is_set (const Evas_Modifier *m, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 12004EAPI Eina_Bool evas_key_modifier_is_set (const Evas_Modifier *m, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
11812 12005
11813 12006
11814/** 12007/**
@@ -11828,7 +12021,7 @@ EAPI Eina_Bool evas_key_modifier_is_set (const Evas_Modifier *m
11828 * @see evas_key_lock_on 12021 * @see evas_key_lock_on
11829 * @see evas_key_lock_off 12022 * @see evas_key_lock_off
11830 */ 12023 */
11831EAPI Eina_Bool evas_key_lock_is_set (const Evas_Lock *l, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 12024EAPI Eina_Bool evas_key_lock_is_set (const Evas_Lock *l, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
11832 12025
11833 12026
11834/** 12027/**
@@ -12012,7 +12205,7 @@ EAPI void evas_key_lock_off (Evas *e, const char *k
12012 * @see evas_object_key_grab 12205 * @see evas_object_key_grab
12013 * @see evas_object_key_ungrab 12206 * @see evas_object_key_ungrab
12014 */ 12207 */
12015EAPI Evas_Modifier_Mask evas_key_modifier_mask_get (const Evas *e, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2) EINA_PURE; 12208EAPI Evas_Modifier_Mask evas_key_modifier_mask_get (const Evas *e, const char *keyname) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1, 2);
12016 12209
12017 12210
12018/** 12211/**
diff --git a/libraries/evas/src/lib/Evas_GL.h b/libraries/evas/src/lib/Evas_GL.h
index 04bedea..fdfbaad 100644
--- a/libraries/evas/src/lib/Evas_GL.h
+++ b/libraries/evas/src/lib/Evas_GL.h
@@ -28,7 +28,7 @@ typedef enum _Evas_GL_Depth_Bits
28 EVAS_GL_DEPTH_BIT_8 = 1, 28 EVAS_GL_DEPTH_BIT_8 = 1,
29 EVAS_GL_DEPTH_BIT_16 = 2, 29 EVAS_GL_DEPTH_BIT_16 = 2,
30 EVAS_GL_DEPTH_BIT_24 = 3, 30 EVAS_GL_DEPTH_BIT_24 = 3,
31 EVAS_GL_DEPTH_BIT_32 = 4, 31 EVAS_GL_DEPTH_BIT_32 = 4
32} Evas_GL_Depth_Bits; 32} Evas_GL_Depth_Bits;
33 33
34typedef enum _Evas_GL_Stencil_Bits 34typedef enum _Evas_GL_Stencil_Bits
@@ -38,14 +38,21 @@ typedef enum _Evas_GL_Stencil_Bits
38 EVAS_GL_STENCIL_BIT_2 = 2, 38 EVAS_GL_STENCIL_BIT_2 = 2,
39 EVAS_GL_STENCIL_BIT_4 = 3, 39 EVAS_GL_STENCIL_BIT_4 = 3,
40 EVAS_GL_STENCIL_BIT_8 = 4, 40 EVAS_GL_STENCIL_BIT_8 = 4,
41 EVAS_GL_STENCIL_BIT_16 = 5, 41 EVAS_GL_STENCIL_BIT_16 = 5
42} Evas_GL_Stencil_Bits; 42} Evas_GL_Stencil_Bits;
43 43
44typedef enum _Evas_GL_Options_Bits
45{
46 EVAS_GL_OPTIONS_NONE = 0,
47 EVAS_GL_OPTIONS_DIRECT = (1<<0)
48} Evas_GL_Options_Bits;
49
44struct _Evas_GL_Config 50struct _Evas_GL_Config
45{ 51{
46 Evas_GL_Color_Format color_format; 52 Evas_GL_Color_Format color_format;
47 Evas_GL_Depth_Bits depth_bits; 53 Evas_GL_Depth_Bits depth_bits;
48 Evas_GL_Stencil_Bits stencil_bits; 54 Evas_GL_Stencil_Bits stencil_bits;
55 Evas_GL_Options_Bits options_bits;
49}; 56};
50 57
51#define EVAS_GL_EXTENSIONS 1 58#define EVAS_GL_EXTENSIONS 1
@@ -73,6 +80,7 @@ typedef struct _GLData
73{ 80{
74 Evas_GL_Context *ctx; 81 Evas_GL_Context *ctx;
75 Evas_GL_Surface *sfc; 82 Evas_GL_Surface *sfc;
83 Evas_GL_Config *cfg;
76 Evas_GL *evasgl; 84 Evas_GL *evasgl;
77 Evas_GL_API *glapi; 85 Evas_GL_API *glapi;
78 GLuint program; 86 GLuint program;
@@ -93,13 +101,6 @@ static GLuint load_shader (GLData *gld, GLenum type, const char *shader_src)
93int 101int
94main(int argc, char **argv) 102main(int argc, char **argv)
95{ 103{
96 // config for the surface for evas_gl
97 Evas_GL_Config config =
98 {
99 EVAS_GL_RGBA_8888,
100 EVAS_GL_DEPTH_NONE,
101 EVAS_GL_STENCIL_NONE
102 };
103 // a size by default 104 // a size by default
104 int w = 256, h = 256; 105 int w = 256, h = 256;
105 // some variables we will use 106 // some variables we will use
@@ -124,8 +125,16 @@ main(int argc, char **argv)
124 // get the evas gl handle for doing gl things 125 // get the evas gl handle for doing gl things
125 gld->evasgl = evas_gl_new(canvas); 126 gld->evasgl = evas_gl_new(canvas);
126 gld->glapi = evas_gl_api_get(gld->evasgl); 127 gld->glapi = evas_gl_api_get(gld->evasgl);
128
129 // Set a surface config
130 gld->cfg = evas_gl_config_new();
131 gld->cfg->color_format = EVAS_GL_RGBA_8888;
132 //gld->cfg->depth_bits = EVAS_GL_DEPTH_NONE; // Othe config options
133 //gld->cfg->stencil_bits = EVAS_GL_STENCIL_NONE;
134 //gld->cfg->options_bits = EVAS_GL_OPTIONS_NONE;
135
127 // create a surface and context 136 // create a surface and context
128 gld->sfc = evas_gl_surface_create(gld->evasgl, &config, w, h); 137 gld->sfc = evas_gl_surface_create(gld->evasgl, gld->cfg, w, h);
129 gld->ctx = evas_gl_context_create(gld->evasgl, NULL); 138 gld->ctx = evas_gl_context_create(gld->evasgl, NULL);
130 //-// 139 //-//
131 //-//-//-// END GL INIT BLOB 140 //-//-//-// END GL INIT BLOB
@@ -207,6 +216,7 @@ on_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
207 216
208 evas_gl_surface_destroy(gld->evasgl, gld->sfc); 217 evas_gl_surface_destroy(gld->evasgl, gld->sfc);
209 evas_gl_context_destroy(gld->evasgl, gld->ctx); 218 evas_gl_context_destroy(gld->evasgl, gld->ctx);
219 evas_gl_config_free(gld->cfg);
210 evas_gl_free(gld->evasgl); 220 evas_gl_free(gld->evasgl);
211 free(gld); 221 free(gld);
212} 222}
@@ -389,6 +399,22 @@ EAPI Evas_GL *evas_gl_new (Evas *e) EINA_WARN_UNU
389EAPI void evas_gl_free (Evas_GL *evas_gl) EINA_ARG_NONNULL(1); 399EAPI void evas_gl_free (Evas_GL *evas_gl) EINA_ARG_NONNULL(1);
390 400
391/** 401/**
402 * Allocates a new config object for the user to fill out.
403 *
404 * As long as the Evas creates a config object for the user, it takes care
405 * of the backward compatibility issue.
406 */
407EAPI Evas_GL_Config *evas_gl_config_new ();
408
409/**
410 * Frees a config object created from evas_gl_config_new.
411 *
412 * As long as the Evas creates a config object for the user, it takes care
413 * of the backward compatibility issue.
414 */
415EAPI void evas_gl_config_free (Evas_GL_Config *cfg) EINA_ARG_NONNULL(1);
416
417/**
392 * Creates and returns new Evas_GL_Surface object for GL Rendering. 418 * Creates and returns new Evas_GL_Surface object for GL Rendering.
393 * 419 *
394 * @param evas_gl The given Evas_GL object. 420 * @param evas_gl The given Evas_GL object.
diff --git a/libraries/evas/src/lib/Makefile.am b/libraries/evas/src/lib/Makefile.am
index 6b1011a..2a1a92d 100644
--- a/libraries/evas/src/lib/Makefile.am
+++ b/libraries/evas/src/lib/Makefile.am
@@ -100,6 +100,11 @@ SUBDIRS += ../modules/engines/software_x11/
100EVAS_STATIC_MODULE += ../modules/engines/software_x11/libevas_engine_software_x11.la 100EVAS_STATIC_MODULE += ../modules/engines/software_x11/libevas_engine_software_x11.la
101EVAS_STATIC_LIBADD += @evas_engine_software_xlib_libs@ @evas_engine_software_xcb_libs@ 101EVAS_STATIC_LIBADD += @evas_engine_software_xlib_libs@ @evas_engine_software_xcb_libs@
102endif 102endif
103if EVAS_STATIC_BUILD_WAYLAND_SHM
104SUBDIRS += ../modules/engines/wayland_shm/
105EVAS_STATIC_MODULE += ../modules/engines/wayland_shm/libevas_engine_wayland_shm.la
106EVAS_STATIC_LIBADD += @evas_engine_wayland_shm_libs@
107endif
103if EVAS_STATIC_BUILD_BMP 108if EVAS_STATIC_BUILD_BMP
104SUBDIRS += ../modules/loaders/bmp 109SUBDIRS += ../modules/loaders/bmp
105EVAS_STATIC_MODULE += ../modules/loaders/bmp/libevas_loader_bmp.la 110EVAS_STATIC_MODULE += ../modules/loaders/bmp/libevas_loader_bmp.la
@@ -200,9 +205,7 @@ AM_CFLAGS = @WIN32_CFLAGS@
200 205
201lib_LTLIBRARIES = libevas.la 206lib_LTLIBRARIES = libevas.la
202 207
203### Evas_GL disabled for 1.1 208includes_HEADERS = Evas.h Evas_GL.h
204#includes_HEADERS = Evas.h Evas_GL.h
205includes_HEADERS = Evas.h
206includesdir = $(includedir)/evas-@VMAJ@ 209includesdir = $(includedir)/evas-@VMAJ@
207 210
208libevas_la_SOURCES = main.c 211libevas_la_SOURCES = main.c
diff --git a/libraries/evas/src/lib/Makefile.in b/libraries/evas/src/lib/Makefile.in
index 87bbaac..ffe71d1 100644
--- a/libraries/evas/src/lib/Makefile.in
+++ b/libraries/evas/src/lib/Makefile.in
@@ -101,57 +101,60 @@ host_triplet = @host@
101@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am__append_48 = ../modules/engines/software_x11/ 101@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am__append_48 = ../modules/engines/software_x11/
102@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am__append_49 = ../modules/engines/software_x11/libevas_engine_software_x11.la 102@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am__append_49 = ../modules/engines/software_x11/libevas_engine_software_x11.la
103@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am__append_50 = @evas_engine_software_xlib_libs@ @evas_engine_software_xcb_libs@ 103@EVAS_STATIC_BUILD_SOFTWARE_X11_TRUE@am__append_50 = @evas_engine_software_xlib_libs@ @evas_engine_software_xcb_libs@
104@EVAS_STATIC_BUILD_BMP_TRUE@am__append_51 = ../modules/loaders/bmp 104@EVAS_STATIC_BUILD_WAYLAND_SHM_TRUE@am__append_51 = ../modules/engines/wayland_shm/
105@EVAS_STATIC_BUILD_BMP_TRUE@am__append_52 = ../modules/loaders/bmp/libevas_loader_bmp.la 105@EVAS_STATIC_BUILD_WAYLAND_SHM_TRUE@am__append_52 = ../modules/engines/wayland_shm/libevas_engine_wayland_shm.la
106@EVAS_STATIC_BUILD_BMP_TRUE@am__append_53 = @evas_image_loader_bmp_libs@ 106@EVAS_STATIC_BUILD_WAYLAND_SHM_TRUE@am__append_53 = @evas_engine_wayland_shm_libs@
107@EVAS_STATIC_BUILD_EDB_TRUE@am__append_54 = ../modules/savers/edb ../modules/loaders/edb 107@EVAS_STATIC_BUILD_BMP_TRUE@am__append_54 = ../modules/loaders/bmp
108@EVAS_STATIC_BUILD_EDB_TRUE@am__append_55 = ../modules/savers/edb/libevas_saver_edb.la ../modules/loaders/edb/libevas_loader_edb.la 108@EVAS_STATIC_BUILD_BMP_TRUE@am__append_55 = ../modules/loaders/bmp/libevas_loader_bmp.la
109@EVAS_STATIC_BUILD_EDB_TRUE@am__append_56 = @evas_image_loader_edb_libs@ 109@EVAS_STATIC_BUILD_BMP_TRUE@am__append_56 = @evas_image_loader_bmp_libs@
110@EVAS_STATIC_BUILD_EET_TRUE@am__append_57 = ../modules/savers/eet ../modules/loaders/eet 110@EVAS_STATIC_BUILD_EDB_TRUE@am__append_57 = ../modules/savers/edb ../modules/loaders/edb
111@EVAS_STATIC_BUILD_EET_TRUE@am__append_58 = ../modules/savers/eet/libevas_saver_eet.la ../modules/loaders/eet/libevas_loader_eet.la 111@EVAS_STATIC_BUILD_EDB_TRUE@am__append_58 = ../modules/savers/edb/libevas_saver_edb.la ../modules/loaders/edb/libevas_loader_edb.la
112@EVAS_STATIC_BUILD_EET_TRUE@am__append_59 = @evas_image_loader_eet_libs@ 112@EVAS_STATIC_BUILD_EDB_TRUE@am__append_59 = @evas_image_loader_edb_libs@
113@EVAS_STATIC_BUILD_GENERIC_TRUE@am__append_60 = ../modules/loaders/generic 113@EVAS_STATIC_BUILD_EET_TRUE@am__append_60 = ../modules/savers/eet ../modules/loaders/eet
114@EVAS_STATIC_BUILD_GENERIC_TRUE@am__append_61 = ../modules/loaders/generic/libevas_loader_generic.la 114@EVAS_STATIC_BUILD_EET_TRUE@am__append_61 = ../modules/savers/eet/libevas_saver_eet.la ../modules/loaders/eet/libevas_loader_eet.la
115@EVAS_STATIC_BUILD_GENERIC_TRUE@am__append_62 = @evas_image_loader_generic_libs@ 115@EVAS_STATIC_BUILD_EET_TRUE@am__append_62 = @evas_image_loader_eet_libs@
116@EVAS_STATIC_BUILD_GIF_TRUE@am__append_63 = ../modules/loaders/gif 116@EVAS_STATIC_BUILD_GENERIC_TRUE@am__append_63 = ../modules/loaders/generic
117@EVAS_STATIC_BUILD_GIF_TRUE@am__append_64 = ../modules/loaders/gif/libevas_loader_gif.la 117@EVAS_STATIC_BUILD_GENERIC_TRUE@am__append_64 = ../modules/loaders/generic/libevas_loader_generic.la
118@EVAS_STATIC_BUILD_GIF_TRUE@am__append_65 = @evas_image_loader_gif_libs@ 118@EVAS_STATIC_BUILD_GENERIC_TRUE@am__append_65 = @evas_image_loader_generic_libs@
119@EVAS_STATIC_BUILD_ICO_TRUE@am__append_66 = ../modules/loaders/ico 119@EVAS_STATIC_BUILD_GIF_TRUE@am__append_66 = ../modules/loaders/gif
120@EVAS_STATIC_BUILD_ICO_TRUE@am__append_67 = ../modules/loaders/ico/libevas_loader_ico.la 120@EVAS_STATIC_BUILD_GIF_TRUE@am__append_67 = ../modules/loaders/gif/libevas_loader_gif.la
121@EVAS_STATIC_BUILD_ICO_TRUE@am__append_68 = @evas_image_loader_ico_libs@ 121@EVAS_STATIC_BUILD_GIF_TRUE@am__append_68 = @evas_image_loader_gif_libs@
122@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_69 = ../modules/loaders/jpeg 122@EVAS_STATIC_BUILD_ICO_TRUE@am__append_69 = ../modules/loaders/ico
123@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_70 = ../modules/loaders/jpeg/libevas_loader_jpeg.la 123@EVAS_STATIC_BUILD_ICO_TRUE@am__append_70 = ../modules/loaders/ico/libevas_loader_ico.la
124@BUILD_SAVER_JPEG_TRUE@@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_71 = ../modules/savers/jpeg 124@EVAS_STATIC_BUILD_ICO_TRUE@am__append_71 = @evas_image_loader_ico_libs@
125@BUILD_SAVER_JPEG_TRUE@@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_72 = ../modules/savers/jpeg/libevas_saver_jpeg.la 125@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_72 = ../modules/loaders/jpeg
126@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_73 = @evas_image_loader_jpeg_libs@ 126@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_73 = ../modules/loaders/jpeg/libevas_loader_jpeg.la
127@EVAS_STATIC_BUILD_PMAPS_TRUE@am__append_74 = ../modules/loaders/pmaps 127@BUILD_SAVER_JPEG_TRUE@@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_74 = ../modules/savers/jpeg
128@EVAS_STATIC_BUILD_PMAPS_TRUE@am__append_75 = ../modules/loaders/pmaps/libevas_loader_pmaps.la 128@BUILD_SAVER_JPEG_TRUE@@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_75 = ../modules/savers/jpeg/libevas_saver_jpeg.la
129@EVAS_STATIC_BUILD_PMAPS_TRUE@am__append_76 = @evas_image_loader_pmaps_libs@ 129@EVAS_STATIC_BUILD_JPEG_TRUE@am__append_76 = @evas_image_loader_jpeg_libs@
130@EVAS_STATIC_BUILD_PNG_TRUE@am__append_77 = ../modules/savers/png ../modules/loaders/png 130@EVAS_STATIC_BUILD_PMAPS_TRUE@am__append_77 = ../modules/loaders/pmaps
131@EVAS_STATIC_BUILD_PNG_TRUE@am__append_78 = ../modules/savers/png/libevas_saver_png.la ../modules/loaders/png/libevas_loader_png.la 131@EVAS_STATIC_BUILD_PMAPS_TRUE@am__append_78 = ../modules/loaders/pmaps/libevas_loader_pmaps.la
132@EVAS_STATIC_BUILD_PNG_TRUE@am__append_79 = @evas_image_loader_png_libs@ 132@EVAS_STATIC_BUILD_PMAPS_TRUE@am__append_79 = @evas_image_loader_pmaps_libs@
133@EVAS_STATIC_BUILD_PSD_TRUE@am__append_80 = ../modules/loaders/psd 133@EVAS_STATIC_BUILD_PNG_TRUE@am__append_80 = ../modules/savers/png ../modules/loaders/png
134@EVAS_STATIC_BUILD_PSD_TRUE@am__append_81 = ../modules/loaders/psd/libevas_loader_psd.la 134@EVAS_STATIC_BUILD_PNG_TRUE@am__append_81 = ../modules/savers/png/libevas_saver_png.la ../modules/loaders/png/libevas_loader_png.la
135@EVAS_STATIC_BUILD_PSD_TRUE@am__append_82 = @evas_image_loader_psd_libs@ 135@EVAS_STATIC_BUILD_PNG_TRUE@am__append_82 = @evas_image_loader_png_libs@
136@EVAS_STATIC_BUILD_SVG_TRUE@am__append_83 = ../modules/loaders/svg 136@EVAS_STATIC_BUILD_PSD_TRUE@am__append_83 = ../modules/loaders/psd
137@EVAS_STATIC_BUILD_SVG_TRUE@am__append_84 = ../modules/loaders/svg/libevas_loader_svg.la 137@EVAS_STATIC_BUILD_PSD_TRUE@am__append_84 = ../modules/loaders/psd/libevas_loader_psd.la
138@EVAS_STATIC_BUILD_SVG_TRUE@am__append_85 = @evas_image_loader_svg_libs@ 138@EVAS_STATIC_BUILD_PSD_TRUE@am__append_85 = @evas_image_loader_psd_libs@
139@EVAS_STATIC_BUILD_TGA_TRUE@am__append_86 = ../modules/loaders/tga 139@EVAS_STATIC_BUILD_SVG_TRUE@am__append_86 = ../modules/loaders/svg
140@EVAS_STATIC_BUILD_TGA_TRUE@am__append_87 = ../modules/loaders/tga/libevas_loader_tga.la 140@EVAS_STATIC_BUILD_SVG_TRUE@am__append_87 = ../modules/loaders/svg/libevas_loader_svg.la
141@EVAS_STATIC_BUILD_TGA_TRUE@am__append_88 = @evas_image_loader_tga_libs@ 141@EVAS_STATIC_BUILD_SVG_TRUE@am__append_88 = @evas_image_loader_svg_libs@
142@EVAS_STATIC_BUILD_TIFF_TRUE@am__append_89 = ../modules/savers/tiff ../modules/loaders/tiff 142@EVAS_STATIC_BUILD_TGA_TRUE@am__append_89 = ../modules/loaders/tga
143@EVAS_STATIC_BUILD_TIFF_TRUE@am__append_90 = ../modules/savers/tiff/libevas_saver_tiff.la ../modules/loaders/tiff/libevas_loader_tiff.la 143@EVAS_STATIC_BUILD_TGA_TRUE@am__append_90 = ../modules/loaders/tga/libevas_loader_tga.la
144@EVAS_STATIC_BUILD_TIFF_TRUE@am__append_91 = @evas_image_loader_tiff_libs@ 144@EVAS_STATIC_BUILD_TGA_TRUE@am__append_91 = @evas_image_loader_tga_libs@
145@EVAS_STATIC_BUILD_WBMP_TRUE@am__append_92 = ../modules/loaders/wbmp 145@EVAS_STATIC_BUILD_TIFF_TRUE@am__append_92 = ../modules/savers/tiff ../modules/loaders/tiff
146@EVAS_STATIC_BUILD_WBMP_TRUE@am__append_93 = ../modules/loaders/wbmp/libevas_loader_wbmp.la 146@EVAS_STATIC_BUILD_TIFF_TRUE@am__append_93 = ../modules/savers/tiff/libevas_saver_tiff.la ../modules/loaders/tiff/libevas_loader_tiff.la
147@EVAS_STATIC_BUILD_WBMP_TRUE@am__append_94 = @evas_image_loader_wbmp_libs@ 147@EVAS_STATIC_BUILD_TIFF_TRUE@am__append_94 = @evas_image_loader_tiff_libs@
148@EVAS_STATIC_BUILD_XPM_TRUE@am__append_95 = ../modules/loaders/xpm 148@EVAS_STATIC_BUILD_WBMP_TRUE@am__append_95 = ../modules/loaders/wbmp
149@EVAS_STATIC_BUILD_XPM_TRUE@am__append_96 = ../modules/loaders/xpm/libevas_loader_xpm.la 149@EVAS_STATIC_BUILD_WBMP_TRUE@am__append_96 = ../modules/loaders/wbmp/libevas_loader_wbmp.la
150@EVAS_STATIC_BUILD_XPM_TRUE@am__append_97 = @evas_image_loader_xpm_libs@ 150@EVAS_STATIC_BUILD_WBMP_TRUE@am__append_97 = @evas_image_loader_wbmp_libs@
151@BUILD_ENGINE_SOFTWARE_16_TRUE@am__append_98 = engines/common_16/libevas_engine_common_16.la 151@EVAS_STATIC_BUILD_XPM_TRUE@am__append_98 = ../modules/loaders/xpm
152@BUILD_ENGINE_SOFTWARE_16_TRUE@am__append_99 = engines/common_16/libevas_engine_common_16.la 152@EVAS_STATIC_BUILD_XPM_TRUE@am__append_99 = ../modules/loaders/xpm/libevas_loader_xpm.la
153@BUILD_ENGINE_SOFTWARE_8_TRUE@am__append_100 = engines/common_8/libevas_engine_common_8.la 153@EVAS_STATIC_BUILD_XPM_TRUE@am__append_100 = @evas_image_loader_xpm_libs@
154@BUILD_ENGINE_SOFTWARE_8_TRUE@am__append_101 = engines/common_8/libevas_engine_common_8.la 154@BUILD_ENGINE_SOFTWARE_16_TRUE@am__append_101 = engines/common_16/libevas_engine_common_16.la
155@BUILD_ENGINE_SOFTWARE_16_TRUE@am__append_102 = engines/common_16/libevas_engine_common_16.la
156@BUILD_ENGINE_SOFTWARE_8_TRUE@am__append_103 = engines/common_8/libevas_engine_common_8.la
157@BUILD_ENGINE_SOFTWARE_8_TRUE@am__append_104 = engines/common_8/libevas_engine_common_8.la
155subdir = src/lib 158subdir = src/lib
156DIST_COMMON = $(includes_HEADERS) $(srcdir)/Makefile.am \ 159DIST_COMMON = $(includes_HEADERS) $(srcdir)/Makefile.am \
157 $(srcdir)/Makefile.in 160 $(srcdir)/Makefile.in
@@ -213,7 +216,7 @@ am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
213 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ 216 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
214 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ 217 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
215 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ 218 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
216 $(am__DEPENDENCIES_1) 219 $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
217am_libevas_la_OBJECTS = main.lo 220am_libevas_la_OBJECTS = main.lo
218libevas_la_OBJECTS = $(am_libevas_la_OBJECTS) 221libevas_la_OBJECTS = $(am_libevas_la_OBJECTS)
219AM_V_lt = $(am__v_lt_$(V)) 222AM_V_lt = $(am__v_lt_$(V))
@@ -393,8 +396,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
393PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 396PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
394PIXMAN_LIBS = @PIXMAN_LIBS@ 397PIXMAN_LIBS = @PIXMAN_LIBS@
395PKG_CONFIG = @PKG_CONFIG@ 398PKG_CONFIG = @PKG_CONFIG@
396PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
397PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
398PNG_CFLAGS = @PNG_CFLAGS@ 399PNG_CFLAGS = @PNG_CFLAGS@
399PNG_LIBS = @PNG_LIBS@ 400PNG_LIBS = @PNG_LIBS@
400RANLIB = @RANLIB@ 401RANLIB = @RANLIB@
@@ -411,6 +412,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
411VALGRIND_LIBS = @VALGRIND_LIBS@ 412VALGRIND_LIBS = @VALGRIND_LIBS@
412VERSION = @VERSION@ 413VERSION = @VERSION@
413VMAJ = @VMAJ@ 414VMAJ = @VMAJ@
415WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
416WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
414WIN32_CFLAGS = @WIN32_CFLAGS@ 417WIN32_CFLAGS = @WIN32_CFLAGS@
415WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 418WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
416XCB_CFLAGS = @XCB_CFLAGS@ 419XCB_CFLAGS = @XCB_CFLAGS@
@@ -492,6 +495,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
492evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 495evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
493evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 496evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
494evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 497evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
498evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
499evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
500evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
501evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
495evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 502evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
496evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 503evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
497evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 504evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
@@ -576,9 +583,10 @@ SUBDIRS = canvas cache cserve file engines include $(am__append_1) \
576 $(am__append_45) $(am__append_48) $(am__append_51) \ 583 $(am__append_45) $(am__append_48) $(am__append_51) \
577 $(am__append_54) $(am__append_57) $(am__append_60) \ 584 $(am__append_54) $(am__append_57) $(am__append_60) \
578 $(am__append_63) $(am__append_66) $(am__append_69) \ 585 $(am__append_63) $(am__append_66) $(am__append_69) \
579 $(am__append_71) $(am__append_74) $(am__append_77) \ 586 $(am__append_72) $(am__append_74) $(am__append_77) \
580 $(am__append_80) $(am__append_83) $(am__append_86) \ 587 $(am__append_80) $(am__append_83) $(am__append_86) \
581 $(am__append_89) $(am__append_92) $(am__append_95) 588 $(am__append_89) $(am__append_92) $(am__append_95) \
589 $(am__append_98)
582EVAS_STATIC_MODULE = $(am__append_2) $(am__append_4) $(am__append_6) \ 590EVAS_STATIC_MODULE = $(am__append_2) $(am__append_4) $(am__append_6) \
583 $(am__append_9) $(am__append_12) $(am__append_15) \ 591 $(am__append_9) $(am__append_12) $(am__append_15) \
584 $(am__append_18) $(am__append_21) $(am__append_24) \ 592 $(am__append_18) $(am__append_21) $(am__append_24) \
@@ -587,20 +595,20 @@ EVAS_STATIC_MODULE = $(am__append_2) $(am__append_4) $(am__append_6) \
587 $(am__append_43) $(am__append_46) $(am__append_49) \ 595 $(am__append_43) $(am__append_46) $(am__append_49) \
588 $(am__append_52) $(am__append_55) $(am__append_58) \ 596 $(am__append_52) $(am__append_55) $(am__append_58) \
589 $(am__append_61) $(am__append_64) $(am__append_67) \ 597 $(am__append_61) $(am__append_64) $(am__append_67) \
590 $(am__append_70) $(am__append_72) $(am__append_75) \ 598 $(am__append_70) $(am__append_73) $(am__append_75) \
591 $(am__append_78) $(am__append_81) $(am__append_84) \ 599 $(am__append_78) $(am__append_81) $(am__append_84) \
592 $(am__append_87) $(am__append_90) $(am__append_93) \ 600 $(am__append_87) $(am__append_90) $(am__append_93) \
593 $(am__append_96) 601 $(am__append_96) $(am__append_99)
594EVAS_STATIC_LIBADD = $(am__append_7) $(am__append_10) $(am__append_13) \ 602EVAS_STATIC_LIBADD = $(am__append_7) $(am__append_10) $(am__append_13) \
595 $(am__append_16) $(am__append_19) $(am__append_22) \ 603 $(am__append_16) $(am__append_19) $(am__append_22) \
596 $(am__append_27) $(am__append_30) $(am__append_33) \ 604 $(am__append_27) $(am__append_30) $(am__append_33) \
597 $(am__append_38) $(am__append_41) $(am__append_44) \ 605 $(am__append_38) $(am__append_41) $(am__append_44) \
598 $(am__append_47) $(am__append_50) $(am__append_53) \ 606 $(am__append_47) $(am__append_50) $(am__append_53) \
599 $(am__append_56) $(am__append_59) $(am__append_62) \ 607 $(am__append_56) $(am__append_59) $(am__append_62) \
600 $(am__append_65) $(am__append_68) $(am__append_73) \ 608 $(am__append_65) $(am__append_68) $(am__append_71) \
601 $(am__append_76) $(am__append_79) $(am__append_82) \ 609 $(am__append_76) $(am__append_79) $(am__append_82) \
602 $(am__append_85) $(am__append_88) $(am__append_91) \ 610 $(am__append_85) $(am__append_88) $(am__append_91) \
603 $(am__append_94) $(am__append_97) 611 $(am__append_94) $(am__append_97) $(am__append_100)
604AM_CPPFLAGS = \ 612AM_CPPFLAGS = \
605-I. \ 613-I. \
606-I$(top_srcdir)/src/lib \ 614-I$(top_srcdir)/src/lib \
@@ -619,10 +627,7 @@ AM_CPPFLAGS = \
619 627
620AM_CFLAGS = @WIN32_CFLAGS@ 628AM_CFLAGS = @WIN32_CFLAGS@
621lib_LTLIBRARIES = libevas.la 629lib_LTLIBRARIES = libevas.la
622 630includes_HEADERS = Evas.h Evas_GL.h
623### Evas_GL disabled for 1.1
624#includes_HEADERS = Evas.h Evas_GL.h
625includes_HEADERS = Evas.h
626includesdir = $(includedir)/evas-@VMAJ@ 631includesdir = $(includedir)/evas-@VMAJ@
627libevas_la_SOURCES = main.c 632libevas_la_SOURCES = main.c
628@EVAS_CSERVE_TRUE@libevas_cserve_la = cserve/libevas_cserve.la 633@EVAS_CSERVE_TRUE@libevas_cserve_la = cserve/libevas_cserve.la
@@ -631,12 +636,12 @@ libevas_la_LIBADD = canvas/libevas_canvas.la file/libevas_file.la \
631 engines/common/libevas_engine_common.la @FREETYPE_LIBS@ \ 636 engines/common/libevas_engine_common.la @FREETYPE_LIBS@ \
632 @FRIBIDI_LIBS@ @HARFBUZZ_LIBS@ @EET_LIBS@ @FONTCONFIG_LIBS@ \ 637 @FRIBIDI_LIBS@ @HARFBUZZ_LIBS@ @EET_LIBS@ @FONTCONFIG_LIBS@ \
633 @pthread_libs@ @EINA_LIBS@ $(EVAS_STATIC_MODULE) \ 638 @pthread_libs@ @EINA_LIBS@ $(EVAS_STATIC_MODULE) \
634 $(EVAS_STATIC_LIBADD) @PIXMAN_LIBS@ -lm $(am__append_98) \ 639 $(EVAS_STATIC_LIBADD) @PIXMAN_LIBS@ -lm $(am__append_101) \
635 $(am__append_100) 640 $(am__append_103)
636libevas_la_DEPENDENCIES = canvas/libevas_canvas.la \ 641libevas_la_DEPENDENCIES = canvas/libevas_canvas.la \
637 file/libevas_file.la cache/libevas_cache.la \ 642 file/libevas_file.la cache/libevas_cache.la \
638 $(libevas_cserve_la) engines/common/libevas_engine_common.la \ 643 $(libevas_cserve_la) engines/common/libevas_engine_common.la \
639 $(EVAS_STATIC_MODULE) $(am__append_99) $(am__append_101) 644 $(EVAS_STATIC_MODULE) $(am__append_102) $(am__append_104)
640libevas_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ 645libevas_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@
641 646
642### Evas_GL we are still using it in our code, so just don't install it. 647### Evas_GL we are still using it in our code, so just don't install it.
diff --git a/libraries/evas/src/lib/cache/Makefile.in b/libraries/evas/src/lib/cache/Makefile.in
index b024731..2b50c81 100644
--- a/libraries/evas/src/lib/cache/Makefile.in
+++ b/libraries/evas/src/lib/cache/Makefile.in
@@ -197,8 +197,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
197PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 197PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
198PIXMAN_LIBS = @PIXMAN_LIBS@ 198PIXMAN_LIBS = @PIXMAN_LIBS@
199PKG_CONFIG = @PKG_CONFIG@ 199PKG_CONFIG = @PKG_CONFIG@
200PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
201PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
202PNG_CFLAGS = @PNG_CFLAGS@ 200PNG_CFLAGS = @PNG_CFLAGS@
203PNG_LIBS = @PNG_LIBS@ 201PNG_LIBS = @PNG_LIBS@
204RANLIB = @RANLIB@ 202RANLIB = @RANLIB@
@@ -215,6 +213,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
215VALGRIND_LIBS = @VALGRIND_LIBS@ 213VALGRIND_LIBS = @VALGRIND_LIBS@
216VERSION = @VERSION@ 214VERSION = @VERSION@
217VMAJ = @VMAJ@ 215VMAJ = @VMAJ@
216WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
217WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
218WIN32_CFLAGS = @WIN32_CFLAGS@ 218WIN32_CFLAGS = @WIN32_CFLAGS@
219WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 219WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
220XCB_CFLAGS = @XCB_CFLAGS@ 220XCB_CFLAGS = @XCB_CFLAGS@
@@ -296,6 +296,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
296evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 296evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
297evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 297evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
298evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 298evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
299evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
300evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
301evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
302evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
299evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 303evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
300evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 304evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
301evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 305evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/cache/evas_cache_engine_image.c b/libraries/evas/src/lib/cache/evas_cache_engine_image.c
index 8ae4392..5ec1af2 100644
--- a/libraries/evas/src/lib/cache/evas_cache_engine_image.c
+++ b/libraries/evas/src/lib/cache/evas_cache_engine_image.c
@@ -1,3 +1,7 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
1#include <assert.h> 5#include <assert.h>
2 6
3#include "evas_common.h" 7#include "evas_common.h"
diff --git a/libraries/evas/src/lib/cache/evas_cache_image.c b/libraries/evas/src/lib/cache/evas_cache_image.c
index d52c64e..73e4f8a 100644
--- a/libraries/evas/src/lib/cache/evas_cache_image.c
+++ b/libraries/evas/src/lib/cache/evas_cache_image.c
@@ -918,12 +918,8 @@ evas_cache_image_drop(Image_Entry *im)
918EAPI void 918EAPI void
919evas_cache_image_data_not_needed(Image_Entry *im) 919evas_cache_image_data_not_needed(Image_Entry *im)
920{ 920{
921 Evas_Cache_Image *cache;
922 int references; 921 int references;
923 922
924 /* FIXME: no one uses this api... well evas_cache_engine_parent_not_needed()
925 * does, but nothing uses that! */
926 cache = im->cache;
927#ifdef EVAS_FRAME_QUEUING 923#ifdef EVAS_FRAME_QUEUING
928 LKL(im->lock_references); 924 LKL(im->lock_references);
929#endif 925#endif
@@ -941,11 +937,12 @@ evas_cache_image_dirty(Image_Entry *im, unsigned int x, unsigned int y, unsigned
941{ 937{
942 Image_Entry *im_dirty = im; 938 Image_Entry *im_dirty = im;
943 Evas_Cache_Image *cache; 939 Evas_Cache_Image *cache;
944 int references;
945 940
946 cache = im->cache; 941 cache = im->cache;
947 if (!(im->flags.dirty)) 942 if (!(im->flags.dirty))
948 { 943 {
944#ifndef EVAS_CSERVE
945 int references;
949#ifdef EVAS_FRAME_QUEUING 946#ifdef EVAS_FRAME_QUEUING
950 LKL(im->lock_references); 947 LKL(im->lock_references);
951#endif 948#endif
@@ -953,21 +950,18 @@ evas_cache_image_dirty(Image_Entry *im, unsigned int x, unsigned int y, unsigned
953#ifdef EVAS_FRAME_QUEUING 950#ifdef EVAS_FRAME_QUEUING
954 LKU(im->lock_references); 951 LKU(im->lock_references);
955#endif 952#endif
956#ifndef EVAS_CSERVE
957 // if ref 1 also copy if using shared cache as its read-only 953 // if ref 1 also copy if using shared cache as its read-only
958 if (references == 1) im_dirty = im; 954 if (references == 1) im_dirty = im;
959 else 955 else
960#endif 956#endif
961 { 957 {
962 int error;
963
964 im_dirty = 958 im_dirty =
965 evas_cache_image_copied_data(cache, im->w, im->h, 959 evas_cache_image_copied_data(cache, im->w, im->h,
966 evas_cache_image_pixels(im), 960 evas_cache_image_pixels(im),
967 im->flags.alpha, im->space); 961 im->flags.alpha, im->space);
968 if (!im_dirty) goto on_error; 962 if (!im_dirty) goto on_error;
969 if (cache->func.debug) cache->func.debug("dirty-src", im); 963 if (cache->func.debug) cache->func.debug("dirty-src", im);
970 error = cache->func.dirty(im_dirty, im); 964 cache->func.dirty(im_dirty, im);
971 if (cache->func.debug) cache->func.debug("dirty-out", im_dirty); 965 if (cache->func.debug) cache->func.debug("dirty-out", im_dirty);
972#ifdef EVAS_FRAME_QUEUING 966#ifdef EVAS_FRAME_QUEUING
973 LKL(im_dirty->lock_references); 967 LKL(im_dirty->lock_references);
@@ -1014,15 +1008,13 @@ evas_cache_image_alone(Image_Entry *im)
1014 } 1008 }
1015 else 1009 else
1016 { 1010 {
1017 int error;
1018
1019 im_dirty = evas_cache_image_copied_data(cache, im->w, im->h, 1011 im_dirty = evas_cache_image_copied_data(cache, im->w, im->h,
1020 evas_cache_image_pixels(im), 1012 evas_cache_image_pixels(im),
1021 im->flags.alpha, 1013 im->flags.alpha,
1022 im->space); 1014 im->space);
1023 if (!im_dirty) goto on_error; 1015 if (!im_dirty) goto on_error;
1024 if (cache->func.debug) cache->func.debug("dirty-src", im); 1016 if (cache->func.debug) cache->func.debug("dirty-src", im);
1025 error = cache->func.dirty(im_dirty, im); 1017 cache->func.dirty(im_dirty, im);
1026 if (cache->func.debug) cache->func.debug("dirty-out", im_dirty); 1018 if (cache->func.debug) cache->func.debug("dirty-out", im_dirty);
1027#ifdef EVAS_FRAME_QUEUING 1019#ifdef EVAS_FRAME_QUEUING
1028 LKL(im_dirty->lock_references); 1020 LKL(im_dirty->lock_references);
@@ -1296,6 +1288,7 @@ evas_cache_image_preload_cancel(Image_Entry *im, const void *target)
1296 _evas_cache_image_entry_preload_remove(im, target); 1288 _evas_cache_image_entry_preload_remove(im, target);
1297#else 1289#else
1298 (void)im; 1290 (void)im;
1291 (void)target;
1299#endif 1292#endif
1300} 1293}
1301 1294
diff --git a/libraries/evas/src/lib/cache/evas_preload.c b/libraries/evas/src/lib/cache/evas_preload.c
index 6e0412a..5eebaed 100644
--- a/libraries/evas/src/lib/cache/evas_preload.c
+++ b/libraries/evas/src/lib/cache/evas_preload.c
@@ -225,6 +225,7 @@ evas_preload_thread_run(void (*func_heavy) (void *data),
225 If no thread and as we don't want to break app that rely on this 225 If no thread and as we don't want to break app that rely on this
226 facility, we will lock the interface until we are done. 226 facility, we will lock the interface until we are done.
227 */ 227 */
228 (void)func_cancel;
228 func_heavy((void *)data); 229 func_heavy((void *)data);
229 func_end((void *)data); 230 func_end((void *)data);
230 return (void *)1; 231 return (void *)1;
@@ -253,12 +254,13 @@ evas_preload_thread_cancel(Evas_Preload_Pthread *thread)
253 } 254 }
254 } 255 }
255 LKU(_mutex); 256 LKU(_mutex);
256 257
257 /* Delay the destruction */ 258 /* Delay the destruction */
258 work = (Evas_Preload_Pthread_Worker *)thread; 259 work = (Evas_Preload_Pthread_Worker *)thread;
259 work->cancel = EINA_TRUE; 260 work->cancel = EINA_TRUE;
260 return EINA_FALSE; 261 return EINA_FALSE;
261#else 262#else
263 (void) thread;
262 return EINA_TRUE; 264 return EINA_TRUE;
263#endif 265#endif
264} 266}
diff --git a/libraries/evas/src/lib/canvas/Makefile.in b/libraries/evas/src/lib/canvas/Makefile.in
index 0b4e15d..75da67a 100644
--- a/libraries/evas/src/lib/canvas/Makefile.in
+++ b/libraries/evas/src/lib/canvas/Makefile.in
@@ -211,8 +211,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
211PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 211PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
212PIXMAN_LIBS = @PIXMAN_LIBS@ 212PIXMAN_LIBS = @PIXMAN_LIBS@
213PKG_CONFIG = @PKG_CONFIG@ 213PKG_CONFIG = @PKG_CONFIG@
214PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
215PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
216PNG_CFLAGS = @PNG_CFLAGS@ 214PNG_CFLAGS = @PNG_CFLAGS@
217PNG_LIBS = @PNG_LIBS@ 215PNG_LIBS = @PNG_LIBS@
218RANLIB = @RANLIB@ 216RANLIB = @RANLIB@
@@ -229,6 +227,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
229VALGRIND_LIBS = @VALGRIND_LIBS@ 227VALGRIND_LIBS = @VALGRIND_LIBS@
230VERSION = @VERSION@ 228VERSION = @VERSION@
231VMAJ = @VMAJ@ 229VMAJ = @VMAJ@
230WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
231WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
232WIN32_CFLAGS = @WIN32_CFLAGS@ 232WIN32_CFLAGS = @WIN32_CFLAGS@
233WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 233WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
234XCB_CFLAGS = @XCB_CFLAGS@ 234XCB_CFLAGS = @XCB_CFLAGS@
@@ -310,6 +310,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
310evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 310evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
311evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 311evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
312evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 312evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
313evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
314evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
315evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
316evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
313evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 317evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
314evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 318evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
315evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 319evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/canvas/evas_callbacks.c b/libraries/evas/src/lib/canvas/evas_callbacks.c
index 33b93bc..93f34f2 100644
--- a/libraries/evas/src/lib/canvas/evas_callbacks.c
+++ b/libraries/evas/src/lib/canvas/evas_callbacks.c
@@ -23,7 +23,7 @@ _evas_post_event_callback_call(Evas *e)
23 { 23 {
24 if (!pc->func((void*)pc->data, e)) skip = 1; 24 if (!pc->func((void*)pc->data, e)) skip = 1;
25 } 25 }
26 EVAS_MEMPOOL_FREE(_mp_pc, pc); 26 EVAS_MEMPOOL_FREE(_mp_pc, pc);
27 } 27 }
28 _evas_unwalk(e); 28 _evas_unwalk(e);
29} 29}
@@ -32,10 +32,10 @@ void
32_evas_post_event_callback_free(Evas *e) 32_evas_post_event_callback_free(Evas *e)
33{ 33{
34 Evas_Post_Callback *pc; 34 Evas_Post_Callback *pc;
35 35
36 EINA_LIST_FREE(e->post_events, pc) 36 EINA_LIST_FREE(e->post_events, pc)
37 { 37 {
38 EVAS_MEMPOOL_FREE(_mp_pc, pc); 38 EVAS_MEMPOOL_FREE(_mp_pc, pc);
39 } 39 }
40 _evas_unwalk(e); 40 _evas_unwalk(e);
41} 41}
@@ -48,15 +48,15 @@ evas_event_callback_list_post_free(Eina_Inlist **list)
48 /* MEM OK */ 48 /* MEM OK */
49 for (l = *list; l;) 49 for (l = *list; l;)
50 { 50 {
51 Evas_Func_Node *fn; 51 Evas_Func_Node *fn;
52 52
53 fn = (Evas_Func_Node *)l; 53 fn = (Evas_Func_Node *)l;
54 l = l->next; 54 l = l->next;
55 if (fn->delete_me) 55 if (fn->delete_me)
56 { 56 {
57 *list = eina_inlist_remove(*list, EINA_INLIST_GET(fn)); 57 *list = eina_inlist_remove(*list, EINA_INLIST_GET(fn));
58 EVAS_MEMPOOL_FREE(_mp_fn, fn); 58 EVAS_MEMPOOL_FREE(_mp_fn, fn);
59 } 59 }
60 } 60 }
61} 61}
62 62
@@ -70,7 +70,7 @@ evas_object_event_callback_clear(Evas_Object *obj)
70 if (!obj->callbacks->callbacks) 70 if (!obj->callbacks->callbacks)
71 { 71 {
72 EVAS_MEMPOOL_FREE(_mp_cb, obj->callbacks); 72 EVAS_MEMPOOL_FREE(_mp_cb, obj->callbacks);
73 obj->callbacks = NULL; 73 obj->callbacks = NULL;
74 } 74 }
75} 75}
76 76
@@ -84,7 +84,7 @@ evas_event_callback_clear(Evas *e)
84 if (!e->callbacks->callbacks) 84 if (!e->callbacks->callbacks)
85 { 85 {
86 EVAS_MEMPOOL_FREE(_mp_cb, e->callbacks); 86 EVAS_MEMPOOL_FREE(_mp_cb, e->callbacks);
87 e->callbacks = NULL; 87 e->callbacks = NULL;
88 } 88 }
89} 89}
90 90
@@ -95,7 +95,7 @@ evas_object_event_callback_all_del(Evas_Object *obj)
95 95
96 if (!obj->callbacks) return; 96 if (!obj->callbacks) return;
97 EINA_INLIST_FOREACH(obj->callbacks->callbacks, fn) 97 EINA_INLIST_FOREACH(obj->callbacks->callbacks, fn)
98 fn->delete_me = 1; 98 fn->delete_me = 1;
99} 99}
100 100
101void 101void
@@ -115,7 +115,7 @@ evas_event_callback_all_del(Evas *e)
115 115
116 if (!e->callbacks) return; 116 if (!e->callbacks) return;
117 EINA_INLIST_FOREACH(e->callbacks->callbacks, fn) 117 EINA_INLIST_FOREACH(e->callbacks->callbacks, fn)
118 fn->delete_me = 1; 118 fn->delete_me = 1;
119} 119}
120 120
121void 121void
@@ -136,25 +136,25 @@ evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info)
136 _evas_walk(e); 136 _evas_walk(e);
137 if (e->callbacks) 137 if (e->callbacks)
138 { 138 {
139 l_mod = &e->callbacks->callbacks; 139 l_mod = &e->callbacks->callbacks;
140 e->callbacks->walking_list++; 140 e->callbacks->walking_list++;
141 for (l = *l_mod; l; l = l->next) 141 for (l = *l_mod; l; l = l->next)
142 { 142 {
143 Evas_Func_Node *fn; 143 Evas_Func_Node *fn;
144 144
145 fn = (Evas_Func_Node *)l; 145 fn = (Evas_Func_Node *)l;
146 if ((fn->type == type) && (!fn->delete_me)) 146 if ((fn->type == type) && (!fn->delete_me))
147 { 147 {
148 Evas_Event_Cb func = fn->func; 148 Evas_Event_Cb func = fn->func;
149 if (func) 149 if (func)
150 func(fn->data, e, event_info); 150 func(fn->data, e, event_info);
151 } 151 }
152 if (e->delete_me) break; 152 if (e->delete_me) break;
153 } 153 }
154 e->callbacks->walking_list--; 154 e->callbacks->walking_list--;
155 if (!e->callbacks->walking_list) 155 if (!e->callbacks->walking_list)
156 { 156 {
157 evas_event_callback_clear(e); 157 evas_event_callback_clear(e);
158 l_mod = NULL; 158 l_mod = NULL;
159 } 159 }
160 } 160 }
@@ -162,7 +162,7 @@ evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info)
162} 162}
163 163
164void 164void
165evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void *event_info) 165evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void *event_info, int event_id)
166{ 166{
167 /* MEM OK */ 167 /* MEM OK */
168 Eina_Inlist **l_mod = NULL, *l; 168 Eina_Inlist **l_mod = NULL, *l;
@@ -170,67 +170,67 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void
170 Evas *e; 170 Evas *e;
171 171
172 if ((obj->delete_me) || (!obj->layer)) return; 172 if ((obj->delete_me) || (!obj->layer)) return;
173 if ((obj->last_event == _evas_event_counter) && 173 if ((obj->last_event == event_id) &&
174 (obj->last_event_type == type)) return; 174 (obj->last_event_type == type)) return;
175 obj->last_event = _evas_event_counter; 175 obj->last_event = event_id;
176 obj->last_event_type = type; 176 obj->last_event_type = type;
177 if (!(e = obj->layer->evas)) return; 177 if (!(e = obj->layer->evas)) return;
178 178
179 _evas_walk(e); 179 _evas_walk(e);
180 if (obj->callbacks) 180 if (obj->callbacks)
181 { 181 {
182 l_mod = &obj->callbacks->callbacks; 182 l_mod = &obj->callbacks->callbacks;
183 switch (type) 183 switch (type)
184 { 184 {
185 case EVAS_CALLBACK_MOUSE_DOWN: 185 case EVAS_CALLBACK_MOUSE_DOWN:
186 { 186 {
187 Evas_Event_Mouse_Down *ev = event_info; 187 Evas_Event_Mouse_Down *ev = event_info;
188 188
189 flags = ev->flags; 189 flags = ev->flags;
190 if (ev->flags & (EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK)) 190 if (ev->flags & (EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK))
191 { 191 {
192 if (obj->last_mouse_down_counter < (e->last_mouse_down_counter - 1)) 192 if (obj->last_mouse_down_counter < (e->last_mouse_down_counter - 1))
193 ev->flags &= ~(EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK); 193 ev->flags &= ~(EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK);
194 } 194 }
195 obj->last_mouse_down_counter = e->last_mouse_down_counter; 195 obj->last_mouse_down_counter = e->last_mouse_down_counter;
196 break; 196 break;
197 } 197 }
198 case EVAS_CALLBACK_MOUSE_UP: 198 case EVAS_CALLBACK_MOUSE_UP:
199 { 199 {
200 Evas_Event_Mouse_Up *ev = event_info; 200 Evas_Event_Mouse_Up *ev = event_info;
201 201
202 flags = ev->flags; 202 flags = ev->flags;
203 if (ev->flags & (EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK)) 203 if (ev->flags & (EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK))
204 { 204 {
205 if (obj->last_mouse_up_counter < (e->last_mouse_up_counter - 1)) 205 if (obj->last_mouse_up_counter < (e->last_mouse_up_counter - 1))
206 ev->flags &= ~(EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK); 206 ev->flags &= ~(EVAS_BUTTON_DOUBLE_CLICK | EVAS_BUTTON_TRIPLE_CLICK);
207 } 207 }
208 obj->last_mouse_up_counter = e->last_mouse_up_counter; 208 obj->last_mouse_up_counter = e->last_mouse_up_counter;
209 break; 209 break;
210 } 210 }
211 default: 211 default:
212 break; 212 break;
213 } 213 }
214 obj->callbacks->walking_list++; 214 obj->callbacks->walking_list++;
215 for (l = *l_mod; l; l = l->next) 215 for (l = *l_mod; l; l = l->next)
216 { 216 {
217 Evas_Func_Node *fn; 217 Evas_Func_Node *fn;
218 218
219 fn = (Evas_Func_Node *)l; 219 fn = (Evas_Func_Node *)l;
220 if ((fn->type == type) && (!fn->delete_me)) 220 if ((fn->type == type) && (!fn->delete_me))
221 { 221 {
222 Evas_Object_Event_Cb func = fn->func; 222 Evas_Object_Event_Cb func = fn->func;
223 if (func) 223 if (func)
224 func(fn->data, obj->layer->evas, obj, event_info); 224 func(fn->data, obj->layer->evas, obj, event_info);
225 } 225 }
226 if (obj->delete_me) break; 226 if (obj->delete_me) break;
227 } 227 }
228 obj->callbacks->walking_list--; 228 obj->callbacks->walking_list--;
229 if (!obj->callbacks->walking_list) 229 if (!obj->callbacks->walking_list)
230 { 230 {
231 evas_object_event_callback_clear(obj); 231 evas_object_event_callback_clear(obj);
232 l_mod = NULL; 232 l_mod = NULL;
233 } 233 }
234 234
235 if (type == EVAS_CALLBACK_MOUSE_DOWN) 235 if (type == EVAS_CALLBACK_MOUSE_DOWN)
236 { 236 {
@@ -246,12 +246,12 @@ evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void
246 246
247 if (!((obj->no_propagate) && (l_mod) && (*l_mod))) 247 if (!((obj->no_propagate) && (l_mod) && (*l_mod)))
248 { 248 {
249 if (!obj->no_propagate) 249 if (!obj->no_propagate)
250 { 250 {
251 if ((obj->smart.parent) && (type != EVAS_CALLBACK_FREE) && 251 if ((obj->smart.parent) && (type != EVAS_CALLBACK_FREE) &&
252 (type <= EVAS_CALLBACK_KEY_UP)) 252 (type <= EVAS_CALLBACK_KEY_UP))
253 evas_object_event_callback_call(obj->smart.parent, type, event_info); 253 evas_object_event_callback_call(obj->smart.parent, type, event_info, event_id);
254 } 254 }
255 } 255 }
256 _evas_unwalk(e); 256 _evas_unwalk(e);
257} 257}
@@ -263,16 +263,16 @@ _callback_priority_cmp(const void *_a, const void *_b)
263 a = EINA_INLIST_CONTAINER_GET(_a, Evas_Func_Node); 263 a = EINA_INLIST_CONTAINER_GET(_a, Evas_Func_Node);
264 b = EINA_INLIST_CONTAINER_GET(_b, Evas_Func_Node); 264 b = EINA_INLIST_CONTAINER_GET(_b, Evas_Func_Node);
265 if (a->priority < b->priority) 265 if (a->priority < b->priority)
266 return -1; 266 return -1;
267 else 267 else
268 return 1; 268 return 1;
269} 269}
270 270
271EAPI void 271EAPI void
272evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data) 272evas_object_event_callback_add(Evas_Object *obj, Evas_Callback_Type type, Evas_Object_Event_Cb func, const void *data)
273{ 273{
274 evas_object_event_callback_priority_add(obj, type, 274 evas_object_event_callback_priority_add(obj, type,
275 EVAS_CALLBACK_PRIORITY_DEFAULT, func, data); 275 EVAS_CALLBACK_PRIORITY_DEFAULT, func, data);
276} 276}
277 277
278EAPI void 278EAPI void
@@ -294,7 +294,7 @@ evas_object_event_callback_priority_add(Evas_Object *obj, Evas_Callback_Type typ
294 if (!obj->callbacks) return; 294 if (!obj->callbacks) return;
295 EVAS_MEMPOOL_PREP(_mp_cb, obj->callbacks, Evas_Callbacks); 295 EVAS_MEMPOOL_PREP(_mp_cb, obj->callbacks, Evas_Callbacks);
296 } 296 }
297 297
298 EVAS_MEMPOOL_INIT(_mp_fn, "evas_func_node", Evas_Func_Node, 2048, ); 298 EVAS_MEMPOOL_INIT(_mp_fn, "evas_func_node", Evas_Func_Node, 2048, );
299 fn = EVAS_MEMPOOL_ALLOC(_mp_fn, Evas_Func_Node); 299 fn = EVAS_MEMPOOL_ALLOC(_mp_fn, Evas_Func_Node);
300 if (!fn) return; 300 if (!fn) return;
@@ -305,8 +305,8 @@ evas_object_event_callback_priority_add(Evas_Object *obj, Evas_Callback_Type typ
305 fn->priority = priority; 305 fn->priority = priority;
306 306
307 obj->callbacks->callbacks = 307 obj->callbacks->callbacks =
308 eina_inlist_sorted_insert(obj->callbacks->callbacks, EINA_INLIST_GET(fn), 308 eina_inlist_sorted_insert(obj->callbacks->callbacks, EINA_INLIST_GET(fn),
309 _callback_priority_cmp); 309 _callback_priority_cmp);
310} 310}
311 311
312EAPI void * 312EAPI void *
@@ -325,17 +325,17 @@ evas_object_event_callback_del(Evas_Object *obj, Evas_Callback_Type type, Evas_O
325 325
326 EINA_INLIST_FOREACH(obj->callbacks->callbacks, fn) 326 EINA_INLIST_FOREACH(obj->callbacks->callbacks, fn)
327 { 327 {
328 if ((fn->func == func) && (fn->type == type) && (!fn->delete_me)) 328 if ((fn->func == func) && (fn->type == type) && (!fn->delete_me))
329 { 329 {
330 void *tmp; 330 void *tmp;
331 331
332 tmp = fn->data; 332 tmp = fn->data;
333 fn->delete_me = 1; 333 fn->delete_me = 1;
334 obj->callbacks->deletions_waiting = 1; 334 obj->callbacks->deletions_waiting = 1;
335 if (!obj->callbacks->walking_list) 335 if (!obj->callbacks->walking_list)
336 evas_object_event_callback_clear(obj); 336 evas_object_event_callback_clear(obj);
337 return tmp; 337 return tmp;
338 } 338 }
339 } 339 }
340 return NULL; 340 return NULL;
341} 341}
@@ -356,17 +356,17 @@ evas_object_event_callback_del_full(Evas_Object *obj, Evas_Callback_Type type, E
356 356
357 EINA_INLIST_FOREACH(obj->callbacks->callbacks, fn) 357 EINA_INLIST_FOREACH(obj->callbacks->callbacks, fn)
358 { 358 {
359 if ((fn->func == func) && (fn->type == type) && (fn->data == data) && (!fn->delete_me)) 359 if ((fn->func == func) && (fn->type == type) && (fn->data == data) && (!fn->delete_me))
360 { 360 {
361 void *tmp; 361 void *tmp;
362 362
363 tmp = fn->data; 363 tmp = fn->data;
364 fn->delete_me = 1; 364 fn->delete_me = 1;
365 obj->callbacks->deletions_waiting = 1; 365 obj->callbacks->deletions_waiting = 1;
366 if (!obj->callbacks->walking_list) 366 if (!obj->callbacks->walking_list)
367 evas_object_event_callback_clear(obj); 367 evas_object_event_callback_clear(obj);
368 return tmp; 368 return tmp;
369 } 369 }
370 } 370 }
371 return NULL; 371 return NULL;
372} 372}
@@ -375,7 +375,7 @@ EAPI void
375evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data) 375evas_event_callback_add(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func, const void *data)
376{ 376{
377 evas_event_callback_priority_add(e, type, EVAS_CALLBACK_PRIORITY_DEFAULT, 377 evas_event_callback_priority_add(e, type, EVAS_CALLBACK_PRIORITY_DEFAULT,
378 func, data); 378 func, data);
379} 379}
380 380
381EAPI void 381EAPI void
@@ -397,7 +397,7 @@ evas_event_callback_priority_add(Evas *e, Evas_Callback_Type type, Evas_Callback
397 if (!e->callbacks) return; 397 if (!e->callbacks) return;
398 EVAS_MEMPOOL_PREP(_mp_cb, e->callbacks, Evas_Callbacks); 398 EVAS_MEMPOOL_PREP(_mp_cb, e->callbacks, Evas_Callbacks);
399 } 399 }
400 400
401 EVAS_MEMPOOL_INIT(_mp_fn, "evas_func_node", Evas_Func_Node, 2048, ); 401 EVAS_MEMPOOL_INIT(_mp_fn, "evas_func_node", Evas_Func_Node, 2048, );
402 fn = EVAS_MEMPOOL_ALLOC(_mp_fn, Evas_Func_Node); 402 fn = EVAS_MEMPOOL_ALLOC(_mp_fn, Evas_Func_Node);
403 if (!fn) return; 403 if (!fn) return;
@@ -408,7 +408,7 @@ evas_event_callback_priority_add(Evas *e, Evas_Callback_Type type, Evas_Callback
408 fn->priority = priority; 408 fn->priority = priority;
409 409
410 e->callbacks->callbacks = eina_inlist_sorted_insert(e->callbacks->callbacks, 410 e->callbacks->callbacks = eina_inlist_sorted_insert(e->callbacks->callbacks,
411 EINA_INLIST_GET(fn), _callback_priority_cmp); 411 EINA_INLIST_GET(fn), _callback_priority_cmp);
412} 412}
413 413
414EAPI void * 414EAPI void *
@@ -427,17 +427,17 @@ evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func)
427 427
428 EINA_INLIST_FOREACH(e->callbacks->callbacks, fn) 428 EINA_INLIST_FOREACH(e->callbacks->callbacks, fn)
429 { 429 {
430 if ((fn->func == func) && (fn->type == type) && (!fn->delete_me)) 430 if ((fn->func == func) && (fn->type == type) && (!fn->delete_me))
431 { 431 {
432 void *data; 432 void *data;
433 433
434 data = fn->data; 434 data = fn->data;
435 fn->delete_me = 1; 435 fn->delete_me = 1;
436 e->callbacks->deletions_waiting = 1; 436 e->callbacks->deletions_waiting = 1;
437 if (!e->callbacks->walking_list) 437 if (!e->callbacks->walking_list)
438 evas_event_callback_clear(e); 438 evas_event_callback_clear(e);
439 return data; 439 return data;
440 } 440 }
441 } 441 }
442 return NULL; 442 return NULL;
443} 443}
@@ -458,17 +458,17 @@ evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_Event_Cb fun
458 458
459 EINA_INLIST_FOREACH(e->callbacks->callbacks, fn) 459 EINA_INLIST_FOREACH(e->callbacks->callbacks, fn)
460 { 460 {
461 if ((fn->func == func) && (fn->type == type) && (fn->data == data) && (!fn->delete_me)) 461 if ((fn->func == func) && (fn->type == type) && (fn->data == data) && (!fn->delete_me))
462 { 462 {
463 void *tmp; 463 void *tmp;
464 464
465 tmp = fn->data; 465 tmp = fn->data;
466 fn->delete_me = 1; 466 fn->delete_me = 1;
467 e->callbacks->deletions_waiting = 1; 467 e->callbacks->deletions_waiting = 1;
468 if (!e->callbacks->walking_list) 468 if (!e->callbacks->walking_list)
469 evas_event_callback_clear(e); 469 evas_event_callback_clear(e);
470 return tmp; 470 return tmp;
471 } 471 }
472 } 472 }
473 return NULL; 473 return NULL;
474} 474}
@@ -477,17 +477,17 @@ EAPI void
477evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func, const void *data) 477evas_post_event_callback_push(Evas *e, Evas_Object_Event_Post_Cb func, const void *data)
478{ 478{
479 Evas_Post_Callback *pc; 479 Evas_Post_Callback *pc;
480 480
481 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 481 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
482 return; 482 return;
483 MAGIC_CHECK_END(); 483 MAGIC_CHECK_END();
484 484
485 EVAS_MEMPOOL_INIT(_mp_pc, "evas_post_callback", Evas_Post_Callback, 64, ); 485 EVAS_MEMPOOL_INIT(_mp_pc, "evas_post_callback", Evas_Post_Callback, 64, );
486 pc = EVAS_MEMPOOL_ALLOC(_mp_pc, Evas_Post_Callback); 486 pc = EVAS_MEMPOOL_ALLOC(_mp_pc, Evas_Post_Callback);
487 if (!pc) return; 487 if (!pc) return;
488 EVAS_MEMPOOL_PREP(_mp_pc, pc, Evas_Post_Callback); 488 EVAS_MEMPOOL_PREP(_mp_pc, pc, Evas_Post_Callback);
489 if (e->delete_me) return; 489 if (e->delete_me) return;
490 490
491 pc->func = func; 491 pc->func = func;
492 pc->data = data; 492 pc->data = data;
493 e->post_events = eina_list_prepend(e->post_events, pc); 493 e->post_events = eina_list_prepend(e->post_events, pc);
@@ -498,11 +498,11 @@ evas_post_event_callback_remove(Evas *e, Evas_Object_Event_Post_Cb func)
498{ 498{
499 Evas_Post_Callback *pc; 499 Evas_Post_Callback *pc;
500 Eina_List *l; 500 Eina_List *l;
501 501
502 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 502 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
503 return; 503 return;
504 MAGIC_CHECK_END(); 504 MAGIC_CHECK_END();
505 505
506 EINA_LIST_FOREACH(e->post_events, l, pc) 506 EINA_LIST_FOREACH(e->post_events, l, pc)
507 { 507 {
508 if (pc->func == func) 508 if (pc->func == func)
@@ -518,11 +518,11 @@ evas_post_event_callback_remove_full(Evas *e, Evas_Object_Event_Post_Cb func, co
518{ 518{
519 Evas_Post_Callback *pc; 519 Evas_Post_Callback *pc;
520 Eina_List *l; 520 Eina_List *l;
521 521
522 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 522 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
523 return; 523 return;
524 MAGIC_CHECK_END(); 524 MAGIC_CHECK_END();
525 525
526 EINA_LIST_FOREACH(e->post_events, l, pc) 526 EINA_LIST_FOREACH(e->post_events, l, pc)
527 { 527 {
528 if ((pc->func == func) && (pc->data == data)) 528 if ((pc->func == func) && (pc->data == data))
diff --git a/libraries/evas/src/lib/canvas/evas_events.c b/libraries/evas/src/lib/canvas/evas_events.c
index 99ecf8c..9b7077e 100644
--- a/libraries/evas/src/lib/canvas/evas_events.c
+++ b/libraries/evas/src/lib/canvas/evas_events.c
@@ -1,6 +1,11 @@
1#include "evas_common.h" 1#include "evas_common.h"
2#include "evas_private.h" 2#include "evas_private.h"
3 3
4static Eina_List *
5_evas_event_object_list_in_get(Evas *e, Eina_List *in,
6 const Eina_Inlist *list, Evas_Object *stop,
7 int x, int y, int *no_rep);
8
4static void 9static void
5_evas_event_havemap_adjust(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Eina_Bool mouse_grabbed) 10_evas_event_havemap_adjust(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Eina_Bool mouse_grabbed)
6{ 11{
@@ -16,13 +21,17 @@ _evas_event_havemap_adjust(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, Eina_
16} 21}
17 22
18static Eina_List * 23static Eina_List *
19_evas_event_object_list_in_get(Evas *e, Eina_List *in, 24_evas_event_object_list_raw_in_get(Evas *e, Eina_List *in,
20 const Eina_Inlist *list, Evas_Object *stop, 25 const Eina_Inlist *list, Evas_Object *stop,
21 int x, int y, int *no_rep) 26 int x, int y, int *no_rep)
22{ 27{
23 Evas_Object *obj; 28 Evas_Object *obj;
29 int inside;
30
24 if (!list) return in; 31 if (!list) return in;
25 EINA_INLIST_REVERSE_FOREACH(list, obj) 32 for (obj = _EINA_INLIST_CONTAINER(obj, list);
33 obj;
34 obj = _EINA_INLIST_CONTAINER(obj, EINA_INLIST_GET(obj)->prev))
26 { 35 {
27 if (obj == stop) 36 if (obj == stop)
28 { 37 {
@@ -37,9 +46,9 @@ _evas_event_object_list_in_get(Evas *e, Eina_List *in,
37 if (obj->smart.smart) 46 if (obj->smart.smart)
38 { 47 {
39 int norep = 0; 48 int norep = 0;
40 int inside;
41 49
42 if (((obj->cur.usemap) && (obj->cur.map) && (obj->cur.map->count == 4))) 50 if ((obj->cur.usemap) && (obj->cur.map) &&
51 (obj->cur.map->count == 4))
43 { 52 {
44 inside = evas_object_is_in_output_rect(obj, x, y, 1, 1); 53 inside = evas_object_is_in_output_rect(obj, x, y, 1, 1);
45 if (inside) 54 if (inside)
@@ -57,7 +66,8 @@ _evas_event_object_list_in_get(Evas *e, Eina_List *in,
57 evas_object_smart_members_get_direct(obj), 66 evas_object_smart_members_get_direct(obj),
58 stop, 67 stop,
59 obj->cur.geometry.x + obj->cur.map->mx, 68 obj->cur.geometry.x + obj->cur.map->mx,
60 obj->cur.geometry.y + obj->cur.map->my, &norep); 69 obj->cur.geometry.y + obj->cur.map->my,
70 &norep);
61 } 71 }
62 } 72 }
63 } 73 }
@@ -69,19 +79,24 @@ _evas_event_object_list_in_get(Evas *e, Eina_List *in,
69 } 79 }
70 if (norep) 80 if (norep)
71 { 81 {
72 if (!obj->repeat_events) *no_rep = 1; 82 if (!obj->repeat_events)
73 return in; 83 {
84 *no_rep = 1;
85 return in;
86 }
74 } 87 }
75 } 88 }
76 else 89 else
77 { 90 {
78 int inside = evas_object_is_in_output_rect(obj, x, y, 1, 1); 91 inside = evas_object_is_in_output_rect(obj, x, y, 1, 1);
79 92
80 if (((obj->cur.usemap) && (obj->cur.map) && (obj->cur.map->count == 4))) 93 if ((obj->cur.usemap) && (obj->cur.map) &&
94 (obj->cur.map->count == 4))
81 { 95 {
82 if ((inside) && (!evas_map_coords_get(obj->cur.map, x, y, 96 if ((inside) &&
83 &(obj->cur.map->mx), 97 (!evas_map_coords_get(obj->cur.map, x, y,
84 &(obj->cur.map->my), 0))) 98 &(obj->cur.map->mx),
99 &(obj->cur.map->my), 0)))
85 { 100 {
86 inside = 0; 101 inside = 0;
87 } 102 }
@@ -105,6 +120,16 @@ _evas_event_object_list_in_get(Evas *e, Eina_List *in,
105 return in; 120 return in;
106} 121}
107 122
123static Eina_List *
124_evas_event_object_list_in_get(Evas *e, Eina_List *in,
125 const Eina_Inlist *list, Evas_Object *stop,
126 int x, int y, int *no_rep)
127{
128 if (!list) return NULL;
129 return _evas_event_object_list_raw_in_get(e, in, list->last, stop,
130 x, y, no_rep);
131}
132
108Eina_List * 133Eina_List *
109evas_event_objects_event_list(Evas *e, Evas_Object *stop, int x, int y) 134evas_event_objects_event_list(Evas *e, Evas_Object *stop, int x, int y)
110{ 135{
@@ -136,6 +161,24 @@ evas_event_list_copy(Eina_List *list)
136/* public functions */ 161/* public functions */
137 162
138EAPI void 163EAPI void
164evas_event_default_flags_set(Evas *e, Evas_Event_Flags flags)
165{
166 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
167 return;
168 MAGIC_CHECK_END();
169 e->default_event_flags = flags;
170}
171
172EAPI Evas_Event_Flags
173evas_event_default_flags_get(const Evas *e)
174{
175 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
176 return EVAS_EVENT_FLAG_ON_HOLD;
177 MAGIC_CHECK_END();
178 return e->default_event_flags;
179}
180
181EAPI void
139evas_event_freeze(Evas *e) 182evas_event_freeze(Evas *e)
140{ 183{
141 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 184 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
@@ -197,6 +240,8 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
197 Eina_List *l, *copy; 240 Eina_List *l, *copy;
198 Evas_Event_Mouse_Down ev; 241 Evas_Event_Mouse_Down ev;
199 Evas_Object *obj; 242 Evas_Object *obj;
243 int addgrab = 0;
244 int event_id = 0;
200 245
201 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 246 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
202 return; 247 return;
@@ -205,12 +250,14 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
205 if ((b < 1) || (b > 32)) return; 250 if ((b < 1) || (b > 32)) return;
206 251
207 e->pointer.button |= (1 << (b - 1)); 252 e->pointer.button |= (1 << (b - 1));
253 e->pointer.downs++;
208 254
209 if (e->events_frozen > 0) return; 255 if (e->events_frozen > 0) return;
210 e->last_timestamp = timestamp; 256 e->last_timestamp = timestamp;
211 257
212 _evas_object_event_new(); 258 _evas_object_event_new();
213 259
260 event_id = _evas_event_counter;
214 ev.button = b; 261 ev.button = b;
215 ev.output.x = e->pointer.x; 262 ev.output.x = e->pointer.x;
216 ev.output.y = e->pointer.y; 263 ev.output.y = e->pointer.y;
@@ -221,7 +268,7 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
221 ev.locks = &(e->locks); 268 ev.locks = &(e->locks);
222 ev.flags = flags; 269 ev.flags = flags;
223 ev.timestamp = timestamp; 270 ev.timestamp = timestamp;
224 ev.event_flags = EVAS_EVENT_FLAG_NONE; 271 ev.event_flags = e->default_event_flags;
225 272
226 _evas_walk(e); 273 _evas_walk(e);
227 /* append new touch point to the touch point list */ 274 /* append new touch point to the touch point list */
@@ -238,14 +285,23 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
238 e->pointer.object.in = eina_list_free(e->pointer.object.in); 285 e->pointer.object.in = eina_list_free(e->pointer.object.in);
239 /* and set up the new one */ 286 /* and set up the new one */
240 e->pointer.object.in = ins; 287 e->pointer.object.in = ins;
288 /* adjust grabbed count by the nuymber of currently held down
289 * fingers/buttons */
290 if (e->pointer.downs > 1) addgrab = e->pointer.downs - 1;
241 } 291 }
242 copy = evas_event_list_copy(e->pointer.object.in); 292 copy = evas_event_list_copy(e->pointer.object.in);
243 EINA_LIST_FOREACH(copy, l, obj) 293 EINA_LIST_FOREACH(copy, l, obj)
244 { 294 {
245 if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB) 295 if ((obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_AUTOGRAB) ||
296 (obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN))
246 { 297 {
247 obj->mouse_grabbed++; 298 obj->mouse_grabbed += addgrab + 1;
248 e->pointer.mouse_grabbed++; 299 e->pointer.mouse_grabbed += addgrab + 1;
300 if (obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN)
301 {
302 e->pointer.nogrep++;
303 break;
304 }
249 } 305 }
250 } 306 }
251 EINA_LIST_FOREACH(copy, l, obj) 307 EINA_LIST_FOREACH(copy, l, obj)
@@ -256,8 +312,10 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
256 _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed); 312 _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed);
257 313
258 if (e->events_frozen <= 0) 314 if (e->events_frozen <= 0)
259 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_DOWN, &ev); 315 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_DOWN, &ev, event_id);
260 if (e->delete_me) break; 316 if (e->delete_me) break;
317 if (obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN)
318 break;
261 } 319 }
262 if (copy) eina_list_free(copy); 320 if (copy) eina_list_free(copy);
263 e->last_mouse_down_counter++; 321 e->last_mouse_down_counter++;
@@ -274,9 +332,11 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
274 Evas_Event_Mouse_Out ev; 332 Evas_Event_Mouse_Out ev;
275 Evas_Object *obj; 333 Evas_Object *obj;
276 int post_called = 0; 334 int post_called = 0;
335 int event_id = 0;
277 336
278 _evas_object_event_new(); 337 _evas_object_event_new();
279 338
339 event_id = _evas_event_counter;
280 ev.buttons = e->pointer.button; 340 ev.buttons = e->pointer.button;
281 ev.output.x = e->pointer.x; 341 ev.output.x = e->pointer.x;
282 ev.output.y = e->pointer.y; 342 ev.output.y = e->pointer.y;
@@ -286,7 +346,7 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
286 ev.modifiers = &(e->modifiers); 346 ev.modifiers = &(e->modifiers);
287 ev.locks = &(e->locks); 347 ev.locks = &(e->locks);
288 ev.timestamp = timestamp; 348 ev.timestamp = timestamp;
289 ev.event_flags = EVAS_EVENT_FLAG_NONE; 349 ev.event_flags = e->default_event_flags;
290 350
291 /* get new list of ins */ 351 /* get new list of ins */
292 ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y); 352 ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y);
@@ -304,7 +364,7 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
304 { 364 {
305 obj->mouse_in = 0; 365 obj->mouse_in = 0;
306 if (e->events_frozen <= 0) 366 if (e->events_frozen <= 0)
307 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev); 367 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev, event_id);
308 } 368 }
309 } 369 }
310 if (e->delete_me) break; 370 if (e->delete_me) break;
@@ -319,6 +379,7 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
319 379
320 _evas_object_event_new(); 380 _evas_object_event_new();
321 381
382 event_id = _evas_event_counter;
322 ev_in.buttons = e->pointer.button; 383 ev_in.buttons = e->pointer.button;
323 ev_in.output.x = e->pointer.x; 384 ev_in.output.x = e->pointer.x;
324 ev_in.output.y = e->pointer.y; 385 ev_in.output.y = e->pointer.y;
@@ -328,7 +389,7 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
328 ev_in.modifiers = &(e->modifiers); 389 ev_in.modifiers = &(e->modifiers);
329 ev_in.locks = &(e->locks); 390 ev_in.locks = &(e->locks);
330 ev_in.timestamp = timestamp; 391 ev_in.timestamp = timestamp;
331 ev_in.event_flags = EVAS_EVENT_FLAG_NONE; 392 ev_in.event_flags = e->default_event_flags;
332 393
333 EINA_LIST_FOREACH(ins, l, obj_itr) 394 EINA_LIST_FOREACH(ins, l, obj_itr)
334 { 395 {
@@ -341,7 +402,7 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
341 { 402 {
342 obj_itr->mouse_in = 1; 403 obj_itr->mouse_in = 1;
343 if (e->events_frozen <= 0) 404 if (e->events_frozen <= 0)
344 evas_object_event_callback_call(obj_itr, EVAS_CALLBACK_MOUSE_IN, &ev_in); 405 evas_object_event_callback_call(obj_itr, EVAS_CALLBACK_MOUSE_IN, &ev_in, event_id);
345 } 406 }
346 } 407 }
347 if (e->delete_me) break; 408 if (e->delete_me) break;
@@ -383,6 +444,7 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
383 if ((b < 1) || (b > 32)) return; 444 if ((b < 1) || (b > 32)) return;
384 445
385 e->pointer.button &= ~(1 << (b - 1)); 446 e->pointer.button &= ~(1 << (b - 1));
447 e->pointer.downs--;
386 448
387 if (e->events_frozen > 0) return; 449 if (e->events_frozen > 0) return;
388 e->last_timestamp = timestamp; 450 e->last_timestamp = timestamp;
@@ -390,9 +452,11 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
390 { 452 {
391 Evas_Event_Mouse_Up ev; 453 Evas_Event_Mouse_Up ev;
392 Evas_Object *obj; 454 Evas_Object *obj;
455 int event_id = 0;
393 456
394 _evas_object_event_new(); 457 _evas_object_event_new();
395 458
459 event_id = _evas_event_counter;
396 ev.button = b; 460 ev.button = b;
397 ev.output.x = e->pointer.x; 461 ev.output.x = e->pointer.x;
398 ev.output.y = e->pointer.y; 462 ev.output.y = e->pointer.y;
@@ -403,7 +467,7 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
403 ev.locks = &(e->locks); 467 ev.locks = &(e->locks);
404 ev.flags = flags; 468 ev.flags = flags;
405 ev.timestamp = timestamp; 469 ev.timestamp = timestamp;
406 ev.event_flags = EVAS_EVENT_FLAG_NONE; 470 ev.event_flags = e->default_event_flags;
407 471
408 _evas_walk(e); 472 _evas_walk(e);
409 /* update released touch point */ 473 /* update released touch point */
@@ -414,7 +478,7 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
414 ev.canvas.x = e->pointer.x; 478 ev.canvas.x = e->pointer.x;
415 ev.canvas.y = e->pointer.y; 479 ev.canvas.y = e->pointer.y;
416 _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed); 480 _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed);
417 if ((obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB) && 481 if ((obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_AUTOGRAB) &&
418 (obj->mouse_grabbed > 0)) 482 (obj->mouse_grabbed > 0))
419 { 483 {
420 obj->mouse_grabbed--; 484 obj->mouse_grabbed--;
@@ -423,9 +487,14 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
423 if (!obj->delete_me) 487 if (!obj->delete_me)
424 { 488 {
425 if (e->events_frozen <= 0) 489 if (e->events_frozen <= 0)
426 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_UP, &ev); 490 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_UP, &ev, event_id);
427 } 491 }
428 if (e->delete_me) break; 492 if (e->delete_me) break;
493 if (obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN)
494 {
495 if (e->pointer.nogrep > 0) e->pointer.nogrep--;
496 break;
497 }
429 } 498 }
430 if (copy) copy = eina_list_free(copy); 499 if (copy) copy = eina_list_free(copy);
431 e->last_mouse_up_counter++; 500 e->last_mouse_up_counter++;
@@ -442,9 +511,9 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
442 ERR("BUG? e->pointer.mouse_grabbed (=%d) < 0!", 511 ERR("BUG? e->pointer.mouse_grabbed (=%d) < 0!",
443 e->pointer.mouse_grabbed); 512 e->pointer.mouse_grabbed);
444 } 513 }
445 /* remove released touch point from the touch point list */ 514 /* remove released touch point from the touch point list */
446 _evas_touch_point_remove(e, 0); 515 _evas_touch_point_remove(e, 0);
447 516
448 _evas_unwalk(e); 517 _evas_unwalk(e);
449} 518}
450 519
@@ -465,6 +534,7 @@ evas_event_feed_mouse_cancel(Evas *e, unsigned int timestamp, const void *data)
465 if ((e->pointer.button & (1 << i))) 534 if ((e->pointer.button & (1 << i)))
466 evas_event_feed_mouse_up(e, i + 1, 0, timestamp, data); 535 evas_event_feed_mouse_up(e, i + 1, 0, timestamp, data);
467 } 536 }
537 // FIXME: multi cancel too?
468 _evas_unwalk(e); 538 _evas_unwalk(e);
469} 539}
470 540
@@ -474,6 +544,7 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
474 Eina_List *l, *copy; 544 Eina_List *l, *copy;
475 Evas_Event_Mouse_Wheel ev; 545 Evas_Event_Mouse_Wheel ev;
476 Evas_Object *obj; 546 Evas_Object *obj;
547 int event_id = 0;
477 548
478 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 549 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
479 return; 550 return;
@@ -484,6 +555,7 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
484 555
485 _evas_object_event_new(); 556 _evas_object_event_new();
486 557
558 event_id = _evas_event_counter;
487 ev.direction = direction; 559 ev.direction = direction;
488 ev.z = z; 560 ev.z = z;
489 ev.output.x = e->pointer.x; 561 ev.output.x = e->pointer.x;
@@ -494,7 +566,7 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
494 ev.modifiers = &(e->modifiers); 566 ev.modifiers = &(e->modifiers);
495 ev.locks = &(e->locks); 567 ev.locks = &(e->locks);
496 ev.timestamp = timestamp; 568 ev.timestamp = timestamp;
497 ev.event_flags = EVAS_EVENT_FLAG_NONE; 569 ev.event_flags = e->default_event_flags;
498 570
499 _evas_walk(e); 571 _evas_walk(e);
500 copy = evas_event_list_copy(e->pointer.object.in); 572 copy = evas_event_list_copy(e->pointer.object.in);
@@ -505,7 +577,7 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
505 ev.canvas.y = e->pointer.y; 577 ev.canvas.y = e->pointer.y;
506 _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed); 578 _evas_event_havemap_adjust(obj, &ev.canvas.x, &ev.canvas.y, obj->mouse_grabbed);
507 if ((e->events_frozen <= 0) && !evas_event_freezes_through(obj)) 579 if ((e->events_frozen <= 0) && !evas_event_freezes_through(obj))
508 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_WHEEL, &ev); 580 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_WHEEL, &ev, event_id);
509 if (e->delete_me) break; 581 if (e->delete_me) break;
510 } 582 }
511 if (copy) copy = eina_list_free(copy); 583 if (copy) copy = eina_list_free(copy);
@@ -517,6 +589,7 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
517EAPI void 589EAPI void
518evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const void *data) 590evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const void *data)
519{ 591{
592 Evas_Object *nogrep_obj = NULL;
520 int px, py; 593 int px, py;
521//// Evas_Coord pcx, pcy; 594//// Evas_Coord pcx, pcy;
522 595
@@ -553,9 +626,11 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
553 { 626 {
554 Evas_Event_Mouse_Move ev; 627 Evas_Event_Mouse_Move ev;
555 Evas_Object *obj; 628 Evas_Object *obj;
629 int event_id = 0;
556 630
557 _evas_object_event_new(); 631 _evas_object_event_new();
558 632
633 event_id = _evas_event_counter;
559 ev.buttons = e->pointer.button; 634 ev.buttons = e->pointer.button;
560 ev.cur.output.x = e->pointer.x; 635 ev.cur.output.x = e->pointer.x;
561 ev.cur.output.y = e->pointer.y; 636 ev.cur.output.y = e->pointer.y;
@@ -569,7 +644,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
569 ev.modifiers = &(e->modifiers); 644 ev.modifiers = &(e->modifiers);
570 ev.locks = &(e->locks); 645 ev.locks = &(e->locks);
571 ev.timestamp = timestamp; 646 ev.timestamp = timestamp;
572 ev.event_flags = EVAS_EVENT_FLAG_NONE; 647 ev.event_flags = e->default_event_flags;
573 copy = evas_event_list_copy(e->pointer.object.in); 648 copy = evas_event_list_copy(e->pointer.object.in);
574 EINA_LIST_FOREACH(copy, l, obj) 649 EINA_LIST_FOREACH(copy, l, obj)
575 { 650 {
@@ -586,19 +661,28 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
586 (!obj->clip.clipees)) 661 (!obj->clip.clipees))
587 { 662 {
588 if ((px != x) || (py != y)) 663 if ((px != x) || (py != y))
589 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_MOVE, &ev); 664 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id);
590 } 665 }
591 else 666 else
592 outs = eina_list_append(outs, obj); 667 outs = eina_list_append(outs, obj);
668 if ((obj->pointer_mode == EVAS_OBJECT_POINTER_MODE_NOGRAB_NO_REPEAT_UPDOWN) &&
669 (e->pointer.nogrep > 0))
670 {
671 eina_list_free(copy);
672 nogrep_obj = obj;
673 goto nogrep;
674 }
593 if (e->delete_me) break; 675 if (e->delete_me) break;
594 } 676 }
595 _evas_post_event_callback_call(e); 677 _evas_post_event_callback_call(e);
596 } 678 }
597 { 679 {
598 Evas_Event_Mouse_Out ev; 680 Evas_Event_Mouse_Out ev;
681 int event_id = 0;
599 682
600 _evas_object_event_new(); 683 _evas_object_event_new();
601 684
685 event_id = _evas_event_counter;
602 ev.buttons = e->pointer.button; 686 ev.buttons = e->pointer.button;
603 ev.output.x = e->pointer.x; 687 ev.output.x = e->pointer.x;
604 ev.output.y = e->pointer.y; 688 ev.output.y = e->pointer.y;
@@ -608,7 +692,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
608 ev.modifiers = &(e->modifiers); 692 ev.modifiers = &(e->modifiers);
609 ev.locks = &(e->locks); 693 ev.locks = &(e->locks);
610 ev.timestamp = timestamp; 694 ev.timestamp = timestamp;
611 ev.event_flags = EVAS_EVENT_FLAG_NONE; 695 ev.event_flags = e->default_event_flags;
612 696
613 if (copy) eina_list_free(copy); 697 if (copy) eina_list_free(copy);
614 while (outs) 698 while (outs)
@@ -629,7 +713,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
629 if (!obj->delete_me) 713 if (!obj->delete_me)
630 { 714 {
631 if (e->events_frozen <= 0) 715 if (e->events_frozen <= 0)
632 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev); 716 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev, event_id);
633 } 717 }
634 } 718 }
635 } 719 }
@@ -645,9 +729,11 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
645 Evas_Event_Mouse_Out ev2; 729 Evas_Event_Mouse_Out ev2;
646 Evas_Event_Mouse_In ev3; 730 Evas_Event_Mouse_In ev3;
647 Evas_Object *obj; 731 Evas_Object *obj;
732 int event_id = 0, event_id2 = 0;
648 733
649 _evas_object_event_new(); 734 _evas_object_event_new();
650 735
736 event_id = _evas_event_counter;
651 ev.buttons = e->pointer.button; 737 ev.buttons = e->pointer.button;
652 ev.cur.output.x = e->pointer.x; 738 ev.cur.output.x = e->pointer.x;
653 ev.cur.output.y = e->pointer.y; 739 ev.cur.output.y = e->pointer.y;
@@ -661,7 +747,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
661 ev.modifiers = &(e->modifiers); 747 ev.modifiers = &(e->modifiers);
662 ev.locks = &(e->locks); 748 ev.locks = &(e->locks);
663 ev.timestamp = timestamp; 749 ev.timestamp = timestamp;
664 ev.event_flags = EVAS_EVENT_FLAG_NONE; 750 ev.event_flags = e->default_event_flags;
665 751
666 ev2.buttons = e->pointer.button; 752 ev2.buttons = e->pointer.button;
667 ev2.output.x = e->pointer.x; 753 ev2.output.x = e->pointer.x;
@@ -672,7 +758,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
672 ev2.modifiers = &(e->modifiers); 758 ev2.modifiers = &(e->modifiers);
673 ev2.locks = &(e->locks); 759 ev2.locks = &(e->locks);
674 ev2.timestamp = timestamp; 760 ev2.timestamp = timestamp;
675 ev2.event_flags = EVAS_EVENT_FLAG_NONE; 761 ev2.event_flags = e->default_event_flags;
676 762
677 ev3.buttons = e->pointer.button; 763 ev3.buttons = e->pointer.button;
678 ev3.output.x = e->pointer.x; 764 ev3.output.x = e->pointer.x;
@@ -683,7 +769,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
683 ev3.modifiers = &(e->modifiers); 769 ev3.modifiers = &(e->modifiers);
684 ev3.locks = &(e->locks); 770 ev3.locks = &(e->locks);
685 ev3.timestamp = timestamp; 771 ev3.timestamp = timestamp;
686 ev3.event_flags = EVAS_EVENT_FLAG_NONE; 772 ev3.event_flags = e->default_event_flags;
687 773
688 /* get all new in objects */ 774 /* get all new in objects */
689 ins = evas_event_objects_event_list(e, NULL, x, y); 775 ins = evas_event_objects_event_list(e, NULL, x, y);
@@ -711,7 +797,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
711 ev.cur.canvas.x = e->pointer.x; 797 ev.cur.canvas.x = e->pointer.x;
712 ev.cur.canvas.y = e->pointer.y; 798 ev.cur.canvas.y = e->pointer.y;
713 _evas_event_havemap_adjust(obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed); 799 _evas_event_havemap_adjust(obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed);
714 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_MOVE, &ev); 800 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id);
715 } 801 }
716 } 802 }
717 /* otherwise it has left the object */ 803 /* otherwise it has left the object */
@@ -724,7 +810,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
724 ev2.canvas.y = e->pointer.y; 810 ev2.canvas.y = e->pointer.y;
725 _evas_event_havemap_adjust(obj, &ev2.canvas.x, &ev2.canvas.y, obj->mouse_grabbed); 811 _evas_event_havemap_adjust(obj, &ev2.canvas.x, &ev2.canvas.y, obj->mouse_grabbed);
726 if (e->events_frozen <= 0) 812 if (e->events_frozen <= 0)
727 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev2); 813 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev2, event_id);
728 } 814 }
729 } 815 }
730 if (e->delete_me) break; 816 if (e->delete_me) break;
@@ -733,6 +819,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
733 819
734 _evas_object_event_new(); 820 _evas_object_event_new();
735 821
822 event_id2 = _evas_event_counter;
736 if (copy) copy = eina_list_free(copy); 823 if (copy) copy = eina_list_free(copy);
737 /* go thru our current list of ins */ 824 /* go thru our current list of ins */
738 EINA_LIST_FOREACH(ins, l, obj) 825 EINA_LIST_FOREACH(ins, l, obj)
@@ -747,7 +834,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
747 { 834 {
748 obj->mouse_in = 1; 835 obj->mouse_in = 1;
749 if (e->events_frozen <= 0) 836 if (e->events_frozen <= 0)
750 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev3); 837 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev3, event_id2);
751 } 838 }
752 } 839 }
753 if (e->delete_me) break; 840 if (e->delete_me) break;
@@ -766,6 +853,160 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
766 } 853 }
767 _evas_post_event_callback_call(e); 854 _evas_post_event_callback_call(e);
768 } 855 }
856 _evas_unwalk(e);
857 return;
858nogrep:
859 {
860 Eina_List *ins = NULL;
861 Eina_List *newin = NULL;
862 Eina_List *l, *copy, *lst = NULL;
863 Evas_Event_Mouse_Move ev;
864 Evas_Event_Mouse_Out ev2;
865 Evas_Event_Mouse_In ev3;
866 Evas_Object *obj, *below_obj;
867 int event_id = 0, event_id2 = 0;
868 int norep = 0, breaknext = 0;
869
870 _evas_object_event_new();
871
872 event_id = _evas_event_counter;
873 ev.buttons = e->pointer.button;
874 ev.cur.output.x = e->pointer.x;
875 ev.cur.output.y = e->pointer.y;
876 ev.cur.canvas.x = e->pointer.x;
877 ev.cur.canvas.y = e->pointer.y;
878 ev.prev.output.x = px;
879 ev.prev.output.y = py;
880 ev.prev.canvas.x = px;
881 ev.prev.canvas.y = py;
882 ev.data = (void *)data;
883 ev.modifiers = &(e->modifiers);
884 ev.locks = &(e->locks);
885 ev.timestamp = timestamp;
886 ev.event_flags = e->default_event_flags;
887
888 ev2.buttons = e->pointer.button;
889 ev2.output.x = e->pointer.x;
890 ev2.output.y = e->pointer.y;
891 ev2.canvas.x = e->pointer.x;
892 ev2.canvas.y = e->pointer.y;
893 ev2.data = (void *)data;
894 ev2.modifiers = &(e->modifiers);
895 ev2.locks = &(e->locks);
896 ev2.timestamp = timestamp;
897 ev2.event_flags = e->default_event_flags;
898
899 ev3.buttons = e->pointer.button;
900 ev3.output.x = e->pointer.x;
901 ev3.output.y = e->pointer.y;
902 ev3.canvas.x = e->pointer.x;
903 ev3.canvas.y = e->pointer.y;
904 ev3.data = (void *)data;
905 ev3.modifiers = &(e->modifiers);
906 ev3.locks = &(e->locks);
907 ev3.timestamp = timestamp;
908 ev3.event_flags = e->default_event_flags;
909
910 /* go thru old list of in objects */
911 copy = evas_event_list_copy(e->pointer.object.in);
912 EINA_LIST_FOREACH(copy, l, obj)
913 {
914 if (breaknext)
915 {
916 lst = l;
917 break;
918 }
919 if (obj == nogrep_obj) breaknext = 1;
920 }
921
922 /* get all new in objects */
923 below_obj = evas_object_below_get(nogrep_obj);
924 if (below_obj)
925 ins = _evas_event_object_list_raw_in_get(e, NULL,
926 EINA_INLIST_GET(below_obj), NULL,
927 e->pointer.x, e->pointer.y,
928 &norep);
929 EINA_LIST_FOREACH(copy, l, obj)
930 {
931 newin = eina_list_append(newin, obj);
932 if (obj == nogrep_obj) break;
933 }
934 EINA_LIST_FOREACH(ins, l, obj)
935 {
936 newin = eina_list_append(newin, obj);
937 }
938
939 EINA_LIST_FOREACH(lst, l, obj)
940 {
941 /* if its under the pointer and its visible and its in the new */
942 /* in list */
943 // FIXME: i don't think we need this
944 // evas_object_clip_recalc(obj);
945 if ((e->events_frozen <= 0) &&
946 evas_object_is_in_output_rect(obj, x, y, 1, 1) &&
947 (evas_object_clippers_is_visible(obj) ||
948 obj->mouse_grabbed) &&
949 eina_list_data_find(newin, obj) &&
950 (!evas_event_passes_through(obj)) &&
951 (!evas_event_freezes_through(obj)) &&
952 (!obj->clip.clipees) &&
953 ((!obj->precise_is_inside) || evas_object_is_inside(obj, x, y))
954 )
955 {
956 if ((px != x) || (py != y))
957 {
958 ev.cur.canvas.x = e->pointer.x;
959 ev.cur.canvas.y = e->pointer.y;
960 _evas_event_havemap_adjust(obj, &ev.cur.canvas.x, &ev.cur.canvas.y, obj->mouse_grabbed);
961 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_MOVE, &ev, event_id);
962 }
963 }
964 /* otherwise it has left the object */
965 else
966 {
967 if (obj->mouse_in)
968 {
969 obj->mouse_in = 0;
970 ev2.canvas.x = e->pointer.x;
971 ev2.canvas.y = e->pointer.y;
972 _evas_event_havemap_adjust(obj, &ev2.canvas.x, &ev2.canvas.y, obj->mouse_grabbed);
973 if (e->events_frozen <= 0)
974 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev2, event_id);
975 }
976 }
977 if (e->delete_me) break;
978 }
979 _evas_post_event_callback_call(e);
980
981 _evas_object_event_new();
982
983 event_id2 = _evas_event_counter;
984 if (copy) copy = eina_list_free(copy);
985 /* go thru our current list of ins */
986 EINA_LIST_FOREACH(newin, l, obj)
987 {
988 ev3.canvas.x = e->pointer.x;
989 ev3.canvas.y = e->pointer.y;
990 _evas_event_havemap_adjust(obj, &ev3.canvas.x, &ev3.canvas.y, obj->mouse_grabbed);
991 /* if its not in the old list of ins send an enter event */
992 if (!eina_list_data_find(e->pointer.object.in, obj))
993 {
994 if (!obj->mouse_in)
995 {
996 obj->mouse_in = 1;
997 if (e->events_frozen <= 0)
998 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev3, event_id2);
999 }
1000 }
1001 if (e->delete_me) break;
1002 }
1003 /* free our old list of ins */
1004 eina_list_free(e->pointer.object.in);
1005 /* and set up the new one */
1006 e->pointer.object.in = newin;
1007
1008 _evas_post_event_callback_call(e);
1009 }
769 _evas_unwalk(e); 1010 _evas_unwalk(e);
770} 1011}
771 1012
@@ -776,6 +1017,7 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
776 Eina_List *l; 1017 Eina_List *l;
777 Evas_Event_Mouse_In ev; 1018 Evas_Event_Mouse_In ev;
778 Evas_Object *obj; 1019 Evas_Object *obj;
1020 int event_id = 0;
779 1021
780 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 1022 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
781 return; 1023 return;
@@ -789,6 +1031,7 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
789 1031
790 _evas_object_event_new(); 1032 _evas_object_event_new();
791 1033
1034 event_id = _evas_event_counter;
792 ev.buttons = e->pointer.button; 1035 ev.buttons = e->pointer.button;
793 ev.output.x = e->pointer.x; 1036 ev.output.x = e->pointer.x;
794 ev.output.y = e->pointer.y; 1037 ev.output.y = e->pointer.y;
@@ -798,7 +1041,7 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
798 ev.modifiers = &(e->modifiers); 1041 ev.modifiers = &(e->modifiers);
799 ev.locks = &(e->locks); 1042 ev.locks = &(e->locks);
800 ev.timestamp = timestamp; 1043 ev.timestamp = timestamp;
801 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1044 ev.event_flags = e->default_event_flags;
802 1045
803 _evas_walk(e); 1046 _evas_walk(e);
804 /* get new list of ins */ 1047 /* get new list of ins */
@@ -814,7 +1057,7 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
814 { 1057 {
815 obj->mouse_in = 1; 1058 obj->mouse_in = 1;
816 if (e->events_frozen <= 0) 1059 if (e->events_frozen <= 0)
817 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev); 1060 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_IN, &ev, event_id);
818 } 1061 }
819 } 1062 }
820 if (e->delete_me) break; 1063 if (e->delete_me) break;
@@ -832,6 +1075,7 @@ EAPI void
832evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data) 1075evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
833{ 1076{
834 Evas_Event_Mouse_Out ev; 1077 Evas_Event_Mouse_Out ev;
1078 int event_id = 0;
835 1079
836 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 1080 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
837 return; 1081 return;
@@ -843,6 +1087,7 @@ evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
843 1087
844 _evas_object_event_new(); 1088 _evas_object_event_new();
845 1089
1090 event_id = _evas_event_counter;
846 ev.buttons = e->pointer.button; 1091 ev.buttons = e->pointer.button;
847 ev.output.x = e->pointer.x; 1092 ev.output.x = e->pointer.x;
848 ev.output.y = e->pointer.y; 1093 ev.output.y = e->pointer.y;
@@ -852,11 +1097,10 @@ evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
852 ev.modifiers = &(e->modifiers); 1097 ev.modifiers = &(e->modifiers);
853 ev.locks = &(e->locks); 1098 ev.locks = &(e->locks);
854 ev.timestamp = timestamp; 1099 ev.timestamp = timestamp;
855 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1100 ev.event_flags = e->default_event_flags;
856 1101
857 _evas_walk(e); 1102 _evas_walk(e);
858 /* if our mouse button is grabbed to any objects */ 1103 /* if our mouse button is inside any objects */
859 if (e->pointer.mouse_grabbed == 0)
860 { 1104 {
861 /* go thru old list of in objects */ 1105 /* go thru old list of in objects */
862 Eina_List *l, *copy; 1106 Eina_List *l, *copy;
@@ -874,14 +1118,16 @@ evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
874 if (!obj->delete_me) 1118 if (!obj->delete_me)
875 { 1119 {
876 if (e->events_frozen <= 0) 1120 if (e->events_frozen <= 0)
877 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev); 1121 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOUSE_OUT, &ev, event_id);
878 } 1122 }
1123 obj->mouse_grabbed = 0;
879 } 1124 }
880 if (e->delete_me) break; 1125 if (e->delete_me) break;
881 } 1126 }
882 if (copy) copy = eina_list_free(copy); 1127 if (copy) copy = eina_list_free(copy);
883 /* free our old list of ins */ 1128 /* free our old list of ins */
884 e->pointer.object.in = eina_list_free(e->pointer.object.in); 1129 e->pointer.object.in = eina_list_free(e->pointer.object.in);
1130 e->pointer.mouse_grabbed = 0;
885 _evas_post_event_callback_call(e); 1131 _evas_post_event_callback_call(e);
886 } 1132 }
887 _evas_unwalk(e); 1133 _evas_unwalk(e);
@@ -899,16 +1145,20 @@ evas_event_feed_multi_down(Evas *e,
899 Eina_List *l, *copy; 1145 Eina_List *l, *copy;
900 Evas_Event_Multi_Down ev; 1146 Evas_Event_Multi_Down ev;
901 Evas_Object *obj; 1147 Evas_Object *obj;
1148 int addgrab = 0;
1149 int event_id = 0;
902 1150
903 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 1151 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
904 return; 1152 return;
905 MAGIC_CHECK_END(); 1153 MAGIC_CHECK_END();
906 1154
1155 e->pointer.downs++;
907 if (e->events_frozen > 0) return; 1156 if (e->events_frozen > 0) return;
908 e->last_timestamp = timestamp; 1157 e->last_timestamp = timestamp;
909 1158
910 _evas_object_event_new(); 1159 _evas_object_event_new();
911 1160
1161 event_id = _evas_event_counter;
912 ev.device = d; 1162 ev.device = d;
913 ev.output.x = x; 1163 ev.output.x = x;
914 ev.output.y = y; 1164 ev.output.y = y;
@@ -926,18 +1176,22 @@ evas_event_feed_multi_down(Evas *e,
926 ev.locks = &(e->locks); 1176 ev.locks = &(e->locks);
927 ev.flags = flags; 1177 ev.flags = flags;
928 ev.timestamp = timestamp; 1178 ev.timestamp = timestamp;
929 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1179 ev.event_flags = e->default_event_flags;
930 1180
931 _evas_walk(e); 1181 _evas_walk(e);
932 /* append new touch point to the touch point list */ 1182 /* append new touch point to the touch point list */
933 _evas_touch_point_append(e, d, x, y); 1183 _evas_touch_point_append(e, d, x, y);
1184 if (e->pointer.mouse_grabbed == 0)
1185 {
1186 if (e->pointer.downs > 1) addgrab = e->pointer.downs - 1;
1187 }
934 copy = evas_event_list_copy(e->pointer.object.in); 1188 copy = evas_event_list_copy(e->pointer.object.in);
935 EINA_LIST_FOREACH(copy, l, obj) 1189 EINA_LIST_FOREACH(copy, l, obj)
936 { 1190 {
937 if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB) 1191 if (obj->pointer_mode != EVAS_OBJECT_POINTER_MODE_NOGRAB)
938 { 1192 {
939 obj->mouse_grabbed++; 1193 obj->mouse_grabbed += addgrab + 1;
940 e->pointer.mouse_grabbed++; 1194 e->pointer.mouse_grabbed += addgrab + 1;
941 } 1195 }
942 } 1196 }
943 EINA_LIST_FOREACH(copy, l, obj) 1197 EINA_LIST_FOREACH(copy, l, obj)
@@ -952,7 +1206,7 @@ evas_event_feed_multi_down(Evas *e,
952 if (y != ev.canvas.y) 1206 if (y != ev.canvas.y)
953 ev.canvas.ysub = ev.canvas.y; // fixme - lost precision 1207 ev.canvas.ysub = ev.canvas.y; // fixme - lost precision
954 if (e->events_frozen <= 0) 1208 if (e->events_frozen <= 0)
955 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_DOWN, &ev); 1209 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_DOWN, &ev, event_id);
956 if (e->delete_me) break; 1210 if (e->delete_me) break;
957 } 1211 }
958 if (copy) eina_list_free(copy); 1212 if (copy) eina_list_free(copy);
@@ -974,16 +1228,19 @@ evas_event_feed_multi_up(Evas *e,
974 Eina_List *l, *copy; 1228 Eina_List *l, *copy;
975 Evas_Event_Multi_Up ev; 1229 Evas_Event_Multi_Up ev;
976 Evas_Object *obj; 1230 Evas_Object *obj;
1231 int event_id = 0;
977 1232
978 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 1233 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
979 return; 1234 return;
980 MAGIC_CHECK_END(); 1235 MAGIC_CHECK_END();
981 1236
1237 e->pointer.downs--;
982 if (e->events_frozen > 0) return; 1238 if (e->events_frozen > 0) return;
983 e->last_timestamp = timestamp; 1239 e->last_timestamp = timestamp;
984 1240
985 _evas_object_event_new(); 1241 _evas_object_event_new();
986 1242
1243 event_id = _evas_event_counter;
987 ev.device = d; 1244 ev.device = d;
988 ev.output.x = x; 1245 ev.output.x = x;
989 ev.output.y = y; 1246 ev.output.y = y;
@@ -1001,7 +1258,7 @@ evas_event_feed_multi_up(Evas *e,
1001 ev.locks = &(e->locks); 1258 ev.locks = &(e->locks);
1002 ev.flags = flags; 1259 ev.flags = flags;
1003 ev.timestamp = timestamp; 1260 ev.timestamp = timestamp;
1004 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1261 ev.event_flags = e->default_event_flags;
1005 1262
1006 _evas_walk(e); 1263 _evas_walk(e);
1007 /* update released touch point */ 1264 /* update released touch point */
@@ -1025,7 +1282,7 @@ evas_event_feed_multi_up(Evas *e,
1025 e->pointer.mouse_grabbed--; 1282 e->pointer.mouse_grabbed--;
1026 } 1283 }
1027 if (e->events_frozen <= 0) 1284 if (e->events_frozen <= 0)
1028 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_UP, &ev); 1285 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_UP, &ev, event_id);
1029 if (e->delete_me) break; 1286 if (e->delete_me) break;
1030 } 1287 }
1031 if (copy) copy = eina_list_free(copy); 1288 if (copy) copy = eina_list_free(copy);
@@ -1051,7 +1308,7 @@ evas_event_feed_multi_move(Evas *e,
1051 if (e->events_frozen > 0) return; 1308 if (e->events_frozen > 0) return;
1052 e->last_timestamp = timestamp; 1309 e->last_timestamp = timestamp;
1053 1310
1054 if (!e->pointer.inside) return; 1311 if ((!e->pointer.inside) && (e->pointer.mouse_grabbed == 0)) return;
1055 1312
1056 _evas_walk(e); 1313 _evas_walk(e);
1057 /* update moved touch point */ 1314 /* update moved touch point */
@@ -1063,9 +1320,11 @@ evas_event_feed_multi_move(Evas *e,
1063 Eina_List *l, *copy; 1320 Eina_List *l, *copy;
1064 Evas_Event_Multi_Move ev; 1321 Evas_Event_Multi_Move ev;
1065 Evas_Object *obj; 1322 Evas_Object *obj;
1323 int event_id = 0;
1066 1324
1067 _evas_object_event_new(); 1325 _evas_object_event_new();
1068 1326
1327 event_id = _evas_event_counter;
1069 ev.device = d; 1328 ev.device = d;
1070 ev.cur.output.x = x; 1329 ev.cur.output.x = x;
1071 ev.cur.output.y = y; 1330 ev.cur.output.y = y;
@@ -1082,7 +1341,7 @@ evas_event_feed_multi_move(Evas *e,
1082 ev.modifiers = &(e->modifiers); 1341 ev.modifiers = &(e->modifiers);
1083 ev.locks = &(e->locks); 1342 ev.locks = &(e->locks);
1084 ev.timestamp = timestamp; 1343 ev.timestamp = timestamp;
1085 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1344 ev.event_flags = e->default_event_flags;
1086 1345
1087 copy = evas_event_list_copy(e->pointer.object.in); 1346 copy = evas_event_list_copy(e->pointer.object.in);
1088 EINA_LIST_FOREACH(copy, l, obj) 1347 EINA_LIST_FOREACH(copy, l, obj)
@@ -1102,7 +1361,7 @@ evas_event_feed_multi_move(Evas *e,
1102 ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision 1361 ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision
1103 if (y != ev.cur.canvas.y) 1362 if (y != ev.cur.canvas.y)
1104 ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision 1363 ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision
1105 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_MOVE, &ev); 1364 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id);
1106 } 1365 }
1107 if (e->delete_me) break; 1366 if (e->delete_me) break;
1108 } 1367 }
@@ -1114,9 +1373,11 @@ evas_event_feed_multi_move(Evas *e,
1114 Eina_List *l, *copy; 1373 Eina_List *l, *copy;
1115 Evas_Event_Multi_Move ev; 1374 Evas_Event_Multi_Move ev;
1116 Evas_Object *obj; 1375 Evas_Object *obj;
1376 int event_id = 0;
1117 1377
1118 _evas_object_event_new(); 1378 _evas_object_event_new();
1119 1379
1380 event_id = _evas_event_counter;
1120 ev.device = d; 1381 ev.device = d;
1121 ev.cur.output.x = x; 1382 ev.cur.output.x = x;
1122 ev.cur.output.y = y; 1383 ev.cur.output.y = y;
@@ -1133,7 +1394,7 @@ evas_event_feed_multi_move(Evas *e,
1133 ev.modifiers = &(e->modifiers); 1394 ev.modifiers = &(e->modifiers);
1134 ev.locks = &(e->locks); 1395 ev.locks = &(e->locks);
1135 ev.timestamp = timestamp; 1396 ev.timestamp = timestamp;
1136 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1397 ev.event_flags = e->default_event_flags;
1137 1398
1138 /* get all new in objects */ 1399 /* get all new in objects */
1139 ins = evas_event_objects_event_list(e, NULL, x, y); 1400 ins = evas_event_objects_event_list(e, NULL, x, y);
@@ -1165,7 +1426,7 @@ evas_event_feed_multi_move(Evas *e,
1165 ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision 1426 ev.cur.canvas.xsub = ev.cur.canvas.x; // fixme - lost precision
1166 if (y != ev.cur.canvas.y) 1427 if (y != ev.cur.canvas.y)
1167 ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision 1428 ev.cur.canvas.ysub = ev.cur.canvas.y; // fixme - lost precision
1168 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_MOVE, &ev); 1429 evas_object_event_callback_call(obj, EVAS_CALLBACK_MULTI_MOVE, &ev, event_id);
1169 } 1430 }
1170 if (e->delete_me) break; 1431 if (e->delete_me) break;
1171 } 1432 }
@@ -1190,6 +1451,7 @@ evas_event_feed_multi_move(Evas *e,
1190EAPI void 1451EAPI void
1191evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data) 1452evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
1192{ 1453{
1454 int event_id = 0;
1193 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 1455 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
1194 return; 1456 return;
1195 MAGIC_CHECK_END(); 1457 MAGIC_CHECK_END();
@@ -1204,6 +1466,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const ch
1204 1466
1205 _evas_object_event_new(); 1467 _evas_object_event_new();
1206 1468
1469 event_id = _evas_event_counter;
1207 exclusive = EINA_FALSE; 1470 exclusive = EINA_FALSE;
1208 ev.keyname = (char *)keyname; 1471 ev.keyname = (char *)keyname;
1209 ev.data = (void *)data; 1472 ev.data = (void *)data;
@@ -1213,7 +1476,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const ch
1213 ev.string = string; 1476 ev.string = string;
1214 ev.compose = compose; 1477 ev.compose = compose;
1215 ev.timestamp = timestamp; 1478 ev.timestamp = timestamp;
1216 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1479 ev.event_flags = e->default_event_flags;
1217 1480
1218 if (e->grabs) 1481 if (e->grabs)
1219 { 1482 {
@@ -1239,7 +1502,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const ch
1239 !evas_event_freezes_through(g->object)) 1502 !evas_event_freezes_through(g->object))
1240 evas_object_event_callback_call(g->object, 1503 evas_object_event_callback_call(g->object,
1241 EVAS_CALLBACK_KEY_DOWN, 1504 EVAS_CALLBACK_KEY_DOWN,
1242 &ev); 1505 &ev, event_id);
1243 if (g->exclusive) exclusive = EINA_TRUE; 1506 if (g->exclusive) exclusive = EINA_TRUE;
1244 } 1507 }
1245 } 1508 }
@@ -1266,7 +1529,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const ch
1266 { 1529 {
1267 if (e->events_frozen <= 0 && !evas_event_freezes_through(e->focused)) 1530 if (e->events_frozen <= 0 && !evas_event_freezes_through(e->focused))
1268 evas_object_event_callback_call(e->focused, EVAS_CALLBACK_KEY_DOWN, 1531 evas_object_event_callback_call(e->focused, EVAS_CALLBACK_KEY_DOWN,
1269 &ev); 1532 &ev, event_id);
1270 } 1533 }
1271 _evas_post_event_callback_call(e); 1534 _evas_post_event_callback_call(e);
1272 _evas_unwalk(e); 1535 _evas_unwalk(e);
@@ -1275,6 +1538,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const ch
1275EAPI void 1538EAPI void
1276evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data) 1539evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char *string, const char *compose, unsigned int timestamp, const void *data)
1277{ 1540{
1541 int event_id = 0;
1278 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 1542 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
1279 return; 1543 return;
1280 MAGIC_CHECK_END(); 1544 MAGIC_CHECK_END();
@@ -1288,6 +1552,7 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char
1288 1552
1289 _evas_object_event_new(); 1553 _evas_object_event_new();
1290 1554
1555 event_id = _evas_event_counter;
1291 exclusive = EINA_FALSE; 1556 exclusive = EINA_FALSE;
1292 ev.keyname = (char *)keyname; 1557 ev.keyname = (char *)keyname;
1293 ev.data = (void *)data; 1558 ev.data = (void *)data;
@@ -1297,7 +1562,7 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char
1297 ev.string = string; 1562 ev.string = string;
1298 ev.compose = compose; 1563 ev.compose = compose;
1299 ev.timestamp = timestamp; 1564 ev.timestamp = timestamp;
1300 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1565 ev.event_flags = e->default_event_flags;
1301 1566
1302 if (e->grabs) 1567 if (e->grabs)
1303 { 1568 {
@@ -1322,7 +1587,7 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char
1322 if (e->events_frozen <= 0 && 1587 if (e->events_frozen <= 0 &&
1323 !evas_event_freezes_through(g->object)) 1588 !evas_event_freezes_through(g->object))
1324 evas_object_event_callback_call(g->object, 1589 evas_object_event_callback_call(g->object,
1325 EVAS_CALLBACK_KEY_UP, &ev); 1590 EVAS_CALLBACK_KEY_UP, &ev, event_id);
1326 if (g->exclusive) exclusive = EINA_TRUE; 1591 if (g->exclusive) exclusive = EINA_TRUE;
1327 } 1592 }
1328 if (e->delete_me) break; 1593 if (e->delete_me) break;
@@ -1349,7 +1614,7 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char
1349 { 1614 {
1350 if (e->events_frozen <= 0 && !evas_event_freezes_through(e->focused)) 1615 if (e->events_frozen <= 0 && !evas_event_freezes_through(e->focused))
1351 evas_object_event_callback_call(e->focused, EVAS_CALLBACK_KEY_UP, 1616 evas_object_event_callback_call(e->focused, EVAS_CALLBACK_KEY_UP,
1352 &ev); 1617 &ev, event_id);
1353 } 1618 }
1354 _evas_post_event_callback_call(e); 1619 _evas_post_event_callback_call(e);
1355 _evas_unwalk(e); 1620 _evas_unwalk(e);
@@ -1361,6 +1626,7 @@ evas_event_feed_hold(Evas *e, int hold, unsigned int timestamp, const void *data
1361 Eina_List *l, *copy; 1626 Eina_List *l, *copy;
1362 Evas_Event_Hold ev; 1627 Evas_Event_Hold ev;
1363 Evas_Object *obj; 1628 Evas_Object *obj;
1629 int event_id = 0;
1364 1630
1365 MAGIC_CHECK(e, Evas, MAGIC_EVAS); 1631 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
1366 return; 1632 return;
@@ -1371,17 +1637,18 @@ evas_event_feed_hold(Evas *e, int hold, unsigned int timestamp, const void *data
1371 1637
1372 _evas_object_event_new(); 1638 _evas_object_event_new();
1373 1639
1640 event_id = _evas_event_counter;
1374 ev.hold = hold; 1641 ev.hold = hold;
1375 ev.data = (void *)data; 1642 ev.data = (void *)data;
1376 ev.timestamp = timestamp; 1643 ev.timestamp = timestamp;
1377 ev.event_flags = EVAS_EVENT_FLAG_NONE; 1644 ev.event_flags = e->default_event_flags;
1378 1645
1379 _evas_walk(e); 1646 _evas_walk(e);
1380 copy = evas_event_list_copy(e->pointer.object.in); 1647 copy = evas_event_list_copy(e->pointer.object.in);
1381 EINA_LIST_FOREACH(copy, l, obj) 1648 EINA_LIST_FOREACH(copy, l, obj)
1382 { 1649 {
1383 if ((e->events_frozen <= 0) && !evas_event_freezes_through(obj)) 1650 if ((e->events_frozen <= 0) && !evas_event_freezes_through(obj))
1384 evas_object_event_callback_call(obj, EVAS_CALLBACK_HOLD, &ev); 1651 evas_object_event_callback_call(obj, EVAS_CALLBACK_HOLD, &ev, event_id);
1385 if (e->delete_me) break; 1652 if (e->delete_me) break;
1386 } 1653 }
1387 if (copy) copy = eina_list_free(copy); 1654 if (copy) copy = eina_list_free(copy);
@@ -1528,75 +1795,84 @@ evas_object_pointer_mode_get(const Evas_Object *obj)
1528EAPI void 1795EAPI void
1529evas_event_refeed_event(Evas *e, void *event_copy, Evas_Callback_Type event_type) 1796evas_event_refeed_event(Evas *e, void *event_copy, Evas_Callback_Type event_type)
1530{ 1797{
1531 switch(event_type) 1798 switch (event_type)
1532 { 1799 {
1533 case EVAS_CALLBACK_MOUSE_IN: 1800 case EVAS_CALLBACK_MOUSE_IN:
1534 { 1801 {
1535 Evas_Event_Mouse_In *ev = event_copy; 1802 Evas_Event_Mouse_In *ev = event_copy;
1536 evas_event_feed_mouse_in(e, ev->timestamp, ev->data); 1803 evas_event_feed_mouse_in(e, ev->timestamp, ev->data);
1537 break; 1804 break;
1538 } 1805 }
1539 case EVAS_CALLBACK_MOUSE_OUT: 1806 case EVAS_CALLBACK_MOUSE_OUT:
1540 { 1807 {
1541 Evas_Event_Mouse_Out *ev = event_copy; 1808 Evas_Event_Mouse_Out *ev = event_copy;
1542 evas_event_feed_mouse_out(e, ev->timestamp, ev->data); 1809 evas_event_feed_mouse_out(e, ev->timestamp, ev->data);
1543 break; 1810 break;
1544 } 1811 }
1545 case EVAS_CALLBACK_MOUSE_DOWN: 1812 case EVAS_CALLBACK_MOUSE_DOWN:
1546 { 1813 {
1547 Evas_Event_Mouse_Down *ev = event_copy; 1814 Evas_Event_Mouse_Down *ev = event_copy;
1548 evas_event_feed_mouse_down(e, ev->button, ev->flags, ev-> timestamp, ev->data); 1815 evas_event_feed_mouse_down(e, ev->button, ev->flags, ev-> timestamp, ev->data);
1549 break; 1816 break;
1550 } 1817 }
1551 case EVAS_CALLBACK_MOUSE_UP: 1818 case EVAS_CALLBACK_MOUSE_UP:
1552 { 1819 {
1553 Evas_Event_Mouse_Up *ev = event_copy; 1820 Evas_Event_Mouse_Up *ev = event_copy;
1554 evas_event_feed_mouse_up(e, ev->button, ev->flags, ev-> timestamp, ev->data); 1821 evas_event_feed_mouse_up(e, ev->button, ev->flags, ev-> timestamp, ev->data);
1555 break; 1822 break;
1556 } 1823 }
1557 case EVAS_CALLBACK_MOUSE_MOVE: 1824 case EVAS_CALLBACK_MOUSE_MOVE:
1558 { 1825 {
1559 Evas_Event_Mouse_Move *ev = event_copy; 1826 Evas_Event_Mouse_Move *ev = event_copy;
1560 evas_event_feed_mouse_move(e, ev->cur.canvas.x, ev->cur.canvas.y, ev->timestamp, ev->data); 1827 evas_event_feed_mouse_move(e, ev->cur.canvas.x, ev->cur.canvas.y, ev->timestamp, ev->data);
1561 break; 1828 break;
1562 } 1829 }
1563 case EVAS_CALLBACK_MOUSE_WHEEL: 1830 case EVAS_CALLBACK_MOUSE_WHEEL:
1564 { 1831 {
1565 Evas_Event_Mouse_Wheel *ev = event_copy; 1832 Evas_Event_Mouse_Wheel *ev = event_copy;
1566 evas_event_feed_mouse_wheel(e, ev->direction, ev-> z, ev->timestamp, ev->data); 1833 evas_event_feed_mouse_wheel(e, ev->direction, ev-> z, ev->timestamp, ev->data);
1567 break; 1834 break;
1568 } 1835 }
1569 case EVAS_CALLBACK_MULTI_DOWN: 1836 case EVAS_CALLBACK_MULTI_DOWN:
1570 { 1837 {
1571 Evas_Event_Multi_Down *ev = event_copy; 1838 Evas_Event_Multi_Down *ev = event_copy;
1572 evas_event_feed_multi_down(e, ev->device, ev->canvas.x, ev->canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->canvas.xsub, ev->canvas.ysub, ev->flags, ev->timestamp, ev->data); 1839 evas_event_feed_multi_down(e, ev->device, ev->canvas.x, ev->canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->canvas.xsub, ev->canvas.ysub, ev->flags, ev->timestamp, ev->data);
1573 break; 1840 break;
1574 } 1841 }
1575 case EVAS_CALLBACK_MULTI_UP: 1842 case EVAS_CALLBACK_MULTI_UP:
1576 { 1843 {
1577 Evas_Event_Multi_Up *ev = event_copy; 1844 Evas_Event_Multi_Up *ev = event_copy;
1578 evas_event_feed_multi_up(e, ev->device, ev->canvas.x, ev->canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->canvas.xsub, ev->canvas.ysub, ev->flags, ev->timestamp, ev->data); 1845 evas_event_feed_multi_up(e, ev->device, ev->canvas.x, ev->canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->canvas.xsub, ev->canvas.ysub, ev->flags, ev->timestamp, ev->data);
1579 break; 1846 break;
1580 } 1847 }
1581 case EVAS_CALLBACK_MULTI_MOVE: 1848 case EVAS_CALLBACK_MULTI_MOVE:
1582 { 1849 {
1583 Evas_Event_Multi_Move *ev = event_copy; 1850 Evas_Event_Multi_Move *ev = event_copy;
1584 evas_event_feed_multi_move(e, ev->device, ev->cur.canvas.x, ev->cur.canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->cur.canvas.xsub, ev->cur.canvas.ysub, ev->timestamp, ev->data); 1851 evas_event_feed_multi_move(e, ev->device, ev->cur.canvas.x, ev->cur.canvas.y, ev->radius, ev->radius_x, ev->radius_y, ev->pressure, ev->angle, ev->cur.canvas.xsub, ev->cur.canvas.ysub, ev->timestamp, ev->data);
1585 break; 1852 break;
1586 } 1853 }
1587 case EVAS_CALLBACK_KEY_DOWN: 1854 case EVAS_CALLBACK_KEY_DOWN:
1588 { 1855 {
1589 Evas_Event_Key_Down *ev = event_copy; 1856 Evas_Event_Key_Down *ev = event_copy;
1590 evas_event_feed_key_down(e, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, ev->data); 1857 evas_event_feed_key_down(e, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, ev->data);
1591 break; 1858 break;
1592 } 1859 }
1593 case EVAS_CALLBACK_KEY_UP: 1860 case EVAS_CALLBACK_KEY_UP:
1594 { 1861 {
1595 Evas_Event_Key_Up *ev = event_copy; 1862 Evas_Event_Key_Up *ev = event_copy;
1596 evas_event_feed_key_up(e, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, ev->data); 1863 evas_event_feed_key_up(e, ev->keyname, ev->key, ev->string, ev->compose, ev->timestamp, ev->data);
1597 break; 1864 break;
1598 } 1865 }
1599 default: /* All non-input events are not handeled */ 1866 default: /* All non-input events are not handeled */
1600 break; 1867 break;
1601 } 1868 }
1602} 1869}
1870
1871EAPI int
1872evas_event_down_count_get(const Evas *e)
1873{
1874 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
1875 return 0;
1876 MAGIC_CHECK_END();
1877 return e->pointer.downs;
1878}
diff --git a/libraries/evas/src/lib/canvas/evas_focus.c b/libraries/evas/src/lib/canvas/evas_focus.c
index a1a3bca..29da7e7 100644
--- a/libraries/evas/src/lib/canvas/evas_focus.c
+++ b/libraries/evas/src/lib/canvas/evas_focus.c
@@ -10,29 +10,31 @@
10EAPI void 10EAPI void
11evas_object_focus_set(Evas_Object *obj, Eina_Bool focus) 11evas_object_focus_set(Evas_Object *obj, Eina_Bool focus)
12{ 12{
13 int event_id = 0;
13 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 14 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
14 return; 15 return;
15 MAGIC_CHECK_END(); 16 MAGIC_CHECK_END();
16 17
17 _evas_object_event_new(); 18 _evas_object_event_new();
18 19
20 event_id = _evas_event_counter;
19 if (focus) 21 if (focus)
20 { 22 {
21 if (obj->focused) goto end; 23 if (obj->focused) goto end;
22 if (obj->layer->evas->focused) 24 if (obj->layer->evas->focused)
23 evas_object_focus_set(obj->layer->evas->focused, 0); 25 evas_object_focus_set(obj->layer->evas->focused, 0);
24 obj->focused = 1; 26 obj->focused = 1;
25 obj->layer->evas->focused = obj; 27 obj->layer->evas->focused = obj;
26 evas_object_event_callback_call(obj, EVAS_CALLBACK_FOCUS_IN, NULL); 28 evas_object_event_callback_call(obj, EVAS_CALLBACK_FOCUS_IN, NULL, event_id);
27 evas_event_callback_call(obj->layer->evas, 29 evas_event_callback_call(obj->layer->evas,
28 EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, obj); 30 EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_IN, obj);
29 } 31 }
30 else 32 else
31 { 33 {
32 if (!obj->focused) goto end; 34 if (!obj->focused) goto end;
33 obj->focused = 0; 35 obj->focused = 0;
34 obj->layer->evas->focused = NULL; 36 obj->layer->evas->focused = NULL;
35 evas_object_event_callback_call(obj, EVAS_CALLBACK_FOCUS_OUT, NULL); 37 evas_object_event_callback_call(obj, EVAS_CALLBACK_FOCUS_OUT, NULL, event_id);
36 evas_event_callback_call(obj->layer->evas, 38 evas_event_callback_call(obj->layer->evas,
37 EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, obj); 39 EVAS_CALLBACK_CANVAS_OBJECT_FOCUS_OUT, obj);
38 } 40 }
diff --git a/libraries/evas/src/lib/canvas/evas_gl.c b/libraries/evas/src/lib/canvas/evas_gl.c
index 47bb583..85ed851 100644
--- a/libraries/evas/src/lib/canvas/evas_gl.c
+++ b/libraries/evas/src/lib/canvas/evas_gl.c
@@ -37,6 +37,13 @@ evas_gl_new(Evas *e)
37 evas_gl->magic = MAGIC_EVAS_GL; 37 evas_gl->magic = MAGIC_EVAS_GL;
38 evas_gl->evas = e; 38 evas_gl->evas = e;
39 39
40 if (!evas_gl->evas->engine.func->gl_context_create)
41 {
42 ERR("GL engine not available\n");
43 free(evas_gl);
44 return NULL;
45 }
46
40 return evas_gl; 47 return evas_gl;
41} 48}
42 49
@@ -60,6 +67,24 @@ evas_gl_free(Evas_GL *evas_gl)
60 free(evas_gl); 67 free(evas_gl);
61} 68}
62 69
70EAPI Evas_GL_Config *
71evas_gl_config_new()
72{
73 Evas_GL_Config *cfg;
74
75 cfg = calloc(1, sizeof(Evas_GL_Config));
76
77 if (!cfg) return NULL;
78
79 return cfg;
80}
81
82EAPI void
83evas_gl_config_free(Evas_GL_Config *cfg)
84{
85 if (cfg) free(cfg);
86}
87
63EAPI Evas_GL_Surface * 88EAPI Evas_GL_Surface *
64evas_gl_surface_create(Evas_GL *evas_gl, Evas_GL_Config *config, int width, int height) 89evas_gl_surface_create(Evas_GL *evas_gl, Evas_GL_Config *config, int width, int height)
65{ 90{
@@ -77,6 +102,8 @@ evas_gl_surface_create(Evas_GL *evas_gl, Evas_GL_Config *config, int width, int
77 102
78 surf = calloc(1, sizeof(Evas_GL_Surface)); 103 surf = calloc(1, sizeof(Evas_GL_Surface));
79 104
105 if (!surf) return NULL;
106
80 surf->data = evas_gl->evas->engine.func->gl_surface_create(evas_gl->evas->engine.data.output, config, width, height); 107 surf->data = evas_gl->evas->engine.func->gl_surface_create(evas_gl->evas->engine.data.output, config, width, height);
81 108
82 if (!surf->data) 109 if (!surf->data)
diff --git a/libraries/evas/src/lib/canvas/evas_main.c b/libraries/evas/src/lib/canvas/evas_main.c
index 0a37b2c..687744f 100644
--- a/libraries/evas/src/lib/canvas/evas_main.c
+++ b/libraries/evas/src/lib/canvas/evas_main.c
@@ -118,12 +118,16 @@ evas_new(void)
118 e->output.render_method = RENDER_METHOD_INVALID; 118 e->output.render_method = RENDER_METHOD_INVALID;
119 e->viewport.w = 1; 119 e->viewport.w = 1;
120 e->viewport.h = 1; 120 e->viewport.h = 1;
121 e->framespace.x = 0;
122 e->framespace.y = 0;
123 e->framespace.w = 0;
124 e->framespace.h = 0;
121 e->hinting = EVAS_FONT_HINTING_BYTECODE; 125 e->hinting = EVAS_FONT_HINTING_BYTECODE;
122 e->name_hash = eina_hash_string_superfast_new(NULL); 126 e->name_hash = eina_hash_string_superfast_new(NULL);
123 eina_clist_init(&e->calc_list); 127 eina_clist_init(&e->calc_list);
124 eina_clist_init(&e->calc_done); 128 eina_clist_init(&e->calc_done);
125 129
126#define EVAS_ARRAY_SET(E, Array) \ 130#define EVAS_ARRAY_SET(E, Array) \
127 eina_array_step_set(&E->Array, sizeof (E->Array), 4096); 131 eina_array_step_set(&E->Array, sizeof (E->Array), 4096);
128 132
129 EVAS_ARRAY_SET(e, delete_objects); 133 EVAS_ARRAY_SET(e, delete_objects);
@@ -408,6 +412,41 @@ evas_output_viewport_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord
408 if (h) *h = e->viewport.h; 412 if (h) *h = e->viewport.h;
409} 413}
410 414
415EAPI void
416evas_output_framespace_set(Evas *e, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h)
417{
418 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
419 return;
420 MAGIC_CHECK_END();
421
422 if ((x == e->framespace.x) && (y == e->framespace.y) &&
423 (w == e->framespace.w) && (h == e->framespace.h)) return;
424 e->framespace.x = x;
425 e->framespace.y = y;
426 e->framespace.w = w;
427 e->framespace.h = h;
428 e->framespace.changed = 1;
429 e->output_validity++;
430 e->changed = 1;
431}
432
433EAPI void
434evas_output_framespace_get(const Evas *e, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h)
435{
436 MAGIC_CHECK(e, Evas, MAGIC_EVAS);
437 if (x) *x = 0;
438 if (y) *y = 0;
439 if (w) *w = 0;
440 if (h) *h = 0;
441 return;
442 MAGIC_CHECK_END();
443
444 if (x) *x = e->framespace.x;
445 if (y) *y = e->framespace.y;
446 if (w) *w = e->framespace.w;
447 if (h) *h = e->framespace.h;
448}
449
411EAPI Evas_Coord 450EAPI Evas_Coord
412evas_coord_screen_x_to_world(const Evas *e, int x) 451evas_coord_screen_x_to_world(const Evas *e, int x)
413{ 452{
diff --git a/libraries/evas/src/lib/canvas/evas_map.c b/libraries/evas/src/lib/canvas/evas_map.c
index fca8b3a..2359d5a 100644
--- a/libraries/evas/src/lib/canvas/evas_map.c
+++ b/libraries/evas/src/lib/canvas/evas_map.c
@@ -81,17 +81,19 @@ _evas_map_calc_map_geometry(Evas_Object *obj)
81 81
82 p = obj->cur.map->points; 82 p = obj->cur.map->points;
83 p_end = p + obj->cur.map->count; 83 p_end = p + obj->cur.map->count;
84 x1 = lround(p->x); 84 x1 = x2 = lround(p->x);
85 x2 = lround(p->x); 85 y1 = y2 = lround(p->y);
86 y1 = lround(p->y);
87 y2 = lround(p->y);
88 p++; 86 p++;
89 for (; p < p_end; p++) 87 for (; p < p_end; p++)
90 { 88 {
91 if (p->x < x1) x1 = p->x; 89 Evas_Coord x, y;
92 if (p->x > x2) x2 = p->x; 90
93 if (p->y < y1) y1 = p->y; 91 x = lround(p->x);
94 if (p->y > y2) y2 = p->y; 92 y = lround(p->y);
93 if (x < x1) x1 = x;
94 if (x > x2) x2 = x;
95 if (y < y1) y1 = y;
96 if (y > y2) y2 = y;
95 } 97 }
96// this causes clip-out bugs now mapped objs canbe opaque!!! 98// this causes clip-out bugs now mapped objs canbe opaque!!!
97// // add 1 pixel of fuzz around the map region to ensure updates are correct 99// // add 1 pixel of fuzz around the map region to ensure updates are correct
diff --git a/libraries/evas/src/lib/canvas/evas_name.c b/libraries/evas/src/lib/canvas/evas_name.c
index c42f941..1a9d20f 100644
--- a/libraries/evas/src/lib/canvas/evas_name.c
+++ b/libraries/evas/src/lib/canvas/evas_name.c
@@ -38,3 +38,35 @@ evas_object_name_find(const Evas *e, const char *name)
38 if (!name) return NULL; 38 if (!name) return NULL;
39 return (Evas_Object *)eina_hash_find(e->name_hash, name); 39 return (Evas_Object *)eina_hash_find(e->name_hash, name);
40} 40}
41
42static Evas_Object *
43_evas_object_name_child_find(const Evas_Object *obj, const char *name, int recurse)
44{
45 const Eina_Inlist *lst;
46 Evas_Object *child;
47
48 if (!obj->smart.smart) return NULL;
49 lst = evas_object_smart_members_get_direct(obj);
50 EINA_INLIST_FOREACH(lst, child)
51 {
52 if (child->delete_me) continue;
53 if (!child->name) continue;
54 if (!strcmp(name, child->name)) return child;
55 if (recurse != 0)
56 {
57 if ((obj = _evas_object_name_child_find(child, name, recurse - 1)))
58 return (Evas_Object *)obj;
59 }
60 }
61 return NULL;
62}
63
64EAPI Evas_Object *
65evas_object_name_child_find(const Evas_Object *obj, const char *name, int recurse)
66{
67 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
68 return NULL;
69 MAGIC_CHECK_END();
70 if (!name) return NULL;
71 return _evas_object_name_child_find(obj, name, recurse);
72}
diff --git a/libraries/evas/src/lib/canvas/evas_object_box.c b/libraries/evas/src/lib/canvas/evas_object_box.c
index ab2f222..228d37c 100644
--- a/libraries/evas/src/lib/canvas/evas_object_box.c
+++ b/libraries/evas/src/lib/canvas/evas_object_box.c
@@ -1363,7 +1363,7 @@ _evas_object_box_layout_flow_horizontal_row_info_collect(Evas_Object_Box_Data *p
1363EAPI void 1363EAPI void
1364evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__) 1364evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
1365{ 1365{
1366 int n_children, v_justify; 1366 int n_children;
1367 int r, row_count = 0; 1367 int r, row_count = 0;
1368 int min_w = 0, min_h = 0; 1368 int min_w = 0, min_h = 0;
1369 int max_h, inc_y; 1369 int max_h, inc_y;
@@ -1398,7 +1398,6 @@ evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *pri
1398 (priv, w, &row_count, row_max_h, row_break, row_width, &offset_y, &max_h); 1398 (priv, w, &row_count, row_max_h, row_break, row_width, &offset_y, &max_h);
1399 1399
1400 inc_y = 0; 1400 inc_y = 0;
1401 v_justify = 0;
1402 remain_y = h - (offset_y + max_h); 1401 remain_y = h - (offset_y + max_h);
1403 1402
1404 if (remain_y > 0) 1403 if (remain_y > 0)
diff --git a/libraries/evas/src/lib/canvas/evas_object_grid.c b/libraries/evas/src/lib/canvas/evas_object_grid.c
index ac96f04..db0f43d 100644
--- a/libraries/evas/src/lib/canvas/evas_object_grid.c
+++ b/libraries/evas/src/lib/canvas/evas_object_grid.c
@@ -1,5 +1,5 @@
1#include <errno.h>
2#include "evas_common.h" 1#include "evas_common.h"
2#include <errno.h>
3 3
4typedef struct _Evas_Object_Grid_Data Evas_Object_Grid_Data; 4typedef struct _Evas_Object_Grid_Data Evas_Object_Grid_Data;
5typedef struct _Evas_Object_Grid_Option Evas_Object_Grid_Option; 5typedef struct _Evas_Object_Grid_Option Evas_Object_Grid_Option;
diff --git a/libraries/evas/src/lib/canvas/evas_object_image.c b/libraries/evas/src/lib/canvas/evas_object_image.c
index 7f757a6..d9f6378 100644
--- a/libraries/evas/src/lib/canvas/evas_object_image.c
+++ b/libraries/evas/src/lib/canvas/evas_object_image.c
@@ -1,7 +1,13 @@
1#ifdef HAVE_CONFIG_H
2# include "config.h" /* so that EAPI in Evas.h is correctly defined */
3#endif
4
1#include <sys/types.h> 5#include <sys/types.h>
2#include <unistd.h> 6#include <unistd.h>
3#include <stdlib.h> 7#include <stdlib.h>
4#include <sys/mman.h> 8#ifdef HAVE_SYS_MMAN_H
9# include <sys/mman.h>
10#endif
5#include <math.h> 11#include <math.h>
6 12
7#include "evas_common.h" 13#include "evas_common.h"
@@ -192,8 +198,9 @@ evas_object_image_filled_add(Evas *e)
192static void 198static void
193_cleanup_tmpf(Evas_Object *obj) 199_cleanup_tmpf(Evas_Object *obj)
194{ 200{
201#ifdef HAVE_SYS_MMAN_H
195 Evas_Object_Image *o; 202 Evas_Object_Image *o;
196 203
197 o = (Evas_Object_Image *)(obj->object_data); 204 o = (Evas_Object_Image *)(obj->object_data);
198 if (!o->tmpf) return; 205 if (!o->tmpf) return;
199#ifdef __linux__ 206#ifdef __linux__
@@ -204,11 +211,15 @@ _cleanup_tmpf(Evas_Object *obj)
204 eina_stringshare_del(o->tmpf); 211 eina_stringshare_del(o->tmpf);
205 o->tmpf_fd = -1; 212 o->tmpf_fd = -1;
206 o->tmpf = NULL; 213 o->tmpf = NULL;
214#else
215 (void) obj;
216#endif
207} 217}
208 218
209static void 219static void
210_create_tmpf(Evas_Object *obj, void *data, int size, char *format __UNUSED__) 220_create_tmpf(Evas_Object *obj, void *data, int size, char *format __UNUSED__)
211{ 221{
222#ifdef HAVE_SYS_MMAN_H
212 Evas_Object_Image *o; 223 Evas_Object_Image *o;
213 char buf[4096]; 224 char buf[4096];
214 void *dst; 225 void *dst;
@@ -253,6 +264,12 @@ _create_tmpf(Evas_Object *obj, void *data, int size, char *format __UNUSED__)
253 o->tmpf = eina_stringshare_add(buf); 264 o->tmpf = eina_stringshare_add(buf);
254 memcpy(dst, data, size); 265 memcpy(dst, data, size);
255 munmap(dst, size); 266 munmap(dst, size);
267#else
268 (void) obj;
269 (void) data;
270 (void) size;
271 (void) format;
272#endif
256} 273}
257 274
258EAPI void 275EAPI void
@@ -1917,6 +1934,24 @@ evas_object_image_content_hint_get(const Evas_Object *obj)
1917 return o->content_hint; 1934 return o->content_hint;
1918} 1935}
1919 1936
1937EAPI Eina_Bool
1938evas_object_image_region_support_get(const Evas_Object *obj)
1939{
1940 Evas_Object_Image *o;
1941
1942 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
1943 return EINA_FALSE;
1944 MAGIC_CHECK_END();
1945 o = (Evas_Object_Image *) (obj->object_data);
1946 MAGIC_CHECK(o, Evas_Object_Image, MAGIC_OBJ_IMAGE);
1947 return EINA_FALSE;
1948 MAGIC_CHECK_END();
1949
1950 return obj->layer->evas->engine.func->image_can_region_get(
1951 obj->layer->evas->engine.data.output,
1952 o->engine_data);
1953}
1954
1920/* animated feature */ 1955/* animated feature */
1921EAPI Eina_Bool 1956EAPI Eina_Bool
1922evas_object_image_animated_get(const Evas_Object *obj) 1957evas_object_image_animated_get(const Evas_Object *obj)
@@ -3770,8 +3805,7 @@ evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_C
3770 to_cspace); 3805 to_cspace);
3771 break; 3806 break;
3772 case EVAS_COLORSPACE_YCBCR422601_PL: 3807 case EVAS_COLORSPACE_YCBCR422601_PL:
3773 fprintf(stderr, "EVAS_COLORSPACE_YCBCR422601_PL:\n"); 3808 out = evas_common_convert_yuv_422_601_to(data,
3774 out = evas_common_convert_yuv_422_601_to(data,
3775 o->cur.image.w, 3809 o->cur.image.w,
3776 o->cur.image.h, 3810 o->cur.image.h,
3777 to_cspace); 3811 to_cspace);
@@ -3795,7 +3829,7 @@ evas_object_image_data_convert_internal(Evas_Object_Image *o, void *data, Evas_C
3795 to_cspace); 3829 to_cspace);
3796 break; 3830 break;
3797 default: 3831 default:
3798 fprintf(stderr, "unknow colorspace: %i\n", o->cur.cspace); 3832 WRN("unknow colorspace: %i\n", o->cur.cspace);
3799 break; 3833 break;
3800 } 3834 }
3801 3835
@@ -3806,9 +3840,7 @@ static void
3806evas_object_image_filled_resize_listener(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *einfo __UNUSED__) 3840evas_object_image_filled_resize_listener(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *einfo __UNUSED__)
3807{ 3841{
3808 Evas_Coord w, h; 3842 Evas_Coord w, h;
3809 Evas_Object_Image *o;
3810 3843
3811 o = obj->object_data;
3812 evas_object_geometry_get(obj, NULL, NULL, &w, &h); 3844 evas_object_geometry_get(obj, NULL, NULL, &w, &h);
3813 evas_object_image_fill_set(obj, 0, 0, w, h); 3845 evas_object_image_fill_set(obj, 0, 0, w, h);
3814} 3846}
diff --git a/libraries/evas/src/lib/canvas/evas_object_inform.c b/libraries/evas/src/lib/canvas/evas_object_inform.c
index bc09eb9..302da42 100644
--- a/libraries/evas/src/lib/canvas/evas_object_inform.c
+++ b/libraries/evas/src/lib/canvas/evas_object_inform.c
@@ -8,7 +8,7 @@ evas_object_inform_call_show(Evas_Object *obj)
8{ 8{
9 _evas_object_event_new(); 9 _evas_object_event_new();
10 10
11 evas_object_event_callback_call(obj, EVAS_CALLBACK_SHOW, NULL); 11 evas_object_event_callback_call(obj, EVAS_CALLBACK_SHOW, NULL, _evas_event_counter);
12 _evas_post_event_callback_call(obj->layer->evas); 12 _evas_post_event_callback_call(obj->layer->evas);
13} 13}
14 14
@@ -17,7 +17,7 @@ evas_object_inform_call_hide(Evas_Object *obj)
17{ 17{
18 _evas_object_event_new(); 18 _evas_object_event_new();
19 19
20 evas_object_event_callback_call(obj, EVAS_CALLBACK_HIDE, NULL); 20 evas_object_event_callback_call(obj, EVAS_CALLBACK_HIDE, NULL, _evas_event_counter);
21 _evas_post_event_callback_call(obj->layer->evas); 21 _evas_post_event_callback_call(obj->layer->evas);
22} 22}
23 23
@@ -26,7 +26,7 @@ evas_object_inform_call_move(Evas_Object *obj)
26{ 26{
27 _evas_object_event_new(); 27 _evas_object_event_new();
28 28
29 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOVE, NULL); 29 evas_object_event_callback_call(obj, EVAS_CALLBACK_MOVE, NULL, _evas_event_counter);
30 _evas_post_event_callback_call(obj->layer->evas); 30 _evas_post_event_callback_call(obj->layer->evas);
31} 31}
32 32
@@ -35,7 +35,7 @@ evas_object_inform_call_resize(Evas_Object *obj)
35{ 35{
36 _evas_object_event_new(); 36 _evas_object_event_new();
37 37
38 evas_object_event_callback_call(obj, EVAS_CALLBACK_RESIZE, NULL); 38 evas_object_event_callback_call(obj, EVAS_CALLBACK_RESIZE, NULL, _evas_event_counter);
39 _evas_post_event_callback_call(obj->layer->evas); 39 _evas_post_event_callback_call(obj->layer->evas);
40} 40}
41 41
@@ -44,7 +44,7 @@ evas_object_inform_call_restack(Evas_Object *obj)
44{ 44{
45 _evas_object_event_new(); 45 _evas_object_event_new();
46 46
47 evas_object_event_callback_call(obj, EVAS_CALLBACK_RESTACK, NULL); 47 evas_object_event_callback_call(obj, EVAS_CALLBACK_RESTACK, NULL, _evas_event_counter);
48 _evas_post_event_callback_call(obj->layer->evas); 48 _evas_post_event_callback_call(obj->layer->evas);
49} 49}
50 50
@@ -53,7 +53,7 @@ evas_object_inform_call_changed_size_hints(Evas_Object *obj)
53{ 53{
54 _evas_object_event_new(); 54 _evas_object_event_new();
55 55
56 evas_object_event_callback_call(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, NULL); 56 evas_object_event_callback_call(obj, EVAS_CALLBACK_CHANGED_SIZE_HINTS, NULL, _evas_event_counter);
57 _evas_post_event_callback_call(obj->layer->evas); 57 _evas_post_event_callback_call(obj->layer->evas);
58} 58}
59 59
@@ -65,7 +65,7 @@ evas_object_inform_call_image_preloaded(Evas_Object *obj)
65 _evas_object_image_preloading_set(obj, 0); 65 _evas_object_image_preloading_set(obj, 0);
66 _evas_object_event_new(); 66 _evas_object_event_new();
67 67
68 evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_PRELOADED, NULL); 68 evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_PRELOADED, NULL, _evas_event_counter);
69 _evas_post_event_callback_call(obj->layer->evas); 69 _evas_post_event_callback_call(obj->layer->evas);
70} 70}
71 71
@@ -74,6 +74,6 @@ evas_object_inform_call_image_unloaded(Evas_Object *obj)
74{ 74{
75 _evas_object_event_new(); 75 _evas_object_event_new();
76 76
77 evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_UNLOADED, NULL); 77 evas_object_event_callback_call(obj, EVAS_CALLBACK_IMAGE_UNLOADED, NULL, _evas_event_counter);
78 _evas_post_event_callback_call(obj->layer->evas); 78 _evas_post_event_callback_call(obj->layer->evas);
79} 79}
diff --git a/libraries/evas/src/lib/canvas/evas_object_intercept.c b/libraries/evas/src/lib/canvas/evas_object_intercept.c
index c3e5e24..54f7265 100644
--- a/libraries/evas/src/lib/canvas/evas_object_intercept.c
+++ b/libraries/evas/src/lib/canvas/evas_object_intercept.c
@@ -9,7 +9,6 @@ static void evas_object_intercept_deinit(Evas_Object *obj);
9static void 9static void
10evas_object_intercept_init(Evas_Object *obj) 10evas_object_intercept_init(Evas_Object *obj)
11{ 11{
12 /* MEM OK */
13 if (!obj->interceptors) 12 if (!obj->interceptors)
14 obj->interceptors = evas_mem_calloc(sizeof(Evas_Intercept_Func)); 13 obj->interceptors = evas_mem_calloc(sizeof(Evas_Intercept_Func));
15} 14}
@@ -17,7 +16,6 @@ evas_object_intercept_init(Evas_Object *obj)
17static void 16static void
18evas_object_intercept_deinit(Evas_Object *obj) 17evas_object_intercept_deinit(Evas_Object *obj)
19{ 18{
20 /* MEM OK */
21 if (!obj->interceptors) return; 19 if (!obj->interceptors) return;
22 if ((obj->interceptors->show.func) || 20 if ((obj->interceptors->show.func) ||
23 (obj->interceptors->hide.func) || 21 (obj->interceptors->hide.func) ||
@@ -41,199 +39,186 @@ evas_object_intercept_deinit(Evas_Object *obj)
41void 39void
42evas_object_intercept_cleanup(Evas_Object *obj) 40evas_object_intercept_cleanup(Evas_Object *obj)
43{ 41{
44 /* MEM OK */
45 if (obj->interceptors) free(obj->interceptors); 42 if (obj->interceptors) free(obj->interceptors);
46} 43}
47 44
48int 45int
49evas_object_intercept_call_show(Evas_Object *obj) 46evas_object_intercept_call_show(Evas_Object *obj)
50{ 47{
51 /* MEM OK */
52 int ret; 48 int ret;
53 49
54 if (!obj->interceptors) return 0; 50 if (!obj->interceptors) return 0;
55 if (obj->intercepted) return 0; 51 if (obj->intercepted) return 0;
56 obj->intercepted = 1; 52 obj->intercepted = EINA_TRUE;
57 ret = !!(obj->interceptors->show.func); 53 ret = !!(obj->interceptors->show.func);
58 if (obj->interceptors->show.func) 54 if (ret)
59 obj->interceptors->show.func(obj->interceptors->show.data, obj); 55 obj->interceptors->show.func(obj->interceptors->show.data, obj);
60 obj->intercepted = 0; 56 obj->intercepted = EINA_FALSE;
61 return ret; 57 return ret;
62} 58}
63 59
64int 60int
65evas_object_intercept_call_hide(Evas_Object *obj) 61evas_object_intercept_call_hide(Evas_Object *obj)
66{ 62{
67 /* MEM OK */
68 int ret; 63 int ret;
69 64
70 if (!obj->interceptors) return 0; 65 if (!obj->interceptors) return 0;
71 if (obj->intercepted) return 0; 66 if (obj->intercepted) return 0;
72 obj->intercepted = 1; 67 obj->intercepted = EINA_TRUE;
73 ret = !!(obj->interceptors->hide.func); 68 ret = !!(obj->interceptors->hide.func);
74 if (obj->interceptors->hide.func) 69 if (ret)
75 obj->interceptors->hide.func(obj->interceptors->hide.data, obj); 70 obj->interceptors->hide.func(obj->interceptors->hide.data, obj);
76 obj->intercepted = 0; 71 obj->intercepted = EINA_FALSE;
77 return ret; 72 return ret;
78} 73}
79 74
80int 75int
81evas_object_intercept_call_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) 76evas_object_intercept_call_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
82{ 77{
83 /* MEM OK */
84 int ret; 78 int ret;
85 79
86 if (!obj->interceptors) return 0; 80 if (!obj->interceptors) return 0;
87 if (obj->intercepted) return 0; 81 if (obj->intercepted) return 0;
88 obj->intercepted = 1; 82 obj->intercepted = EINA_TRUE;
89 ret = !!(obj->interceptors->move.func); 83 ret = !!(obj->interceptors->move.func);
90 if (obj->interceptors->move.func) 84 if (ret)
91 obj->interceptors->move.func(obj->interceptors->move.data, obj, x, y); 85 obj->interceptors->move.func(obj->interceptors->move.data, obj, x, y);
92 obj->intercepted = 0; 86 obj->intercepted = EINA_FALSE;
93 return ret; 87 return ret;
94} 88}
95 89
96int 90int
97evas_object_intercept_call_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) 91evas_object_intercept_call_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
98{ 92{
99 /* MEM OK */
100 int ret; 93 int ret;
101 94
102 if (!obj->interceptors) return 0; 95 if (!obj->interceptors) return 0;
103 if (obj->intercepted) return 0; 96 if (obj->intercepted) return 0;
104 obj->intercepted = 1; 97 obj->intercepted = EINA_TRUE;
105 ret = !!(obj->interceptors->resize.func); 98 ret = !!(obj->interceptors->resize.func);
106 if (obj->interceptors->resize.func) 99 if (ret)
107 obj->interceptors->resize.func(obj->interceptors->resize.data, obj, w, h); 100 obj->interceptors->resize.func(obj->interceptors->resize.data, obj, w, h);
108 obj->intercepted = 0; 101 obj->intercepted = EINA_FALSE;
109 return ret; 102 return ret;
110} 103}
111 104
112int 105int
113evas_object_intercept_call_raise(Evas_Object *obj) 106evas_object_intercept_call_raise(Evas_Object *obj)
114{ 107{
115 /* MEM OK */
116 int ret; 108 int ret;
117 109
118 if (!obj->interceptors) return 0; 110 if (!obj->interceptors) return 0;
119 if (obj->intercepted) return 0; 111 if (obj->intercepted) return 0;
120 obj->intercepted = 1; 112 obj->intercepted = EINA_TRUE;
121 ret = !!(obj->interceptors->raise.func); 113 ret = !!(obj->interceptors->raise.func);
122 if (obj->interceptors->raise.func) 114 if (ret)
123 obj->interceptors->raise.func(obj->interceptors->raise.data, obj); 115 obj->interceptors->raise.func(obj->interceptors->raise.data, obj);
124 obj->intercepted = 0; 116 obj->intercepted = EINA_FALSE;
125 return ret; 117 return ret;
126} 118}
127 119
128int 120int
129evas_object_intercept_call_lower(Evas_Object *obj) 121evas_object_intercept_call_lower(Evas_Object *obj)
130{ 122{
131 /* MEM OK */
132 int ret; 123 int ret;
133 124
134 if (!obj->interceptors) return 0; 125 if (!obj->interceptors) return 0;
135 if (obj->intercepted) return 0; 126 if (obj->intercepted) return 0;
136 obj->intercepted = 1; 127 obj->intercepted = EINA_TRUE;
137 ret = !!(obj->interceptors->lower.func); 128 ret = !!(obj->interceptors->lower.func);
138 if (obj->interceptors->lower.func) 129 if (ret)
139 obj->interceptors->lower.func(obj->interceptors->lower.data, obj); 130 obj->interceptors->lower.func(obj->interceptors->lower.data, obj);
140 obj->intercepted = 0; 131 obj->intercepted = EINA_FALSE;
141 return ret; 132 return ret;
142} 133}
143 134
144int 135int
145evas_object_intercept_call_stack_above(Evas_Object *obj, Evas_Object *above) 136evas_object_intercept_call_stack_above(Evas_Object *obj, Evas_Object *above)
146{ 137{
147 /* MEM OK */
148 int ret; 138 int ret;
149 139
150 if (!obj->interceptors) return 0; 140 if (!obj->interceptors) return 0;
151 if (obj->intercepted) return 0; 141 if (obj->intercepted) return 0;
152 obj->intercepted = 1; 142 obj->intercepted = EINA_TRUE;
153 ret = !!(obj->interceptors->stack_above.func); 143 ret = !!(obj->interceptors->stack_above.func);
154 if (obj->interceptors->stack_above.func) 144 if (ret)
155 obj->interceptors->stack_above.func(obj->interceptors->stack_above.data, obj, above); 145 obj->interceptors->stack_above.func(obj->interceptors->stack_above.data, obj, above);
156 obj->intercepted = 0; 146 obj->intercepted = EINA_FALSE;
157 return ret; 147 return ret;
158} 148}
159 149
160int 150int
161evas_object_intercept_call_stack_below(Evas_Object *obj, Evas_Object *below) 151evas_object_intercept_call_stack_below(Evas_Object *obj, Evas_Object *below)
162{ 152{
163 /* MEM OK */
164 int ret; 153 int ret;
165 154
166 if (!obj->interceptors) return 0; 155 if (!obj->interceptors) return 0;
167 if (obj->intercepted) return 0; 156 if (obj->intercepted) return 0;
168 obj->intercepted = 1; 157 obj->intercepted = EINA_TRUE;
169 ret = !!(obj->interceptors->stack_below.func); 158 ret = !!(obj->interceptors->stack_below.func);
170 if (obj->interceptors->stack_below.func) 159 if (ret)
171 obj->interceptors->stack_below.func(obj->interceptors->stack_below.data, obj, below); 160 obj->interceptors->stack_below.func(obj->interceptors->stack_below.data, obj, below);
172 obj->intercepted = 0; 161 obj->intercepted = EINA_FALSE;
173 return ret; 162 return ret;
174} 163}
175 164
176int 165int
177evas_object_intercept_call_layer_set(Evas_Object *obj, int l) 166evas_object_intercept_call_layer_set(Evas_Object *obj, int l)
178{ 167{
179 /* MEM OK */
180 int ret; 168 int ret;
181 169
182 if (!obj->interceptors) return 0; 170 if (!obj->interceptors) return 0;
183 if (obj->intercepted) return 0; 171 if (obj->intercepted) return 0;
184 obj->intercepted = 1; 172 obj->intercepted = EINA_TRUE;
185 ret = !!(obj->interceptors->layer_set.func); 173 ret = !!(obj->interceptors->layer_set.func);
186 if (obj->interceptors->layer_set.func) 174 if (ret)
187 obj->interceptors->layer_set.func(obj->interceptors->layer_set.data, obj, l); 175 obj->interceptors->layer_set.func(obj->interceptors->layer_set.data, obj, l);
188 obj->intercepted = 0; 176 obj->intercepted = EINA_FALSE;
189 return ret; 177 return ret;
190} 178}
191 179
192int 180int
193evas_object_intercept_call_color_set(Evas_Object *obj, int r, int g, int b, int a) 181evas_object_intercept_call_color_set(Evas_Object *obj, int r, int g, int b, int a)
194{ 182{
195 /* MEM OK */
196 int ret; 183 int ret;
197 184
198 if (!obj->interceptors) return 0; 185 if (!obj->interceptors) return 0;
199 if (obj->intercepted) return 0; 186 if (obj->intercepted) return 0;
200 obj->intercepted = 1; 187 obj->intercepted = EINA_TRUE;
201 ret = !!(obj->interceptors->color_set.func); 188 ret = !!(obj->interceptors->color_set.func);
202 if (obj->interceptors->color_set.func) 189 if (ret)
203 obj->interceptors->color_set.func(obj->interceptors->color_set.data, obj, r, g, b, a); 190 obj->interceptors->color_set.func(obj->interceptors->color_set.data, obj, r, g, b, a);
204 obj->intercepted = 0; 191 obj->intercepted = EINA_FALSE;
205 return ret; 192 return ret;
206} 193}
207 194
208int 195int
209evas_object_intercept_call_clip_set(Evas_Object *obj, Evas_Object *clip) 196evas_object_intercept_call_clip_set(Evas_Object *obj, Evas_Object *clip)
210{ 197{
211 /* MEM OK */
212 int ret; 198 int ret;
213 199
214 if (!obj->interceptors) return 0; 200 if (!obj->interceptors) return 0;
215 if (obj->intercepted) return 0; 201 if (obj->intercepted) return 0;
216 obj->intercepted = 1; 202 obj->intercepted = EINA_TRUE;
217 ret = !!(obj->interceptors->clip_set.func); 203 ret = !!(obj->interceptors->clip_set.func);
218 if (obj->interceptors->clip_set.func) 204 if (ret)
219 obj->interceptors->clip_set.func(obj->interceptors->clip_set.data, obj, clip); 205 obj->interceptors->clip_set.func(obj->interceptors->clip_set.data, obj, clip);
220 obj->intercepted = 0; 206 obj->intercepted = EINA_FALSE;
221 return ret; 207 return ret;
222} 208}
223 209
224int 210int
225evas_object_intercept_call_clip_unset(Evas_Object *obj) 211evas_object_intercept_call_clip_unset(Evas_Object *obj)
226{ 212{
227 /* MEM OK */
228 int ret; 213 int ret;
229 214
230 if (!obj->interceptors) return 0; 215 if (!obj->interceptors) return 0;
231 if (obj->intercepted) return 0; 216 if (obj->intercepted) return 0;
232 obj->intercepted = 1; 217 obj->intercepted = EINA_TRUE;
233 ret = !!(obj->interceptors->clip_unset.func); 218 ret = !!(obj->interceptors->clip_unset.func);
234 if (obj->interceptors->clip_unset.func) 219 if (ret)
235 obj->interceptors->clip_unset.func(obj->interceptors->clip_unset.data, obj); 220 obj->interceptors->clip_unset.func(obj->interceptors->clip_unset.data, obj);
236 obj->intercepted = 0; 221 obj->intercepted = EINA_FALSE;
237 return ret; 222 return ret;
238} 223}
239 224
@@ -242,8 +227,6 @@ evas_object_intercept_call_clip_unset(Evas_Object *obj)
242EAPI void 227EAPI void
243evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func, const void *data) 228evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func, const void *data)
244{ 229{
245 /* MEM OK */
246
247 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 230 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
248 return; 231 return;
249 MAGIC_CHECK_END(); 232 MAGIC_CHECK_END();
@@ -257,7 +240,6 @@ evas_object_intercept_show_callback_add(Evas_Object *obj, Evas_Object_Intercept_
257EAPI void * 240EAPI void *
258evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func) 241evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_Show_Cb func)
259{ 242{
260 /* MEM OK */
261 void *data; 243 void *data;
262 244
263 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 245 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -275,7 +257,6 @@ evas_object_intercept_show_callback_del(Evas_Object *obj, Evas_Object_Intercept_
275EAPI void 257EAPI void
276evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func, const void *data) 258evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func, const void *data)
277{ 259{
278 /* MEM OK */
279 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 260 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
280 return; 261 return;
281 MAGIC_CHECK_END(); 262 MAGIC_CHECK_END();
@@ -289,7 +270,6 @@ evas_object_intercept_hide_callback_add(Evas_Object *obj, Evas_Object_Intercept_
289EAPI void * 270EAPI void *
290evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func) 271evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_Hide_Cb func)
291{ 272{
292 /* MEM OK */
293 void *data; 273 void *data;
294 274
295 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 275 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -307,7 +287,6 @@ evas_object_intercept_hide_callback_del(Evas_Object *obj, Evas_Object_Intercept_
307EAPI void 287EAPI void
308evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func, const void *data) 288evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func, const void *data)
309{ 289{
310 /* MEM OK */
311 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 290 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
312 return; 291 return;
313 MAGIC_CHECK_END(); 292 MAGIC_CHECK_END();
@@ -321,7 +300,6 @@ evas_object_intercept_move_callback_add(Evas_Object *obj, Evas_Object_Intercept_
321EAPI void * 300EAPI void *
322evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func) 301evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_Move_Cb func)
323{ 302{
324 /* MEM OK */
325 void *data; 303 void *data;
326 304
327 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 305 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -339,7 +317,6 @@ evas_object_intercept_move_callback_del(Evas_Object *obj, Evas_Object_Intercept_
339EAPI void 317EAPI void
340evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func, const void *data) 318evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func, const void *data)
341{ 319{
342 /* MEM OK */
343 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 320 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
344 return; 321 return;
345 MAGIC_CHECK_END(); 322 MAGIC_CHECK_END();
@@ -353,7 +330,6 @@ evas_object_intercept_resize_callback_add(Evas_Object *obj, Evas_Object_Intercep
353EAPI void * 330EAPI void *
354evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func) 331evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercept_Resize_Cb func)
355{ 332{
356 /* MEM OK */
357 void *data; 333 void *data;
358 334
359 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 335 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -371,7 +347,6 @@ evas_object_intercept_resize_callback_del(Evas_Object *obj, Evas_Object_Intercep
371EAPI void 347EAPI void
372evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func, const void *data) 348evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func, const void *data)
373{ 349{
374 /* MEM OK */
375 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 350 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
376 return; 351 return;
377 MAGIC_CHECK_END(); 352 MAGIC_CHECK_END();
@@ -385,7 +360,6 @@ evas_object_intercept_raise_callback_add(Evas_Object *obj, Evas_Object_Intercept
385EAPI void * 360EAPI void *
386evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func) 361evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept_Raise_Cb func)
387{ 362{
388 /* MEM OK */
389 void *data; 363 void *data;
390 364
391 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 365 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -403,7 +377,6 @@ evas_object_intercept_raise_callback_del(Evas_Object *obj, Evas_Object_Intercept
403EAPI void 377EAPI void
404evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func, const void *data) 378evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func, const void *data)
405{ 379{
406 /* MEM OK */
407 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 380 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
408 return; 381 return;
409 MAGIC_CHECK_END(); 382 MAGIC_CHECK_END();
@@ -417,7 +390,6 @@ evas_object_intercept_lower_callback_add(Evas_Object *obj, Evas_Object_Intercept
417EAPI void * 390EAPI void *
418evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func) 391evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept_Lower_Cb func)
419{ 392{
420 /* MEM OK */
421 void *data; 393 void *data;
422 394
423 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 395 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -435,7 +407,6 @@ evas_object_intercept_lower_callback_del(Evas_Object *obj, Evas_Object_Intercept
435EAPI void 407EAPI void
436evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func, const void *data) 408evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func, const void *data)
437{ 409{
438 /* MEM OK */
439 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 410 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
440 return; 411 return;
441 MAGIC_CHECK_END(); 412 MAGIC_CHECK_END();
@@ -449,7 +420,6 @@ evas_object_intercept_stack_above_callback_add(Evas_Object *obj, Evas_Object_Int
449EAPI void * 420EAPI void *
450evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func) 421evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Above_Cb func)
451{ 422{
452 /* MEM OK */
453 void *data; 423 void *data;
454 424
455 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 425 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -467,7 +437,6 @@ evas_object_intercept_stack_above_callback_del(Evas_Object *obj, Evas_Object_Int
467EAPI void 437EAPI void
468evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func, const void *data) 438evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func, const void *data)
469{ 439{
470 /* MEM OK */
471 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 440 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
472 return; 441 return;
473 MAGIC_CHECK_END(); 442 MAGIC_CHECK_END();
@@ -481,7 +450,6 @@ evas_object_intercept_stack_below_callback_add(Evas_Object *obj, Evas_Object_Int
481EAPI void * 450EAPI void *
482evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func) 451evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Intercept_Stack_Below_Cb func)
483{ 452{
484 /* MEM OK */
485 void *data; 453 void *data;
486 454
487 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 455 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -499,7 +467,6 @@ evas_object_intercept_stack_below_callback_del(Evas_Object *obj, Evas_Object_Int
499EAPI void 467EAPI void
500evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func, const void *data) 468evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func, const void *data)
501{ 469{
502 /* MEM OK */
503 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 470 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
504 return; 471 return;
505 MAGIC_CHECK_END(); 472 MAGIC_CHECK_END();
@@ -513,7 +480,6 @@ evas_object_intercept_layer_set_callback_add(Evas_Object *obj, Evas_Object_Inter
513EAPI void * 480EAPI void *
514evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func) 481evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Layer_Set_Cb func)
515{ 482{
516 /* MEM OK */
517 void *data; 483 void *data;
518 484
519 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 485 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -531,7 +497,6 @@ evas_object_intercept_layer_set_callback_del(Evas_Object *obj, Evas_Object_Inter
531EAPI void 497EAPI void
532evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func, const void *data) 498evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func, const void *data)
533{ 499{
534 /* MEM OK */
535 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 500 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
536 return; 501 return;
537 MAGIC_CHECK_END(); 502 MAGIC_CHECK_END();
@@ -545,7 +510,6 @@ evas_object_intercept_color_set_callback_add(Evas_Object *obj, Evas_Object_Inter
545EAPI void * 510EAPI void *
546evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func) 511evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Color_Set_Cb func)
547{ 512{
548 /* MEM OK */
549 void *data; 513 void *data;
550 514
551 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 515 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -563,7 +527,6 @@ evas_object_intercept_color_set_callback_del(Evas_Object *obj, Evas_Object_Inter
563EAPI void 527EAPI void
564evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func, const void *data) 528evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func, const void *data)
565{ 529{
566 /* MEM OK */
567 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 530 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
568 return; 531 return;
569 MAGIC_CHECK_END(); 532 MAGIC_CHECK_END();
@@ -577,7 +540,6 @@ evas_object_intercept_clip_set_callback_add(Evas_Object *obj, Evas_Object_Interc
577EAPI void * 540EAPI void *
578evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func) 541evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Set_Cb func)
579{ 542{
580 /* MEM OK */
581 void *data; 543 void *data;
582 544
583 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 545 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
@@ -595,7 +557,6 @@ evas_object_intercept_clip_set_callback_del(Evas_Object *obj, Evas_Object_Interc
595EAPI void 557EAPI void
596evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func, const void *data) 558evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func, const void *data)
597{ 559{
598 /* MEM OK */
599 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 560 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
600 return; 561 return;
601 MAGIC_CHECK_END(); 562 MAGIC_CHECK_END();
@@ -609,7 +570,6 @@ evas_object_intercept_clip_unset_callback_add(Evas_Object *obj, Evas_Object_Inte
609EAPI void * 570EAPI void *
610evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func) 571evas_object_intercept_clip_unset_callback_del(Evas_Object *obj, Evas_Object_Intercept_Clip_Unset_Cb func)
611{ 572{
612 /* MEM OK */
613 void *data; 573 void *data;
614 574
615 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 575 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
diff --git a/libraries/evas/src/lib/canvas/evas_object_main.c b/libraries/evas/src/lib/canvas/evas_object_main.c
index 3eaded9..86ab498 100644
--- a/libraries/evas/src/lib/canvas/evas_object_main.c
+++ b/libraries/evas/src/lib/canvas/evas_object_main.c
@@ -25,6 +25,7 @@ evas_object_new(Evas *e __UNUSED__)
25 obj->magic = MAGIC_OBJ; 25 obj->magic = MAGIC_OBJ;
26 obj->cur.scale = 1.0; 26 obj->cur.scale = 1.0;
27 obj->prev.scale = 1.0; 27 obj->prev.scale = 1.0;
28 obj->is_frame = EINA_FALSE;
28 29
29 return obj; 30 return obj;
30} 31}
@@ -99,7 +100,8 @@ evas_object_change(Evas_Object *obj)
99 /* set changed flag on all objects this one clips too */ 100 /* set changed flag on all objects this one clips too */
100 if (!((movch) && (obj->is_static_clip))) 101 if (!((movch) && (obj->is_static_clip)))
101 { 102 {
102 EINA_LIST_FOREACH(obj->clip.clipees, l, obj2) evas_object_change(obj2); 103 EINA_LIST_FOREACH(obj->clip.clipees, l, obj2)
104 evas_object_change(obj2);
103 } 105 }
104 EINA_LIST_FOREACH(obj->proxy.proxies, l, obj2) 106 EINA_LIST_FOREACH(obj->proxy.proxies, l, obj2)
105 { 107 {
@@ -111,8 +113,8 @@ evas_object_change(Evas_Object *obj)
111void 113void
112evas_object_render_pre_visible_change(Eina_Array *rects, Evas_Object *obj, int is_v, int was_v) 114evas_object_render_pre_visible_change(Eina_Array *rects, Evas_Object *obj, int is_v, int was_v)
113{ 115{
114 if (obj->smart.smart) return ; 116 if (obj->smart.smart) return;
115 if (is_v == was_v) return ; 117 if (is_v == was_v) return;
116 if (is_v) 118 if (is_v)
117 { 119 {
118 evas_add_rect(rects, 120 evas_add_rect(rects,
@@ -134,8 +136,8 @@ evas_object_render_pre_visible_change(Eina_Array *rects, Evas_Object *obj, int i
134void 136void
135evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *obj) 137evas_object_render_pre_clipper_change(Eina_Array *rects, Evas_Object *obj)
136{ 138{
137 if (obj->smart.smart) return ; 139 if (obj->smart.smart) return;
138 if (obj->cur.clipper == obj->prev.clipper) return ; 140 if (obj->cur.clipper == obj->prev.clipper) return;
139 if ((obj->cur.clipper) && (obj->prev.clipper)) 141 if ((obj->cur.clipper) && (obj->prev.clipper))
140 { 142 {
141 /* get difference rects between clippers */ 143 /* get difference rects between clippers */
@@ -223,7 +225,8 @@ evas_object_clip_changes_clean(Evas_Object *obj)
223{ 225{
224 Eina_Rectangle *r; 226 Eina_Rectangle *r;
225 227
226 EINA_LIST_FREE(obj->clip.changes, r) eina_rectangle_free(r); 228 EINA_LIST_FREE(obj->clip.changes, r)
229 eina_rectangle_free(r);
227} 230}
228 231
229void 232void
@@ -408,11 +411,11 @@ evas_object_del(Evas_Object *obj)
408 obj->focused = 0; 411 obj->focused = 0;
409 obj->layer->evas->focused = NULL; 412 obj->layer->evas->focused = NULL;
410 _evas_object_event_new(); 413 _evas_object_event_new();
411 evas_object_event_callback_call(obj, EVAS_CALLBACK_FOCUS_OUT, NULL); 414 evas_object_event_callback_call(obj, EVAS_CALLBACK_FOCUS_OUT, NULL, _evas_event_counter);
412 _evas_post_event_callback_call(obj->layer->evas); 415 _evas_post_event_callback_call(obj->layer->evas);
413 } 416 }
414 _evas_object_event_new(); 417 _evas_object_event_new();
415 evas_object_event_callback_call(obj, EVAS_CALLBACK_DEL, NULL); 418 evas_object_event_callback_call(obj, EVAS_CALLBACK_DEL, NULL, _evas_event_counter);
416 _evas_post_event_callback_call(obj->layer->evas); 419 _evas_post_event_callback_call(obj->layer->evas);
417 if (obj->mouse_grabbed > 0) 420 if (obj->mouse_grabbed > 0)
418 obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed; 421 obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
@@ -426,9 +429,6 @@ evas_object_del(Evas_Object *obj)
426 evas_object_free(obj, 1); 429 evas_object_free(obj, 1);
427 return; 430 return;
428 } 431 }
429 obj->layer->evas->pointer.mouse_grabbed -= obj->mouse_grabbed;
430 obj->mouse_grabbed = 0;
431 obj->mouse_in = 0;
432 evas_object_grabs_cleanup(obj); 432 evas_object_grabs_cleanup(obj);
433 while (obj->clip.clipees) 433 while (obj->clip.clipees)
434 evas_object_clip_unset(obj->clip.clipees->data); 434 evas_object_clip_unset(obj->clip.clipees->data);
@@ -438,7 +438,7 @@ evas_object_del(Evas_Object *obj)
438 if (obj->smart.smart) evas_object_smart_del(obj); 438 if (obj->smart.smart) evas_object_smart_del(obj);
439 evas_object_map_set(obj, NULL); 439 evas_object_map_set(obj, NULL);
440 _evas_object_event_new(); 440 _evas_object_event_new();
441 evas_object_event_callback_call(obj, EVAS_CALLBACK_FREE, NULL); 441 evas_object_event_callback_call(obj, EVAS_CALLBACK_FREE, NULL, _evas_event_counter);
442 _evas_post_event_callback_call(obj->layer->evas); 442 _evas_post_event_callback_call(obj->layer->evas);
443 evas_object_smart_cleanup(obj); 443 evas_object_smart_cleanup(obj);
444 obj->delete_me = 1; 444 obj->delete_me = 1;
@@ -449,18 +449,38 @@ EAPI void
449evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) 449evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
450{ 450{
451 int is, was = 0, pass = 0, freeze = 0; 451 int is, was = 0, pass = 0, freeze = 0;
452 int nx = 0, ny = 0;
452 453
453 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 454 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
454 return; 455 return;
455 MAGIC_CHECK_END(); 456 MAGIC_CHECK_END();
456 if (obj->delete_me) return; 457 if (obj->delete_me) return;
457 if (evas_object_intercept_call_move(obj, x, y)) return; 458
459 nx = x;
460 ny = y;
461
462 if (!obj->is_frame)
463 {
464 int fx, fy;
465
466 evas_output_framespace_get(obj->layer->evas, &fx, &fy, NULL, NULL);
467 if (!obj->smart.parent)
468 {
469 nx += fx;
470 ny += fy;
471 }
472 }
473
474 if (evas_object_intercept_call_move(obj, nx, ny)) return;
475
458 if (obj->doing.in_move > 0) 476 if (obj->doing.in_move > 0)
459 { 477 {
460 WRN("evas_object_move() called on object %p when in the middle of moving the same object", obj); 478 WRN("evas_object_move() called on object %p when in the middle of moving the same object", obj);
461 return; 479 return;
462 } 480 }
463 if ((obj->cur.geometry.x == x) && (obj->cur.geometry.y == y)) return; 481
482 if ((obj->cur.geometry.x == nx) && (obj->cur.geometry.y == ny)) return;
483
464 if (obj->layer->evas->events_frozen <= 0) 484 if (obj->layer->evas->events_frozen <= 0)
465 { 485 {
466 pass = evas_event_passes_through(obj); 486 pass = evas_event_passes_through(obj);
@@ -471,13 +491,16 @@ evas_object_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
471 obj->layer->evas->pointer.y, 1, 1); 491 obj->layer->evas->pointer.y, 1, 1);
472 } 492 }
473 obj->doing.in_move++; 493 obj->doing.in_move++;
494
474 if (obj->smart.smart) 495 if (obj->smart.smart)
475 { 496 {
476 if (obj->smart.smart->smart_class->move) 497 if (obj->smart.smart->smart_class->move)
477 obj->smart.smart->smart_class->move(obj, x, y); 498 obj->smart.smart->smart_class->move(obj, nx, ny);
478 } 499 }
479 obj->cur.geometry.x = x; 500
480 obj->cur.geometry.y = y; 501 obj->cur.geometry.x = nx;
502 obj->cur.geometry.y = ny;
503
481//// obj->cur.cache.geometry.validity = 0; 504//// obj->cur.cache.geometry.validity = 0;
482 obj->changed_move = 1; 505 obj->changed_move = 1;
483 evas_object_change(obj); 506 evas_object_change(obj);
@@ -509,19 +532,40 @@ EAPI void
509evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) 532evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
510{ 533{
511 int is, was = 0, pass = 0, freeze =0; 534 int is, was = 0, pass = 0, freeze =0;
535 int nw = 0, nh = 0;
512 536
513 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ); 537 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
514 return; 538 return;
515 MAGIC_CHECK_END(); 539 MAGIC_CHECK_END();
516 if (obj->delete_me) return; 540 if (obj->delete_me) return;
517 if (w < 0) w = 0; if (h < 0) h = 0; 541 if (w < 0) w = 0; if (h < 0) h = 0;
518 if (evas_object_intercept_call_resize(obj, w, h)) return; 542
543 nw = w;
544 nh = h;
545 if (!obj->is_frame)
546 {
547 int fw, fh;
548
549 evas_output_framespace_get(obj->layer->evas, NULL, NULL, &fw, &fh);
550 if (!obj->smart.parent)
551 {
552 nw = w - fw;
553 nh = h - fh;
554 if (nw < 0) nw = 0;
555 if (nh < 0) nh = 0;
556 }
557 }
558
559 if (evas_object_intercept_call_resize(obj, nw, nh)) return;
560
519 if (obj->doing.in_resize > 0) 561 if (obj->doing.in_resize > 0)
520 { 562 {
521 WRN("evas_object_resize() called on object %p when in the middle of resizing the same object", obj); 563 WRN("evas_object_resize() called on object %p when in the middle of resizing the same object", obj);
522 return; 564 return;
523 } 565 }
524 if ((obj->cur.geometry.w == w) && (obj->cur.geometry.h == h)) return; 566
567 if ((obj->cur.geometry.w == nw) && (obj->cur.geometry.h == nh)) return;
568
525 if (obj->layer->evas->events_frozen <= 0) 569 if (obj->layer->evas->events_frozen <= 0)
526 { 570 {
527 pass = evas_event_passes_through(obj); 571 pass = evas_event_passes_through(obj);
@@ -532,13 +576,16 @@ evas_object_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
532 obj->layer->evas->pointer.y, 1, 1); 576 obj->layer->evas->pointer.y, 1, 1);
533 } 577 }
534 obj->doing.in_resize++; 578 obj->doing.in_resize++;
579
535 if (obj->smart.smart) 580 if (obj->smart.smart)
536 { 581 {
537 if (obj->smart.smart->smart_class->resize) 582 if (obj->smart.smart->smart_class->resize)
538 obj->smart.smart->smart_class->resize(obj, w, h); 583 obj->smart.smart->smart_class->resize(obj, nw, nh);
539 } 584 }
540 obj->cur.geometry.w = w; 585
541 obj->cur.geometry.h = h; 586 obj->cur.geometry.w = nw;
587 obj->cur.geometry.h = nh;
588
542//// obj->cur.cache.geometry.validity = 0; 589//// obj->cur.cache.geometry.validity = 0;
543 evas_object_change(obj); 590 evas_object_change(obj);
544 evas_object_clip_dirty(obj); 591 evas_object_clip_dirty(obj);
@@ -581,6 +628,7 @@ evas_object_geometry_get(const Evas_Object *obj, Evas_Coord *x, Evas_Coord *y, E
581 if (x) *x = 0; if (y) *y = 0; if (w) *w = 0; if (h) *h = 0; 628 if (x) *x = 0; if (y) *y = 0; if (w) *w = 0; if (h) *h = 0;
582 return; 629 return;
583 } 630 }
631
584 if (x) *x = obj->cur.geometry.x; 632 if (x) *x = obj->cur.geometry.x;
585 if (y) *y = obj->cur.geometry.y; 633 if (y) *y = obj->cur.geometry.y;
586 if (w) *w = obj->cur.geometry.w; 634 if (w) *w = obj->cur.geometry.w;
@@ -1084,8 +1132,7 @@ evas_object_render_op_set(Evas_Object *obj, Evas_Render_Op render_op)
1084 return; 1132 return;
1085 MAGIC_CHECK_END(); 1133 MAGIC_CHECK_END();
1086 if (obj->delete_me) return; 1134 if (obj->delete_me) return;
1087 if ((Evas_Render_Op)obj->cur.render_op == render_op) 1135 if (obj->cur.render_op == render_op) return;
1088 return;
1089 obj->cur.render_op = render_op; 1136 obj->cur.render_op = render_op;
1090 evas_object_change(obj); 1137 evas_object_change(obj);
1091} 1138}
@@ -1317,3 +1364,20 @@ evas_object_static_clip_get(const Evas_Object *obj)
1317 return obj->is_static_clip; 1364 return obj->is_static_clip;
1318} 1365}
1319 1366
1367EAPI void
1368evas_object_is_frame_object_set(Evas_Object *obj, Eina_Bool is_frame)
1369{
1370 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
1371 return;
1372 MAGIC_CHECK_END();
1373 obj->is_frame = is_frame;
1374}
1375
1376EAPI Eina_Bool
1377evas_object_is_frame_object_get(Evas_Object *obj)
1378{
1379 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
1380 return EINA_FALSE;
1381 MAGIC_CHECK_END();
1382 return obj->is_frame;
1383}
diff --git a/libraries/evas/src/lib/canvas/evas_object_smart.c b/libraries/evas/src/lib/canvas/evas_object_smart.c
index a7dfcdf..69d7f3b 100644
--- a/libraries/evas/src/lib/canvas/evas_object_smart.c
+++ b/libraries/evas/src/lib/canvas/evas_object_smart.c
@@ -402,6 +402,37 @@ evas_object_smart_callback_del(Evas_Object *obj, const char *event, Evas_Smart_C
402 return NULL; 402 return NULL;
403} 403}
404 404
405EAPI void *
406evas_object_smart_callback_del_full(Evas_Object *obj, const char *event, Evas_Smart_Cb func, const void *data)
407{
408 Evas_Object_Smart *o;
409 Eina_List *l;
410 Evas_Smart_Callback *cb;
411
412 MAGIC_CHECK(obj, Evas_Object, MAGIC_OBJ);
413 return NULL;
414 MAGIC_CHECK_END();
415 o = (Evas_Object_Smart *)(obj->object_data);
416 MAGIC_CHECK(o, Evas_Object_Smart, MAGIC_OBJ_SMART);
417 return NULL;
418 MAGIC_CHECK_END();
419 if (!event) return NULL;
420 EINA_LIST_FOREACH(o->callbacks, l, cb)
421 {
422 if ((!strcmp(cb->event, event)) && (cb->func == func) && (cb->func_data == data))
423 {
424 void *ret;
425
426 ret = cb->func_data;
427 cb->delete_me = 1;
428 o->deletions_waiting = 1;
429 evas_object_smart_callbacks_clear(obj);
430 return ret;
431 }
432 }
433 return NULL;
434}
435
405EAPI void 436EAPI void
406evas_object_smart_callback_call(Evas_Object *obj, const char *event, void *event_info) 437evas_object_smart_callback_call(Evas_Object *obj, const char *event, void *event_info)
407{ 438{
diff --git a/libraries/evas/src/lib/canvas/evas_object_table.c b/libraries/evas/src/lib/canvas/evas_object_table.c
index 6e28fce..cdfa07f 100644
--- a/libraries/evas/src/lib/canvas/evas_object_table.c
+++ b/libraries/evas/src/lib/canvas/evas_object_table.c
@@ -1,5 +1,5 @@
1#include <errno.h>
2#include "evas_common.h" 1#include "evas_common.h"
2#include <errno.h>
3 3
4typedef struct _Evas_Object_Table_Data Evas_Object_Table_Data; 4typedef struct _Evas_Object_Table_Data Evas_Object_Table_Data;
5typedef struct _Evas_Object_Table_Option Evas_Object_Table_Option; 5typedef struct _Evas_Object_Table_Option Evas_Object_Table_Option;
diff --git a/libraries/evas/src/lib/canvas/evas_object_text.c b/libraries/evas/src/lib/canvas/evas_object_text.c
index 6c30fcc..dbe5e08 100644
--- a/libraries/evas/src/lib/canvas/evas_object_text.c
+++ b/libraries/evas/src/lib/canvas/evas_object_text.c
@@ -531,8 +531,9 @@ _evas_object_text_layout(Evas_Object *obj, Evas_Object_Text *o, const Eina_Unico
531{ 531{
532 EvasBiDiStrIndex *v_to_l = NULL; 532 EvasBiDiStrIndex *v_to_l = NULL;
533 size_t pos, visual_pos; 533 size_t pos, visual_pos;
534 int len = eina_unicode_strlen(text), par_len; 534 int len = eina_unicode_strlen(text);
535#ifdef BIDI_SUPPORT 535#ifdef BIDI_SUPPORT
536 int par_len = len;
536 int *segment_idxs = NULL; 537 int *segment_idxs = NULL;
537 if (o->bidi_delimiters) 538 if (o->bidi_delimiters)
538 segment_idxs = evas_bidi_segment_idxs_get(text, o->bidi_delimiters); 539 segment_idxs = evas_bidi_segment_idxs_get(text, o->bidi_delimiters);
@@ -543,7 +544,6 @@ _evas_object_text_layout(Evas_Object *obj, Evas_Object_Text *o, const Eina_Unico
543#endif 544#endif
544 visual_pos = pos = 0; 545 visual_pos = pos = 0;
545 546
546 par_len = len;
547 while (len > 0) 547 while (len > 0)
548 { 548 {
549 Evas_Font_Instance *script_fi = NULL; 549 Evas_Font_Instance *script_fi = NULL;
diff --git a/libraries/evas/src/lib/canvas/evas_object_textblock.c b/libraries/evas/src/lib/canvas/evas_object_textblock.c
index 7941a45..568911c 100644
--- a/libraries/evas/src/lib/canvas/evas_object_textblock.c
+++ b/libraries/evas/src/lib/canvas/evas_object_textblock.c
@@ -61,13 +61,13 @@
61 * @subsection textblock_layout The layout system 61 * @subsection textblock_layout The layout system
62 * @todo write @ref textblock_layout 62 * @todo write @ref textblock_layout
63 */ 63 */
64#include <stdlib.h>
65
66#include "evas_common.h" 64#include "evas_common.h"
67#include "evas_private.h" 65#include "evas_private.h"
66#include <stdlib.h>
68 67
69#ifdef HAVE_LINEBREAK 68#ifdef HAVE_LINEBREAK
70#include "linebreak.h" 69#include "linebreak.h"
70#include "wordbreak.h"
71#endif 71#endif
72 72
73/* save typing */ 73/* save typing */
@@ -78,12 +78,19 @@
78static const char o_type[] = "textblock"; 78static const char o_type[] = "textblock";
79 79
80/* The char to be inserted instead of visible formats */ 80/* The char to be inserted instead of visible formats */
81#define EVAS_TEXTBLOCK_REPLACEMENT_CHAR 0xFFFC 81#define _REPLACEMENT_CHAR 0xFFFC
82#define _PARAGRAPH_SEPARATOR 0x2029 82#define _PARAGRAPH_SEPARATOR 0x2029
83#define _NEWLINE '\n'
84#define _TAB '\t'
85
86#define _REPLACEMENT_CHAR_UTF8 "\xEF\xBF\xBC"
87#define _PARAGRAPH_SEPARATOR_UTF8 "\xE2\x80\xA9"
88#define _NEWLINE_UTF8 "\n"
89#define _TAB_UTF8 "\t"
83#define EVAS_TEXTBLOCK_IS_VISIBLE_FORMAT_CHAR(ch) \ 90#define EVAS_TEXTBLOCK_IS_VISIBLE_FORMAT_CHAR(ch) \
84 (((ch) == EVAS_TEXTBLOCK_REPLACEMENT_CHAR) || \ 91 (((ch) == _REPLACEMENT_CHAR) || \
85 ((ch) == '\n') || \ 92 ((ch) == _NEWLINE) || \
86 ((ch) == '\t') || \ 93 ((ch) == _TAB) || \
87 ((ch) == _PARAGRAPH_SEPARATOR)) 94 ((ch) == _PARAGRAPH_SEPARATOR))
88 95
89/* private struct for textblock object internal data */ 96/* private struct for textblock object internal data */
@@ -101,6 +108,12 @@ typedef struct _Evas_Object_Textblock Evas_Object_Textblock;
101typedef struct _Evas_Object_Style_Tag Evas_Object_Style_Tag; 108typedef struct _Evas_Object_Style_Tag Evas_Object_Style_Tag;
102/** 109/**
103 * @internal 110 * @internal
111 * @typedef Evas_Object_Style_Tag
112 * The structure used for finding style tags.
113 */
114typedef struct _Evas_Object_Style_Tag_Base Evas_Object_Style_Tag_Base;
115/**
116 * @internal
104 * @typedef Evas_Object_Textblock_Node_Text 117 * @typedef Evas_Object_Textblock_Node_Text
105 * A text node. 118 * A text node.
106 */ 119 */
@@ -195,21 +208,26 @@ typedef struct _Evas_Object_Textblock_Format Evas_Object_Textblock_Format;
195 * Returns true if closer is the closer of base. 208 * Returns true if closer is the closer of base.
196 */ 209 */
197#define _FORMAT_IS_CLOSER_OF(base, closer, closer_len) \ 210#define _FORMAT_IS_CLOSER_OF(base, closer, closer_len) \
198 (!strncmp(base + 1, closer, closer_len) && \ 211 (!strncmp(base, closer, closer_len) && \
199 (!base[closer_len + 1] || \ 212 (!base[closer_len] || \
200 (base[closer_len + 1] == '=') || \ 213 (base[closer_len] == '=') || \
201 _is_white(base[closer_len + 1]))) 214 _is_white(base[closer_len])))
202 215
203/*FIXME: document the structs and struct items. */ 216/*FIXME: document the structs and struct items. */
204struct _Evas_Object_Style_Tag 217struct _Evas_Object_Style_Tag_Base
205{ 218{
206 EINA_INLIST;
207 char *tag; 219 char *tag;
208 char *replace; 220 char *replace;
209 size_t tag_len; 221 size_t tag_len;
210 size_t replace_len; 222 size_t replace_len;
211}; 223};
212 224
225struct _Evas_Object_Style_Tag
226{
227 EINA_INLIST;
228 Evas_Object_Style_Tag_Base tag;
229};
230
213struct _Evas_Object_Textblock_Node_Text 231struct _Evas_Object_Textblock_Node_Text
214{ 232{
215 EINA_INLIST; 233 EINA_INLIST;
@@ -229,11 +247,18 @@ struct _Evas_Object_Textblock_Node_Format
229 Evas_Object_Textblock_Node_Text *text_node; 247 Evas_Object_Textblock_Node_Text *text_node;
230 size_t offset; 248 size_t offset;
231 unsigned char anchor : 2; 249 unsigned char anchor : 2;
250 Eina_Bool opener : 1;
251 Eina_Bool own_closer : 1;
232 Eina_Bool visible : 1; 252 Eina_Bool visible : 1;
233 Eina_Bool format_change : 1; 253 Eina_Bool format_change : 1;
234 Eina_Bool is_new : 1; 254 Eina_Bool is_new : 1;
235}; 255};
236 256
257/* The default tags to use */
258static const Evas_Object_Style_Tag_Base default_tags[] = {
259 { "b", "+ font_weight=Bold", 1, 18 },
260 { "i", "+ font_style=Italic", 1, 19 }};
261
237#define ANCHOR_NONE 0 262#define ANCHOR_NONE 0
238#define ANCHOR_A 1 263#define ANCHOR_A 1
239#define ANCHOR_ITEM 2 264#define ANCHOR_ITEM 2
@@ -538,8 +563,8 @@ _style_replace(Evas_Textblock_Style *ts, const char *style_text)
538 563
539 tag = (Evas_Object_Style_Tag *)ts->tags; 564 tag = (Evas_Object_Style_Tag *)ts->tags;
540 ts->tags = (Evas_Object_Style_Tag *)eina_inlist_remove(EINA_INLIST_GET(ts->tags), EINA_INLIST_GET(tag)); 565 ts->tags = (Evas_Object_Style_Tag *)eina_inlist_remove(EINA_INLIST_GET(ts->tags), EINA_INLIST_GET(tag));
541 free(tag->tag); 566 free(tag->tag.tag);
542 free(tag->replace); 567 free(tag->tag.replace);
543 free(tag); 568 free(tag);
544 } 569 }
545 ts->default_tag = NULL; 570 ts->default_tag = NULL;
@@ -567,19 +592,38 @@ _style_clear(Evas_Textblock_Style *ts)
567 * @return The replacement string found. 592 * @return The replacement string found.
568 */ 593 */
569static inline const char * 594static inline const char *
570_style_match_tag(Evas_Textblock_Style *ts, const char *s, size_t tag_len, size_t *replace_len) 595_style_match_tag(const Evas_Textblock_Style *ts, const char *s, size_t tag_len, size_t *replace_len)
571{ 596{
572 Evas_Object_Style_Tag *tag; 597 Evas_Object_Style_Tag *tag;
573 598
599 /* Try the style tags */
574 EINA_INLIST_FOREACH(ts->tags, tag) 600 EINA_INLIST_FOREACH(ts->tags, tag)
575 { 601 {
576 if (tag->tag_len != tag_len) continue; 602 if (tag->tag.tag_len != tag_len) continue;
577 if (!strncmp(tag->tag, s, tag_len)) 603 if (!strncmp(tag->tag.tag, s, tag_len))
578 { 604 {
579 *replace_len = tag->replace_len; 605 *replace_len = tag->tag.replace_len;
580 return tag->replace; 606 return tag->tag.replace;
581 } 607 }
582 } 608 }
609
610 /* Try the default tags */
611 {
612 size_t i;
613 const Evas_Object_Style_Tag_Base *btag;
614 for (btag = default_tags, i = 0 ;
615 i < (sizeof(default_tags) / sizeof(default_tags[0])) ;
616 btag++, i++)
617 {
618 if (btag->tag_len != tag_len) continue;
619 if (!strncmp(btag->tag, s, tag_len))
620 {
621 *replace_len = btag->replace_len;
622 return btag->replace;
623 }
624 }
625 }
626
583 *replace_len = 0; 627 *replace_len = 0;
584 return NULL; 628 return NULL;
585} 629}
@@ -1689,8 +1733,8 @@ _format_fill(Evas_Object *obj, Evas_Object_Textblock_Format *fmt, const char *st
1689 1733
1690 s = str; 1734 s = str;
1691 1735
1692 /* get rid of anything +s or -s off the start of the string */ 1736 /* get rid of any spaces at the start of the string */
1693 while ((*s == ' ') || (*s == '+') || (*s == '-')) s++; 1737 while (*s == ' ') s++;
1694 1738
1695 while ((item = _format_parse(&s))) 1739 while ((item = _format_parse(&s)))
1696 { 1740 {
@@ -2131,7 +2175,6 @@ _layout_format_pop(Ctxt *c, const char *format)
2131 if ((c->format_stack) && (c->format_stack->next)) 2175 if ((c->format_stack) && (c->format_stack->next))
2132 { 2176 {
2133 Eina_List *redo_nodes = NULL; 2177 Eina_List *redo_nodes = NULL;
2134 format++; /* Skip the '-' */
2135 2178
2136 /* Generic pop, should just pop. */ 2179 /* Generic pop, should just pop. */
2137 if (((format[0] == ' ') && !format[1]) || 2180 if (((format[0] == ' ') && !format[1]) ||
@@ -2994,21 +3037,29 @@ _format_finalize(Evas_Object *obj, Evas_Object_Textblock_Format *fmt)
2994 * @def _IS_TAB(item) 3037 * @def _IS_TAB(item)
2995 */ 3038 */
2996#define _IS_TAB(item) \ 3039#define _IS_TAB(item) \
2997 (!strcmp(item, "\t") || !strcmp(item, "\\t")) 3040 (!strcmp(item, "tab") || !strcmp(item, "\t") || !strcmp(item, "\\t"))
2998/** 3041/**
2999 * @internal 3042 * @internal
3000 * Returns true if the item is a line spearator, false otherwise 3043 * Returns true if the item is a line spearator, false otherwise
3001 * @def _IS_LINE_SEPARATOR(item) 3044 * @def _IS_LINE_SEPARATOR(item)
3002 */ 3045 */
3003#define _IS_LINE_SEPARATOR(item) \ 3046#define _IS_LINE_SEPARATOR(item) \
3004 (!strcmp(item, "\n") || !strcmp(item, "\\n")) 3047 (!strcmp(item, "br") || !strcmp(item, "\n") || !strcmp(item, "\\n"))
3005/** 3048/**
3006 * @internal 3049 * @internal
3007 * Returns true if the item is a paragraph separator, false otherwise 3050 * Returns true if the item is a paragraph separator, false otherwise
3008 * @def _IS_PARAGRAPH_SEPARATOR(item) 3051 * @def _IS_PARAGRAPH_SEPARATOR(item)
3009 */ 3052 */
3053#define _IS_PARAGRAPH_SEPARATOR_SIMPLE(item) \
3054 (!strcmp(item, "ps"))
3055/**
3056 * @internal
3057 * Returns true if the item is a paragraph separator, false otherwise
3058 * takes legacy mode into account.
3059 * @def _IS_PARAGRAPH_SEPARATOR(item)
3060 */
3010#define _IS_PARAGRAPH_SEPARATOR(o, item) \ 3061#define _IS_PARAGRAPH_SEPARATOR(o, item) \
3011 (!strcmp(item, "ps") || \ 3062 (_IS_PARAGRAPH_SEPARATOR_SIMPLE(item) || \
3012 (o->legacy_newline && _IS_LINE_SEPARATOR(item))) /* Paragraph separator */ 3063 (o->legacy_newline && _IS_LINE_SEPARATOR(item))) /* Paragraph separator */
3013 3064
3014/** 3065/**
@@ -3041,7 +3092,7 @@ _layout_do_format(const Evas_Object *obj __UNUSED__, Ctxt *c,
3041 int handled = 0; 3092 int handled = 0;
3042 3093
3043 s = n->format; 3094 s = n->format;
3044 if (!strncmp(s, "+ item ", 7)) 3095 if (!strncmp(s, "item ", 5))
3045 { 3096 {
3046 // one of: 3097 // one of:
3047 // item size=20x10 href=name 3098 // item size=20x10 href=name
@@ -3133,16 +3184,14 @@ _layout_do_format(const Evas_Object *obj __UNUSED__, Ctxt *c,
3133 if (!handled) 3184 if (!handled)
3134 { 3185 {
3135 Eina_Bool push_fmt = EINA_FALSE; 3186 Eina_Bool push_fmt = EINA_FALSE;
3136 if (s[0] == '+') 3187 if (n->opener && !n->own_closer)
3137 { 3188 {
3138 fmt = _layout_format_push(c, fmt, n); 3189 fmt = _layout_format_push(c, fmt, n);
3139 s++;
3140 push_fmt = EINA_TRUE; 3190 push_fmt = EINA_TRUE;
3141 } 3191 }
3142 else if (s[0] == '-') 3192 else if (!n->opener)
3143 { 3193 {
3144 fmt = _layout_format_pop(c, n->orig_format); 3194 fmt = _layout_format_pop(c, n->orig_format);
3145 s++;
3146 } 3195 }
3147 while ((item = _format_parse(&s))) 3196 while ((item = _format_parse(&s)))
3148 { 3197 {
@@ -3166,7 +3215,7 @@ _layout_do_format(const Evas_Object *obj __UNUSED__, Ctxt *c,
3166 3215
3167 fi->parent.w = fi->parent.adv = 0; 3216 fi->parent.w = fi->parent.adv = 0;
3168 } 3217 }
3169 else if ((!strcmp(item, "\t")) || (!strcmp(item, "\\t"))) 3218 else if (_IS_TAB(item))
3170 { 3219 {
3171 Evas_Object_Textblock_Format_Item *fi; 3220 Evas_Object_Textblock_Format_Item *fi;
3172 3221
@@ -3215,28 +3264,33 @@ _layout_update_par(Ctxt *c)
3215/* -1 means no wrap */ 3264/* -1 means no wrap */
3216static int 3265static int
3217_layout_get_charwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt, 3266_layout_get_charwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3218 const Evas_Object_Textblock_Text_Item *ti, size_t line_start, 3267 const Evas_Object_Textblock_Item *it, size_t line_start,
3219 const char *breaks) 3268 const char *breaks)
3220{ 3269{
3221 int wrap; 3270 int wrap;
3222 size_t uwrap; 3271 size_t uwrap;
3223 size_t len = eina_ustrbuf_length_get(ti->parent.text_node->unicode); 3272 size_t len = eina_ustrbuf_length_get(it->text_node->unicode);
3224 /* Currently not being used, because it doesn't contain relevant 3273 /* Currently not being used, because it doesn't contain relevant
3225 * information */ 3274 * information */
3226 (void) breaks; 3275 (void) breaks;
3227 3276
3228 { 3277 {
3229 wrap = _layout_text_cutoff_get(c, fmt, ti); 3278 if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT)
3279 wrap = 0;
3280 else
3281 wrap = _layout_text_cutoff_get(c, fmt, _ITEM_TEXT(it));
3282
3230 if (wrap < 0) 3283 if (wrap < 0)
3231 return -1; 3284 return -1;
3232 uwrap = (size_t) wrap + ti->parent.text_pos; 3285 uwrap = (size_t) wrap + it->text_pos;
3233 } 3286 }
3234 3287
3235 3288
3236 if (uwrap == line_start) 3289 if ((uwrap == line_start) && (it->type == EVAS_TEXTBLOCK_ITEM_TEXT))
3237 { 3290 {
3238 uwrap = ti->parent.text_pos + 3291 uwrap = it->text_pos +
3239 (size_t) evas_common_text_props_cluster_next(&ti->text_props, wrap); 3292 (size_t) evas_common_text_props_cluster_next(
3293 &_ITEM_TEXT(it)->text_props, wrap);
3240 } 3294 }
3241 if ((uwrap <= line_start) || (uwrap > len)) 3295 if ((uwrap <= line_start) || (uwrap > len))
3242 return -1; 3296 return -1;
@@ -3259,16 +3313,16 @@ _layout_get_charwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3259#endif 3313#endif
3260static int 3314static int
3261_layout_get_word_mixwrap_common(Ctxt *c, Evas_Object_Textblock_Format *fmt, 3315_layout_get_word_mixwrap_common(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3262 const Evas_Object_Textblock_Text_Item *ti, Eina_Bool mixed_wrap, 3316 const Evas_Object_Textblock_Item *it, Eina_Bool mixed_wrap,
3263 size_t line_start, const char *breaks) 3317 size_t line_start, const char *breaks)
3264{ 3318{
3265 Eina_Bool wrap_after = EINA_FALSE; 3319 Eina_Bool wrap_after = EINA_FALSE;
3266 size_t wrap; 3320 size_t wrap;
3267 size_t orig_wrap; 3321 size_t orig_wrap;
3268 const Eina_Unicode *str = eina_ustrbuf_string_get( 3322 const Eina_Unicode *str = eina_ustrbuf_string_get(
3269 ti->parent.text_node->unicode); 3323 it->text_node->unicode);
3270 int item_start = ti->parent.text_pos; 3324 int item_start = it->text_pos;
3271 size_t len = eina_ustrbuf_length_get(ti->parent.text_node->unicode); 3325 size_t len = eina_ustrbuf_length_get(it->text_node->unicode);
3272#ifndef HAVE_LINEBREAK 3326#ifndef HAVE_LINEBREAK
3273 /* Not used without liblinebreak ATM. */ 3327 /* Not used without liblinebreak ATM. */
3274 (void) breaks; 3328 (void) breaks;
@@ -3276,7 +3330,10 @@ _layout_get_word_mixwrap_common(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3276 3330
3277 { 3331 {
3278 int swrap = -1; 3332 int swrap = -1;
3279 swrap = _layout_text_cutoff_get(c, fmt, ti); 3333 if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT)
3334 swrap = 0;
3335 else
3336 swrap = _layout_text_cutoff_get(c, fmt, _ITEM_TEXT(it));
3280 /* Avoiding too small textblocks to even contain one char. 3337 /* Avoiding too small textblocks to even contain one char.
3281 * FIXME: This can cause breaking inside ligatures. */ 3338 * FIXME: This can cause breaking inside ligatures. */
3282 3339
@@ -3331,7 +3388,7 @@ _layout_get_word_mixwrap_common(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3331 { 3388 {
3332 if (mixed_wrap) 3389 if (mixed_wrap)
3333 { 3390 {
3334 return _layout_get_charwrap(c, fmt, ti, 3391 return _layout_get_charwrap(c, fmt, it,
3335 line_start, breaks); 3392 line_start, breaks);
3336 } 3393 }
3337 else 3394 else
@@ -3362,20 +3419,20 @@ _layout_get_word_mixwrap_common(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3362/* -1 means no wrap */ 3419/* -1 means no wrap */
3363static int 3420static int
3364_layout_get_wordwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt, 3421_layout_get_wordwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3365 const Evas_Object_Textblock_Text_Item *ti, size_t line_start, 3422 const Evas_Object_Textblock_Item *it, size_t line_start,
3366 const char *breaks) 3423 const char *breaks)
3367{ 3424{
3368 return _layout_get_word_mixwrap_common(c, fmt, ti, EINA_FALSE, line_start, 3425 return _layout_get_word_mixwrap_common(c, fmt, it, EINA_FALSE, line_start,
3369 breaks); 3426 breaks);
3370} 3427}
3371 3428
3372/* -1 means no wrap */ 3429/* -1 means no wrap */
3373static int 3430static int
3374_layout_get_mixedwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt, 3431_layout_get_mixedwrap(Ctxt *c, Evas_Object_Textblock_Format *fmt,
3375 const Evas_Object_Textblock_Text_Item *ti, size_t line_start, 3432 const Evas_Object_Textblock_Item *it, size_t line_start,
3376 const char *breaks) 3433 const char *breaks)
3377{ 3434{
3378 return _layout_get_word_mixwrap_common(c, fmt, ti, EINA_TRUE, line_start, 3435 return _layout_get_word_mixwrap_common(c, fmt, it, EINA_TRUE, line_start,
3379 breaks); 3436 breaks);
3380} 3437}
3381 3438
@@ -3503,7 +3560,7 @@ _layout_paragraph_reorder_lines(Evas_Object_Textblock_Paragraph *par)
3503 3560
3504static void 3561static void
3505_layout_paragraph_render(Evas_Object_Textblock *o, 3562_layout_paragraph_render(Evas_Object_Textblock *o,
3506 Evas_Object_Textblock_Paragraph *par) 3563 Evas_Object_Textblock_Paragraph *par)
3507{ 3564{
3508 if (par->rendered) 3565 if (par->rendered)
3509 return; 3566 return;
@@ -3521,6 +3578,8 @@ _layout_paragraph_render(Evas_Object_Textblock *o,
3521 par->bidi_props = NULL; 3578 par->bidi_props = NULL;
3522 } 3579 }
3523 } 3580 }
3581#else
3582 (void) o;
3524#endif 3583#endif
3525} 3584}
3526 3585
@@ -3656,120 +3715,127 @@ _layout_par(Ctxt *c)
3656 else if ((it->format->wrap_word || it->format->wrap_char || 3715 else if ((it->format->wrap_word || it->format->wrap_char ||
3657 it->format->wrap_mixed) && it->text_node) 3716 it->format->wrap_mixed) && it->text_node)
3658 { 3717 {
3659 if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT) 3718 size_t line_start;
3719 size_t it_len;
3720
3721 it_len = (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT) ?
3722 1 : _ITEM_TEXT(it)->text_props.text_len;
3723
3724
3725#ifdef HAVE_LINEBREAK
3726 /* If we haven't calculated the linebreaks yet,
3727 * do */
3728 if (!line_breaks)
3660 { 3729 {
3661 /* Don't wrap if it's the only item */ 3730 /* Only relevant in those cases */
3662 if (c->ln->items) 3731 if (it->format->wrap_word || it->format->wrap_mixed)
3663 { 3732 {
3664 /*FIXME: I should handle format correctly, 3733 const char *lang;
3665 i.e verify we are allowed to break here */ 3734 lang = (it->format->font.fdesc) ?
3666 _layout_line_advance(c, it->format); 3735 it->format->font.fdesc->lang : "";
3667 wrap = -1; 3736 size_t len =
3737 eina_ustrbuf_length_get(
3738 it->text_node->unicode);
3739 line_breaks = malloc(len);
3740 set_linebreaks_utf32((const utf32_t *)
3741 eina_ustrbuf_string_get(
3742 it->text_node->unicode),
3743 len, lang, line_breaks);
3668 } 3744 }
3669 } 3745 }
3746#endif
3747 if (c->ln->items)
3748 line_start = c->ln->items->text_pos;
3670 else 3749 else
3671 { 3750 line_start = it->text_pos;
3672 Evas_Object_Textblock_Text_Item *ti = _ITEM_TEXT(it);
3673 size_t line_start;
3674 3751
3675#ifdef HAVE_LINEBREAK 3752 adv_line = 1;
3676 /* If we haven't calculated the linebreaks yet, 3753 /* If we don't already have a wrap point from before */
3677 * do */ 3754 if (wrap < 0)
3678 if (!line_breaks) 3755 {
3679 { 3756 if (it->format->wrap_word)
3680 /* Only relevant in those cases */ 3757 wrap = _layout_get_wordwrap(c, it->format, it,
3681 if (it->format->wrap_word || it->format->wrap_mixed) 3758 line_start, line_breaks);
3682 { 3759 else if (it->format->wrap_char)
3683 const char *lang; 3760 wrap = _layout_get_charwrap(c, it->format, it,
3684 lang = (it->format->font.fdesc) ? 3761 line_start, line_breaks);
3685 it->format->font.fdesc->lang : ""; 3762 else if (it->format->wrap_mixed)
3686 size_t len = 3763 wrap = _layout_get_mixedwrap(c, it->format, it,
3687 eina_ustrbuf_length_get( 3764 line_start, line_breaks);
3688 it->text_node->unicode);
3689 line_breaks = malloc(len);
3690 set_linebreaks_utf32((const utf32_t *)
3691 eina_ustrbuf_string_get(
3692 it->text_node->unicode),
3693 len, lang, line_breaks);
3694 }
3695 }
3696#endif
3697 if (c->ln->items)
3698 line_start = c->ln->items->text_pos;
3699 else 3765 else
3700 line_start = ti->parent.text_pos; 3766 wrap = -1;
3701 3767 }
3702 adv_line = 1;
3703 /* If we don't already have a wrap point from before */
3704 if (wrap < 0)
3705 {
3706 if (it->format->wrap_word)
3707 wrap = _layout_get_wordwrap(c, it->format, ti,
3708 line_start, line_breaks);
3709 else if (it->format->wrap_char)
3710 wrap = _layout_get_charwrap(c, it->format, ti,
3711 line_start, line_breaks);
3712 else if (it->format->wrap_mixed)
3713 wrap = _layout_get_mixedwrap(c, it->format, ti,
3714 line_start, line_breaks);
3715 else
3716 wrap = -1;
3717 }
3718 3768
3719 /* If it's before the item, rollback and apply. 3769 /* If it's before the item, rollback and apply.
3720 if it's in the item, cut. 3770 if it's in the item, cut.
3721 If it's after the item, delay the cut */ 3771 If it's after the item, delay the cut */
3722 if (wrap > 0) 3772 if (wrap > 0)
3773 {
3774 size_t uwrap = (size_t) wrap;
3775 if (uwrap < it->text_pos)
3723 { 3776 {
3724 size_t uwrap = (size_t) wrap; 3777 /* Rollback latest additions, and cut that
3725 if (uwrap < ti->parent.text_pos) 3778 item */
3779 i = eina_list_prev(i);
3780 it = eina_list_data_get(i);
3781 while (uwrap < it->text_pos)
3726 { 3782 {
3727 /* Rollback latest additions, and cut that
3728 item */
3729 i = eina_list_prev(i);
3730 it = eina_list_data_get(i);
3731 while (uwrap < it->text_pos)
3732 {
3733 c->ln->items = _ITEM(
3734 eina_inlist_remove(
3735 EINA_INLIST_GET(c->ln->items),
3736 EINA_INLIST_GET(it)));
3737 i = eina_list_prev(i);
3738 it = eina_list_data_get(i);
3739 }
3740 c->x = it->x;
3741 c->ln->items = _ITEM( 3783 c->ln->items = _ITEM(
3742 eina_inlist_remove( 3784 eina_inlist_remove(
3743 EINA_INLIST_GET(c->ln->items), 3785 EINA_INLIST_GET(c->ln->items),
3744 EINA_INLIST_GET(it))); 3786 EINA_INLIST_GET(it)));
3745 continue; 3787 i = eina_list_prev(i);
3788 it = eina_list_data_get(i);
3746 } 3789 }
3747 /* If it points to the end, it means the previous 3790 c->x = it->x;
3748 * char is a whitespace we should remove, so this 3791 c->ln->items = _ITEM(
3749 * is a wanted cutting point. */ 3792 eina_inlist_remove(
3750 else if (uwrap > ti->parent.text_pos + 3793 EINA_INLIST_GET(c->ln->items),
3751 ti->text_props.text_len) 3794 EINA_INLIST_GET(it)));
3752 wrap = -1; /* Delay the cut in a smart way 3795 continue;
3753 i.e use the item_pos as the line_start, because
3754 there's already no cut before*/
3755 else
3756 wrap -= ti->parent.text_pos; /* Cut here */
3757 } 3796 }
3758 3797 /* If it points to the end, it means the previous
3759 if (wrap > 0) 3798 * char is a whitespace we should remove, so this
3799 * is a wanted cutting point. */
3800 else if (uwrap > it->text_pos + it_len)
3760 { 3801 {
3761 _layout_item_text_split_strip_white(c, ti, i, wrap); 3802 /* FIXME: Should redo the ellipsis handling.
3762 } 3803 * If we can do ellipsis, just cut here. */
3763 else if (wrap == 0) 3804 if (it->format->ellipsis == 1.0)
3805 {
3806 _layout_handle_ellipsis(c, it, i);
3807 ret = 1;
3808 goto end;
3809 }
3810 else
3811 {
3812 /* Delay the cut in a smart way i.e use the
3813 item_pos as the line_start, because
3814 there's already no cut before*/
3815 wrap = -1;
3816 }
3817 }
3818 else
3819 wrap -= it->text_pos; /* Cut here */
3820 }
3821
3822 if (wrap > 0)
3823 {
3824 if (it->type == EVAS_TEXTBLOCK_ITEM_TEXT)
3764 { 3825 {
3765 /* Should wrap before the item */ 3826 _layout_item_text_split_strip_white(c,
3766 adv_line = 0; 3827 _ITEM_TEXT(it), i, wrap);
3767 redo_item = 1;
3768 _layout_line_advance(c, it->format);
3769 } 3828 }
3770 /* Reset wrap */
3771 wrap = -1;
3772 } 3829 }
3830 else if (wrap == 0)
3831 {
3832 /* Should wrap before the item */
3833 adv_line = 0;
3834 redo_item = 1;
3835 _layout_line_advance(c, it->format);
3836 }
3837 /* Reset wrap */
3838 wrap = -1;
3773 } 3839 }
3774 } 3840 }
3775 3841
@@ -3844,18 +3910,16 @@ _format_changes_invalidate_text_nodes(Ctxt *c)
3844 const char *fstr = fnode->orig_format; 3910 const char *fstr = fnode->orig_format;
3845 /* balance < 0 means we gave up and everything should be 3911 /* balance < 0 means we gave up and everything should be
3846 * invalidated */ 3912 * invalidated */
3847 if (*fstr == '+') 3913 if (fnode->opener && !fnode->own_closer)
3848 { 3914 {
3849 balance++; 3915 balance++;
3850 if (!fstack) 3916 if (!fstack)
3851 start_n = fnode->text_node; 3917 start_n = fnode->text_node;
3852 fstack = eina_list_prepend(fstack, fnode); 3918 fstack = eina_list_prepend(fstack, fnode);
3853 } 3919 }
3854 else if (*fstr == '-') 3920 else if (!fnode->opener)
3855 { 3921 {
3856 size_t fstr_len; 3922 size_t fstr_len;
3857 /* Skip the '-' */
3858 fstr++;
3859 fstr_len = strlen(fstr); 3923 fstr_len = strlen(fstr);
3860 /* Generic popper, just pop */ 3924 /* Generic popper, just pop */
3861 if (((fstr[0] == ' ') && !fstr[1]) || !fstr[0]) 3925 if (((fstr[0] == ' ') && !fstr[1]) || !fstr[0])
@@ -4429,12 +4493,12 @@ evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text)
4429 { 4493 {
4430 if (!key_start) 4494 if (!key_start)
4431 { 4495 {
4432 if (!isspace(*p)) 4496 if (!isspace((unsigned char)(*p)))
4433 key_start = p; 4497 key_start = p;
4434 } 4498 }
4435 else if (!key_stop) 4499 else if (!key_stop)
4436 { 4500 {
4437 if ((*p == '=') || (isspace(*p))) 4501 if ((*p == '=') || (isspace((unsigned char)(*p))))
4438 key_stop = p; 4502 key_stop = p;
4439 } 4503 }
4440 else if (!val_start) 4504 else if (!val_start)
@@ -4479,10 +4543,10 @@ evas_textblock_style_set(Evas_Textblock_Style *ts, const char *text)
4479 tag = calloc(1, sizeof(Evas_Object_Style_Tag)); 4543 tag = calloc(1, sizeof(Evas_Object_Style_Tag));
4480 if (tag) 4544 if (tag)
4481 { 4545 {
4482 tag->tag = tags; 4546 tag->tag.tag = tags;
4483 tag->replace = replaces; 4547 tag->tag.replace = replaces;
4484 tag->tag_len = tag_len; 4548 tag->tag.tag_len = tag_len;
4485 tag->replace_len = replace_len; 4549 tag->tag.replace_len = replace_len;
4486 ts->tags = (Evas_Object_Style_Tag *)eina_inlist_append(EINA_INLIST_GET(ts->tags), EINA_INLIST_GET(tag)); 4550 ts->tags = (Evas_Object_Style_Tag *)eina_inlist_append(EINA_INLIST_GET(ts->tags), EINA_INLIST_GET(tag));
4487 } 4551 }
4488 else 4552 else
@@ -4689,7 +4753,11 @@ _escaped_char_match(const char *s, int *adv)
4689 while ((*mc) && (*sc)) 4753 while ((*mc) && (*sc))
4690 { 4754 {
4691 if ((unsigned char)*sc < (unsigned char)*mc) return NULL; 4755 if ((unsigned char)*sc < (unsigned char)*mc) return NULL;
4692 if (*sc != *mc) match = 0; 4756 if (*sc != *mc)
4757 {
4758 match = 0;
4759 break;
4760 }
4693 mc++; 4761 mc++;
4694 sc++; 4762 sc++;
4695 } 4763 }
@@ -4723,7 +4791,7 @@ _escaped_char_get(const char *s, const char *s_end)
4723 int base = 10; 4791 int base = 10;
4724 s += 2; /* Skip "&#" */ 4792 s += 2; /* Skip "&#" */
4725 4793
4726 if (tolower(*s) == 'x') 4794 if (tolower((unsigned char)(*s)) == 'x')
4727 { 4795 {
4728 s++; 4796 s++;
4729 base = 16; 4797 base = 16;
@@ -4876,6 +4944,7 @@ evas_object_textblock_text_markup_prepend(Evas_Textblock_Cursor *cur, const char
4876 * NULL is reached. */ 4944 * NULL is reached. */
4877 for (;;) 4945 for (;;)
4878 { 4946 {
4947 size_t text_len;
4879 /* If we got to the end of string or just finished/started tag 4948 /* If we got to the end of string or just finished/started tag
4880 * or escape sequence handling. */ 4949 * or escape sequence handling. */
4881 if ((*p == 0) || 4950 if ((*p == 0) ||
@@ -4953,14 +5022,22 @@ evas_object_textblock_text_markup_prepend(Evas_Textblock_Cursor *cur, const char
4953 } 5022 }
4954 } 5023 }
4955 /* Unicode object replcament char */ 5024 /* Unicode object replcament char */
4956 else if (!strncmp("\xEF\xBF\xBC", p, 3)) 5025 else if (!strncmp(_REPLACEMENT_CHAR_UTF8, p,
5026 text_len = strlen(_REPLACEMENT_CHAR_UTF8)) ||
5027 !strncmp(_NEWLINE_UTF8, p,
5028 text_len = strlen(_NEWLINE_UTF8)) ||
5029 !strncmp(_TAB_UTF8, p,
5030 text_len = strlen(_TAB_UTF8)) ||
5031 !strncmp(_PARAGRAPH_SEPARATOR_UTF8, p,
5032 text_len = strlen(_PARAGRAPH_SEPARATOR_UTF8)))
4957 { 5033 {
4958 /*FIXME: currently just remove them, maybe do something 5034 /*FIXME: currently just remove them, maybe do something
4959 * fancier in the future, atm it breaks if this char 5035 * fancier in the future, atm it breaks if this char
4960 * is inside <> */ 5036 * is inside <> */
4961 _prepend_text_run(cur, s, p); 5037 _prepend_text_run(cur, s, p);
4962 p += 2; /* it's also advanced later in this loop need +3 5038 /* it's also advanced later in this loop need +text_len
4963 * in total*/ 5039 in total*/
5040 p += text_len - 1;
4964 s = p + 1; /* One after the end of the replacement char */ 5041 s = p + 1; /* One after the end of the replacement char */
4965 } 5042 }
4966 p++; 5043 p++;
@@ -4979,19 +5056,19 @@ evas_object_textblock_text_markup_prepend(Evas_Textblock_Cursor *cur, const char
4979 * @param fnode the format node to process. 5056 * @param fnode the format node to process.
4980 */ 5057 */
4981static void 5058static void
4982_markup_get_format_append(Evas_Object_Textblock *o __UNUSED__, Eina_Strbuf *txt, Evas_Object_Textblock_Node_Format *fnode) 5059_markup_get_format_append(Eina_Strbuf *txt, Evas_Object_Textblock_Node_Format *fnode)
4983{ 5060{
4984 eina_strbuf_append_char(txt, '<'); 5061 eina_strbuf_append_char(txt, '<');
4985 { 5062 {
4986 const char *s; 5063 const char *s;
4987 int pop = 0;
4988 5064
4989 // FIXME: need to escape 5065 // FIXME: need to escape
4990 s = fnode->orig_format; 5066 s = fnode->orig_format;
4991 if (*s == '-') pop = 1; 5067 if (!fnode->opener && !fnode->own_closer)
4992 while ((*s == ' ') || (*s == '+') || (*s == '-')) s++; 5068 eina_strbuf_append_char(txt, '/');
4993 if (pop) eina_strbuf_append_char(txt, '/');
4994 eina_strbuf_append(txt, s); 5069 eina_strbuf_append(txt, s);
5070 if (fnode->own_closer)
5071 eina_strbuf_append_char(txt, '/');
4995 } 5072 }
4996 eina_strbuf_append_char(txt, '>'); 5073 eina_strbuf_append_char(txt, '>');
4997} 5074}
@@ -5061,7 +5138,7 @@ evas_object_textblock_text_markup_get(const Evas_Object *obj)
5061 tmp_ch = text[off]; 5138 tmp_ch = text[off];
5062 text[off] = 0; /* Null terminate the part of the string */ 5139 text[off] = 0; /* Null terminate the part of the string */
5063 _markup_get_text_append(txt, text); 5140 _markup_get_text_append(txt, text);
5064 _markup_get_format_append(o, txt, fnode); 5141 _markup_get_format_append(txt, fnode);
5065 text[off] = tmp_ch; /* Restore the char */ 5142 text[off] = tmp_ch; /* Restore the char */
5066 text += off; 5143 text += off;
5067 if (fnode->visible) 5144 if (fnode->visible)
@@ -5086,6 +5163,190 @@ evas_object_textblock_text_markup_get(const Evas_Object *obj)
5086 return o->markup_text; 5163 return o->markup_text;
5087} 5164}
5088 5165
5166EAPI char *
5167evas_textblock_text_markup_to_utf8(const Evas_Object *obj, const char *text)
5168{
5169 /* FIXME: Redundant and awful, should be merged with markup_prepend */
5170 Eina_Strbuf *sbuf;
5171 char *s, *p, *ret;
5172 char *tag_start, *tag_end, *esc_start, *esc_end;
5173
5174 if (!text) return NULL;
5175
5176
5177 tag_start = tag_end = esc_start = esc_end = NULL;
5178 sbuf = eina_strbuf_new();
5179 p = (char *)text;
5180 s = p;
5181 /* This loop goes through all of the mark up text until it finds format
5182 * tags, escape sequences or the terminating NULL. When it finds either
5183 * of those, it appends the text found up until that point to the textblock
5184 * proccesses whatever found. It repeats itself until the termainating
5185 * NULL is reached. */
5186 for (;;)
5187 {
5188 /* If we got to the end of string or just finished/started tag
5189 * or escape sequence handling. */
5190 if ((*p == 0) ||
5191 (tag_end) || (esc_end) ||
5192 (tag_start) || (esc_start))
5193 {
5194 if (tag_end)
5195 {
5196 /* If we reached to a tag ending, analyze the tag */
5197 char *ttag;
5198 size_t ttag_len;
5199
5200 tag_start++; /* Skip the < */
5201 tag_end--; /* Skip the > */
5202 if ((tag_end > tag_start) && (*(tag_end - 1) == '/'))
5203 {
5204 tag_end --; /* Skip the terminating '/' */
5205 while (*(tag_end - 1) == ' ')
5206 tag_end--; /* skip trailing ' ' */
5207 }
5208
5209 ttag_len = tag_end - tag_start;
5210
5211 ttag = malloc(ttag_len + 1);
5212 if (ttag)
5213 {
5214 const char *match = NULL;
5215 size_t replace_len;
5216 memcpy(ttag, tag_start, ttag_len);
5217 ttag[ttag_len] = 0;
5218
5219
5220 if (obj)
5221 {
5222 match = _style_match_tag(
5223 evas_object_textblock_style_get(obj),
5224 ttag, ttag_len, &replace_len);
5225 }
5226
5227 if (!match) match = ttag;
5228
5229 if (_IS_PARAGRAPH_SEPARATOR_SIMPLE(match))
5230 eina_strbuf_append(sbuf, _PARAGRAPH_SEPARATOR_UTF8);
5231 else if (_IS_LINE_SEPARATOR(match))
5232 eina_strbuf_append(sbuf, _NEWLINE_UTF8);
5233 else if (_IS_TAB(match))
5234 eina_strbuf_append(sbuf, _TAB_UTF8);
5235 else if (!strncmp(match, "item", 4))
5236 eina_strbuf_append(sbuf, _REPLACEMENT_CHAR_UTF8);
5237
5238 free(ttag);
5239 }
5240 tag_start = tag_end = NULL;
5241 }
5242 else if (esc_end)
5243 {
5244 const char *escape;
5245
5246 escape = _escaped_char_get(esc_start, esc_end + 1);
5247 eina_strbuf_append(sbuf, escape);
5248 esc_start = esc_end = NULL;
5249 }
5250 else if (*p == 0)
5251 {
5252 eina_strbuf_append_length(sbuf, s, p - s);
5253 s = NULL;
5254 }
5255 if (*p == 0)
5256 break;
5257 }
5258 if (*p == '<')
5259 {
5260 if (!esc_start)
5261 {
5262 /* Append the text prior to this to the textblock and
5263 * mark the start of the tag */
5264 tag_start = p;
5265 tag_end = NULL;
5266 eina_strbuf_append_length(sbuf, s, p - s);
5267 s = NULL;
5268 }
5269 }
5270 else if (*p == '>')
5271 {
5272 if (tag_start)
5273 {
5274 tag_end = p + 1;
5275 s = p + 1;
5276 }
5277 }
5278 else if (*p == '&')
5279 {
5280 if (!tag_start)
5281 {
5282 /* Append the text prior to this to the textblock and mark
5283 * the start of the escape sequence */
5284 esc_start = p;
5285 esc_end = NULL;
5286 eina_strbuf_append_length(sbuf, s, p - s);
5287 s = NULL;
5288 }
5289 }
5290 else if (*p == ';')
5291 {
5292 if (esc_start)
5293 {
5294 esc_end = p;
5295 s = p + 1;
5296 }
5297 }
5298 p++;
5299 }
5300
5301 ret = eina_strbuf_string_steal(sbuf);
5302 eina_strbuf_free(sbuf);
5303 return ret;
5304}
5305
5306EAPI char *
5307evas_textblock_text_utf8_to_markup(const Evas_Object *obj, const char *text)
5308{
5309 Eina_Strbuf *sbuf;
5310 char *str = NULL;
5311 int ch, pos = 0, pos2 = 0;
5312
5313 (void) obj;
5314
5315 if (!text) return NULL;
5316
5317 sbuf = eina_strbuf_new();
5318
5319 for (;;)
5320 {
5321 pos = pos2;
5322 pos2 = evas_string_char_next_get(text, pos2, &ch);
5323 if ((ch <= 0) || (pos2 <= 0)) break;
5324
5325 if (ch == _NEWLINE)
5326 eina_strbuf_append(sbuf, "<br/>");
5327 else if (ch == _TAB)
5328 eina_strbuf_append(sbuf, "<tab/>");
5329 else if (ch == '<')
5330 eina_strbuf_append(sbuf, "&lt;");
5331 else if (ch == '>')
5332 eina_strbuf_append(sbuf, "&gt;");
5333 else if (ch == '&')
5334 eina_strbuf_append(sbuf, "&amp;");
5335 else if (ch == _PARAGRAPH_SEPARATOR)
5336 eina_strbuf_append(sbuf, "<ps/>");
5337 else if (ch == _REPLACEMENT_CHAR)
5338 eina_strbuf_append(sbuf, "&#xfffc;");
5339 else
5340 {
5341 eina_strbuf_append_length(sbuf, text + pos, pos2 - pos);
5342 }
5343 }
5344 str = eina_strbuf_string_steal(sbuf);
5345 eina_strbuf_free(sbuf);
5346 return str;
5347
5348}
5349
5089/* cursors */ 5350/* cursors */
5090 5351
5091/** 5352/**
@@ -5453,15 +5714,13 @@ evas_textblock_node_format_remove_pair(Evas_Object *obj,
5453 { 5714 {
5454 const char *fstr = fmt->orig_format; 5715 const char *fstr = fmt->orig_format;
5455 5716
5456 if (fstr && (*fstr == '+')) 5717 if (fmt->opener && !fmt->own_closer)
5457 { 5718 {
5458 fstack = eina_list_prepend(fstack, fmt); 5719 fstack = eina_list_prepend(fstack, fmt);
5459 } 5720 }
5460 else if (fstr && (*fstr == '-')) 5721 else if (fstr && !fmt->opener)
5461 { 5722 {
5462 size_t fstr_len; 5723 size_t fstr_len;
5463 /* Skip the '-' */
5464 fstr++;
5465 fstr_len = strlen(fstr); 5724 fstr_len = strlen(fstr);
5466 /* Generic popper, just pop */ 5725 /* Generic popper, just pop */
5467 if (((fstr[0] == ' ') && !fstr[1]) || !fstr[0]) 5726 if (((fstr[0] == ' ') && !fstr[1]) || !fstr[0])
@@ -5708,6 +5967,111 @@ evas_textblock_cursor_format_prev(Evas_Textblock_Cursor *cur)
5708 return EINA_FALSE; 5967 return EINA_FALSE;
5709} 5968}
5710 5969
5970#ifdef HAVE_LINEBREAK
5971
5972/* BREAK_AFTER: true if we can break after the current char.
5973 * Both macros assume str[i] is not the terminating nul */
5974#define BREAK_AFTER(i) \
5975 (breaks[i] == WORDBREAK_BREAK)
5976
5977#else
5978
5979#define BREAK_AFTER(i) \
5980 ((!str[i + 1]) || \
5981 (_is_white(str[i]) && !_is_white(str[i + 1])) || \
5982 (!_is_white(str[i]) && _is_white(str[i + 1])))
5983
5984#endif
5985
5986EAPI Eina_Bool
5987evas_textblock_cursor_word_start(Evas_Textblock_Cursor *cur)
5988{
5989 const Eina_Unicode *text;
5990 size_t i;
5991#ifdef HAVE_LINEBREAK
5992 char *breaks;
5993#endif
5994
5995 if (!cur) return EINA_FALSE;
5996 if (!cur->node) return EINA_FALSE;
5997
5998 text = eina_ustrbuf_string_get(cur->node->unicode);
5999
6000#ifdef HAVE_LINEBREAK
6001 {
6002 const char *lang = ""; /* FIXME: get lang */
6003 size_t len = eina_ustrbuf_length_get(cur->node->unicode);
6004 breaks = malloc(len);
6005 set_wordbreaks_utf32((const utf32_t *) text, len, lang, breaks);
6006 }
6007#endif
6008
6009 i = cur->pos;
6010
6011 /* Skip the first one. This ensures we don't point to the nul, and also
6012 * we just don't care about it anyway. */
6013 if (i > 0) i--;
6014
6015 for ( ; i > 0 ; i--)
6016 {
6017 if (BREAK_AFTER(i))
6018 {
6019 /* Advance to the current char */
6020 i++;
6021 break;
6022 }
6023 }
6024
6025 cur->pos = i;
6026
6027#ifdef HAVE_LINEBREAK
6028 free(breaks);
6029#endif
6030 return EINA_TRUE;
6031}
6032
6033EAPI Eina_Bool
6034evas_textblock_cursor_word_end(Evas_Textblock_Cursor *cur)
6035{
6036 const Eina_Unicode *text;
6037 size_t i;
6038#ifdef HAVE_LINEBREAK
6039 char *breaks;
6040#endif
6041
6042 if (!cur) return EINA_FALSE;
6043 if (!cur->node) return EINA_FALSE;
6044
6045 text = eina_ustrbuf_string_get(cur->node->unicode);
6046
6047#ifdef HAVE_LINEBREAK
6048 {
6049 const char *lang = ""; /* FIXME: get lang */
6050 size_t len = eina_ustrbuf_length_get(cur->node->unicode);
6051 breaks = malloc(len);
6052 set_wordbreaks_utf32((const utf32_t *) text, len, lang, breaks);
6053 }
6054#endif
6055
6056 i = cur->pos;
6057
6058 for ( ; text[i] ; i++)
6059 {
6060 if (BREAK_AFTER(i))
6061 {
6062 /* This is the one to break after. */
6063 break;
6064 }
6065 }
6066
6067 cur->pos = i;
6068
6069#ifdef HAVE_LINEBREAK
6070 free(breaks);
6071#endif
6072 return EINA_TRUE;;
6073}
6074
5711EAPI Eina_Bool 6075EAPI Eina_Bool
5712evas_textblock_cursor_char_next(Evas_Textblock_Cursor *cur) 6076evas_textblock_cursor_char_next(Evas_Textblock_Cursor *cur)
5713{ 6077{
@@ -5887,10 +6251,9 @@ _evas_textblock_format_is_visible(Evas_Object_Textblock_Node_Format *fnode,
5887 fnode->anchor = ANCHOR_NONE; 6251 fnode->anchor = ANCHOR_NONE;
5888 if (!s) return; 6252 if (!s) return;
5889 6253
5890 if (s[0] == '+' || s[0] == '-') 6254 if (!fnode->own_closer)
5891 { 6255 {
5892 is_opener = (s[0] == '+'); 6256 is_opener = fnode->opener;
5893 s++;
5894 fnode->format_change = EINA_TRUE; 6257 fnode->format_change = EINA_TRUE;
5895 } 6258 }
5896 6259
@@ -5902,6 +6265,8 @@ _evas_textblock_format_is_visible(Evas_Object_Textblock_Node_Format *fnode,
5902 * closing */ 6265 * closing */
5903 if ((!strncmp(item, "\n", itlen) || !strncmp(item, "\\n", itlen)) || 6266 if ((!strncmp(item, "\n", itlen) || !strncmp(item, "\\n", itlen)) ||
5904 (!strncmp(item, "\t", itlen) || !strncmp(item, "\\t", itlen)) || 6267 (!strncmp(item, "\t", itlen) || !strncmp(item, "\\t", itlen)) ||
6268 (!strncmp(item, "br", itlen) && (itlen >= 2)) ||
6269 (!strncmp(item, "tab", itlen) && (itlen >= 3)) ||
5905 (!strncmp(item, "ps", itlen) && (itlen >= 2)) || 6270 (!strncmp(item, "ps", itlen) && (itlen >= 2)) ||
5906 (!strncmp(item, "item", itlen) && (itlen >= 4) && is_opener)) 6271 (!strncmp(item, "item", itlen) && (itlen >= 4) && is_opener))
5907 { 6272 {
@@ -5986,19 +6351,17 @@ _evas_textblock_node_format_remove_matching(Evas_Object_Textblock *o,
5986 } 6351 }
5987 6352
5988 6353
5989 if (fstr && (*fstr == '+')) 6354 if (fmt->opener && !fmt->own_closer)
5990 { 6355 {
5991 formats = eina_list_prepend(formats, fmt); 6356 formats = eina_list_prepend(formats, fmt);
5992 } 6357 }
5993 else if (fstr && (*fstr == '-')) 6358 else if (fstr && !fmt->opener)
5994 { 6359 {
5995 Evas_Object_Textblock_Node_Format *fnode; 6360 Evas_Object_Textblock_Node_Format *fnode;
5996 size_t fstr_len; 6361 size_t fstr_len;
5997 /* Skip the '-' */
5998 fstr++;
5999 fstr_len = strlen(fstr); 6362 fstr_len = strlen(fstr);
6000 /* Generic popper, just pop */ 6363 /* Generic popper, just pop (if there's anything to pop). */
6001 if (((fstr[0] == ' ') && !fstr[1]) || !fstr[0]) 6364 if (formats && (((fstr[0] == ' ') && !fstr[1]) || !fstr[0]))
6002 { 6365 {
6003 fnode = eina_list_data_get(formats); 6366 fnode = eina_list_data_get(formats);
6004 formats = eina_list_remove_list(formats, formats); 6367 formats = eina_list_remove_list(formats, formats);
@@ -6855,6 +7218,7 @@ _evas_textblock_node_format_new(Evas_Object_Textblock *o, const char *_format)
6855{ 7218{
6856 Evas_Object_Textblock_Node_Format *n; 7219 Evas_Object_Textblock_Node_Format *n;
6857 const char *format = _format; 7220 const char *format = _format;
7221 const char *pre_stripped_format = NULL;
6858 7222
6859 n = calloc(1, sizeof(Evas_Object_Textblock_Node_Format)); 7223 n = calloc(1, sizeof(Evas_Object_Textblock_Node_Format));
6860 /* Create orig_format and format */ 7224 /* Create orig_format and format */
@@ -6866,62 +7230,80 @@ _evas_textblock_node_format_new(Evas_Object_Textblock *o, const char *_format)
6866 7230
6867 format++; /* Advance after '<' */ 7231 format++; /* Advance after '<' */
6868 format_len = strlen(format); 7232 format_len = strlen(format);
6869 if (format[format_len - 1] == '>') 7233 if ((format_len > 0) && format[format_len - 1] == '>')
6870 format_len--; /* We don't care about '>' */ 7234 {
7235 format_len--; /* We don't care about '>' */
7236 /* Check if it closes itself. Skip the </> case. */
7237 if ((format_len > 1) && format[format_len - 1] == '/')
7238 {
7239 format_len--; /* We don't care about '/' */
7240 n->own_closer = EINA_TRUE;
7241 }
7242 }
6871 7243
6872 match = _style_match_tag(o->style, format, format_len, &replace_len); 7244 match = _style_match_tag(o->style, format, format_len, &replace_len);
6873 if (match) 7245 if (match)
6874 { 7246 {
6875 if ((match[0] == '+') || (match[0] == '-')) 7247 if (match[0] != '-')
6876 {
6877 char *norm_format;
6878 norm_format = malloc(format_len + 2 + 1);
6879 memcpy(norm_format, match, 2);
6880 memcpy(norm_format + 2, format, format_len);
6881 norm_format[format_len + 2] = '\0';
6882 n->orig_format =
6883 eina_stringshare_add_length(norm_format, format_len + 2);
6884 free(norm_format);
6885 }
6886 else
6887 { 7248 {
6888 n->orig_format = 7249 n->opener = EINA_TRUE;
6889 eina_stringshare_add_length(format, format_len); 7250 if (match[0] != '+')
7251 {
7252 n->own_closer = EINA_TRUE;
7253 }
6890 } 7254 }
6891 n->format = eina_stringshare_add(match); 7255
7256 pre_stripped_format = match;
6892 } 7257 }
6893 else 7258 else
6894 { 7259 {
6895 char *norm_format; 7260 if (format[0] == '/')
6896
6897 norm_format = malloc(format_len + 2 + 1);
6898 if (norm_format)
6899 { 7261 {
6900 if (format[0] == '/') 7262 format++;
6901 { 7263 format_len--;
6902 memcpy(norm_format, "- ", 2); 7264 }
6903 memcpy(norm_format + 2, format + 1, format_len - 1); 7265 else
6904 norm_format[format_len + 2 - 1] = '\0'; 7266 {
6905 } 7267 n->opener = EINA_TRUE;
6906 else
6907 {
6908 memcpy(norm_format, "+ ", 2);
6909 memcpy(norm_format + 2, format, format_len);
6910 norm_format[format_len + 2] = '\0';
6911 }
6912 n->orig_format = eina_stringshare_add(norm_format);
6913 free(norm_format);
6914 } 7268 }
6915 n->format = eina_stringshare_ref(n->orig_format);
6916 } 7269 }
7270
7271 n->orig_format = eina_stringshare_add_length(format, format_len);
7272
7273 if (!pre_stripped_format)
7274 pre_stripped_format = n->orig_format;
6917 } 7275 }
6918 /* Just use as is, it's a special format. */ 7276 /* Just use as is, it's a special format. */
6919 else 7277 else
6920 { 7278 {
6921 n->orig_format = eina_stringshare_add(format); 7279 const char *tmp = format;
6922 n->format = eina_stringshare_ref(n->orig_format); 7280 if (format[0] != '-')
7281 {
7282 n->opener = EINA_TRUE;
7283 if (format[0] != '+')
7284 {
7285 n->own_closer = EINA_TRUE;
7286 }
7287 }
7288 if ((*tmp == '+') || (*tmp == '-'))
7289 {
7290 tmp++;
7291 while (*tmp == ' ') tmp++;
7292 }
7293 n->orig_format = eina_stringshare_add(tmp);
7294 pre_stripped_format = n->orig_format;
6923 } 7295 }
6924 7296
7297 /* Strip format */
7298 {
7299 const char *tmp = pre_stripped_format;
7300 if ((*tmp == '+') || (*tmp == '-'))
7301 {
7302 tmp++;
7303 while (*tmp == ' ') tmp++;
7304 }
7305 n->format = eina_stringshare_add(tmp);
7306 }
6925 format = n->format; 7307 format = n->format;
6926 7308
6927 _evas_textblock_format_is_visible(n, format); 7309 _evas_textblock_format_is_visible(n, format);
@@ -7051,11 +7433,11 @@ evas_textblock_cursor_format_append(Evas_Textblock_Cursor *cur, const char *form
7051 if (_IS_PARAGRAPH_SEPARATOR(o, format)) 7433 if (_IS_PARAGRAPH_SEPARATOR(o, format))
7052 insert_char = _PARAGRAPH_SEPARATOR; 7434 insert_char = _PARAGRAPH_SEPARATOR;
7053 else if (_IS_LINE_SEPARATOR(format)) 7435 else if (_IS_LINE_SEPARATOR(format))
7054 insert_char = '\n'; 7436 insert_char = _NEWLINE;
7055 else if (_IS_TAB(format)) 7437 else if (_IS_TAB(format))
7056 insert_char = '\t'; 7438 insert_char = _TAB;
7057 else 7439 else
7058 insert_char = EVAS_TEXTBLOCK_REPLACEMENT_CHAR; 7440 insert_char = _REPLACEMENT_CHAR;
7059 7441
7060 eina_ustrbuf_insert_char(cur->node->unicode, insert_char, cur->pos); 7442 eina_ustrbuf_insert_char(cur->node->unicode, insert_char, cur->pos);
7061 7443
@@ -7142,7 +7524,7 @@ evas_textblock_cursor_char_delete(Evas_Textblock_Cursor *cur)
7142 should_merge = EINA_TRUE; 7524 should_merge = EINA_TRUE;
7143 } 7525 }
7144 /* If a singnular, mark as invisible, so we'll delete it. */ 7526 /* If a singnular, mark as invisible, so we'll delete it. */
7145 if (!format || ((*format != '+') && (*format != '-'))) 7527 if (!format || last_fmt->own_closer)
7146 { 7528 {
7147 last_fmt->visible = EINA_FALSE; 7529 last_fmt->visible = EINA_FALSE;
7148 } 7530 }
@@ -7271,60 +7653,40 @@ evas_textblock_cursor_range_delete(Evas_Textblock_Cursor *cur1, Evas_Textblock_C
7271EAPI char * 7653EAPI char *
7272evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur) 7654evas_textblock_cursor_content_get(const Evas_Textblock_Cursor *cur)
7273{ 7655{
7274 const Eina_Unicode *ustr;
7275 Eina_Unicode buf[2];
7276 char *s;
7277 if (!cur || !cur->node) return NULL; 7656 if (!cur || !cur->node) return NULL;
7278 if (evas_textblock_cursor_format_is_visible_get(cur)) 7657 if (evas_textblock_cursor_format_is_visible_get(cur))
7279 { 7658 {
7280 size_t len; 7659 Eina_Strbuf *buf;
7281 const char *fstr; 7660 Evas_Object_Textblock_Node_Format *fnode;
7282 char *ret; 7661 char *ret;
7283 int pop = 0; 7662 fnode = _evas_textblock_node_visible_at_pos_get(
7284 fstr = evas_textblock_node_format_text_get( 7663 evas_textblock_cursor_format_get(cur));
7285 _evas_textblock_node_visible_at_pos_get(
7286 evas_textblock_cursor_format_get(cur)));
7287
7288 if (!fstr)
7289 return NULL;
7290 7664
7291 if (*fstr == '-') pop = 1; 7665 buf = eina_strbuf_new();
7292 while ((*fstr == ' ') || (*fstr == '+') || (*fstr == '-')) fstr++; 7666 _markup_get_format_append(buf, fnode);
7293 len = strlen(fstr); 7667 ret = eina_strbuf_string_steal(buf);
7294 7668 eina_strbuf_free(buf);
7295 {
7296 char *tmp;
7297 if (pop)
7298 {
7299 ret = tmp = malloc(len + 3 + 1); /* </> and the null */
7300 memcpy(tmp, "</", 2);
7301 tmp += 2;
7302 }
7303 else
7304 {
7305 ret = tmp = malloc(len + 2 + 1); /* <> and the null */
7306 *tmp = '<';
7307 tmp++;
7308 }
7309 memcpy(tmp, fstr, len);
7310 memcpy(tmp + len, ">", 2); /* Including the null */
7311 }
7312 7669
7313 return ret; 7670 return ret;
7314 } 7671 }
7672 else
7673 {
7674 const Eina_Unicode *ustr;
7675 Eina_Unicode buf[2];
7676 char *s;
7315 7677
7316 ustr = eina_ustrbuf_string_get(cur->node->unicode); 7678 ustr = eina_ustrbuf_string_get(cur->node->unicode);
7317 buf[0] = ustr[cur->pos]; 7679 buf[0] = ustr[cur->pos];
7318 buf[1] = 0; 7680 buf[1] = 0;
7319 s = eina_unicode_unicode_to_utf8(buf, NULL); 7681 s = eina_unicode_unicode_to_utf8(buf, NULL);
7320 7682
7321 return s; 7683 return s;
7684 }
7322} 7685}
7323 7686
7324static char * 7687static char *
7325_evas_textblock_cursor_range_text_markup_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *_cur2) 7688_evas_textblock_cursor_range_text_markup_get(const Evas_Textblock_Cursor *cur1, const Evas_Textblock_Cursor *_cur2)
7326{ 7689{
7327 Evas_Object_Textblock *o;
7328 Evas_Object_Textblock_Node_Text *tnode; 7690 Evas_Object_Textblock_Node_Text *tnode;
7329 Eina_Strbuf *buf; 7691 Eina_Strbuf *buf;
7330 Evas_Textblock_Cursor *cur2; 7692 Evas_Textblock_Cursor *cur2;
@@ -7333,7 +7695,6 @@ _evas_textblock_cursor_range_text_markup_get(const Evas_Textblock_Cursor *cur1,
7333 if (!cur1 || !cur1->node) return NULL; 7695 if (!cur1 || !cur1->node) return NULL;
7334 if (!_cur2 || !_cur2->node) return NULL; 7696 if (!_cur2 || !_cur2->node) return NULL;
7335 if (cur1->obj != _cur2->obj) return NULL; 7697 if (cur1->obj != _cur2->obj) return NULL;
7336 o = (Evas_Object_Textblock *)(cur1->obj->object_data);
7337 if (evas_textblock_cursor_compare(cur1, _cur2) > 0) 7698 if (evas_textblock_cursor_compare(cur1, _cur2) > 0)
7338 { 7699 {
7339 const Evas_Textblock_Cursor *tc; 7700 const Evas_Textblock_Cursor *tc;
@@ -7401,7 +7762,7 @@ _evas_textblock_cursor_range_text_markup_get(const Evas_Textblock_Cursor *cur1,
7401 tmp_ch = text[off]; 7762 tmp_ch = text[off];
7402 text[off] = 0; /* Null terminate the part of the string */ 7763 text[off] = 0; /* Null terminate the part of the string */
7403 _markup_get_text_append(buf, text); 7764 _markup_get_text_append(buf, text);
7404 _markup_get_format_append(o, buf, fnode); 7765 _markup_get_format_append(buf, fnode);
7405 text[off] = tmp_ch; /* Restore the char */ 7766 text[off] = tmp_ch; /* Restore the char */
7406 text += off; 7767 text += off;
7407 if (fnode->visible) 7768 if (fnode->visible)
@@ -7623,8 +7984,27 @@ evas_textblock_cursor_format_get(const Evas_Textblock_Cursor *cur)
7623EAPI const char * 7984EAPI const char *
7624evas_textblock_node_format_text_get(const Evas_Object_Textblock_Node_Format *fmt) 7985evas_textblock_node_format_text_get(const Evas_Object_Textblock_Node_Format *fmt)
7625{ 7986{
7987 static char *ret = NULL;
7988 char *tmp;
7989
7626 if (!fmt) return NULL; 7990 if (!fmt) return NULL;
7627 return fmt->orig_format; 7991
7992 if (ret) free(ret);
7993 ret = malloc(strlen(fmt->orig_format) + 2 + 1);
7994 tmp = ret;
7995
7996 if (fmt->opener && !fmt->own_closer)
7997 {
7998 *(tmp++) = '+';
7999 *(tmp++) = ' ';
8000 }
8001 else if (!fmt->opener)
8002 {
8003 *(tmp++) = '-';
8004 *(tmp++) = ' ';
8005 }
8006 strcpy(tmp, fmt->orig_format);
8007 return ret;
7628} 8008}
7629 8009
7630EAPI void 8010EAPI void
@@ -7673,7 +8053,9 @@ evas_textblock_cursor_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord
7673 * the position of the previous */ 8053 * the position of the previous */
7674 if ((cur->pos > 0) && !_evas_textblock_cursor_is_at_the_end(cur)) 8054 if ((cur->pos > 0) && !_evas_textblock_cursor_is_at_the_end(cur))
7675 { 8055 {
8056#ifdef BIDI_SUPPORT
7676 Eina_Bool before_char = EINA_FALSE; 8057 Eina_Bool before_char = EINA_FALSE;
8058#endif
7677 cur2.obj = cur->obj; 8059 cur2.obj = cur->obj;
7678 evas_textblock_cursor_copy(cur, &cur2); 8060 evas_textblock_cursor_copy(cur, &cur2);
7679 evas_textblock_cursor_char_prev(&cur2); 8061 evas_textblock_cursor_char_prev(&cur2);
@@ -7683,12 +8065,16 @@ evas_textblock_cursor_geometry_get(const Evas_Textblock_Cursor *cur, Evas_Coord
7683 if (!fmt || !_IS_LINE_SEPARATOR(fmt->format)) 8065 if (!fmt || !_IS_LINE_SEPARATOR(fmt->format))
7684 { 8066 {
7685 dir_cur = &cur2; 8067 dir_cur = &cur2;
8068#ifdef BIDI_SUPPORT
7686 before_char = EINA_FALSE; 8069 before_char = EINA_FALSE;
8070#endif
7687 } 8071 }
8072#ifdef BIDI_SUPPORT
7688 else 8073 else
7689 { 8074 {
7690 before_char = EINA_TRUE; 8075 before_char = EINA_TRUE;
7691 } 8076 }
8077#endif
7692 ret = evas_textblock_cursor_pen_geometry_get( 8078 ret = evas_textblock_cursor_pen_geometry_get(
7693 dir_cur, &x, &y, &w, &h); 8079 dir_cur, &x, &y, &w, &h);
7694#ifdef BIDI_SUPPORT 8080#ifdef BIDI_SUPPORT
@@ -8788,6 +9174,7 @@ evas_object_textblock_init(Evas_Object *obj)
8788 { 9174 {
8789 linebreak_init = EINA_TRUE; 9175 linebreak_init = EINA_TRUE;
8790 init_linebreak(); 9176 init_linebreak();
9177 init_wordbreak();
8791 } 9178 }
8792#endif 9179#endif
8793 9180
diff --git a/libraries/evas/src/lib/canvas/evas_render.c b/libraries/evas/src/lib/canvas/evas_render.c
index 0abee97..cdedaec 100644
--- a/libraries/evas/src/lib/canvas/evas_render.c
+++ b/libraries/evas/src/lib/canvas/evas_render.c
@@ -1139,7 +1139,7 @@ evas_render_mapped(Evas *e, Evas_Object *obj, void *context, void *surface,
1139 } 1139 }
1140 } 1140 }
1141 } 1141 }
1142 if (surface == e->engine.data.output) 1142// if (surface == e->engine.data.output)
1143 e->engine.func->context_clip_clip(e->engine.data.output, 1143 e->engine.func->context_clip_clip(e->engine.data.output,
1144 e->engine.data.context, 1144 e->engine.data.context,
1145 ecx, ecy, ecw, ech); 1145 ecx, ecy, ecw, ech);
@@ -1360,6 +1360,8 @@ evas_render_updates_internal(Evas *e,
1360 1360
1361 RD("[--- RENDER EVAS (size: %ix%i)\n", e->viewport.w, e->viewport.h); 1361 RD("[--- RENDER EVAS (size: %ix%i)\n", e->viewport.w, e->viewport.h);
1362 1362
1363 evas_event_callback_call(e, EVAS_CALLBACK_RENDER_PRE, NULL);
1364
1363 /* Check if the modified object mean recalculating every thing */ 1365 /* Check if the modified object mean recalculating every thing */
1364 if (!e->invalidate) 1366 if (!e->invalidate)
1365 _evas_render_check_pending_objects(&e->pending_objects, e); 1367 _evas_render_check_pending_objects(&e->pending_objects, e);
@@ -1399,6 +1401,7 @@ evas_render_updates_internal(Evas *e,
1399 _evas_render_prev_cur_clip_cache_add(e, obj); 1401 _evas_render_prev_cur_clip_cache_add(e, obj);
1400 } 1402 }
1401 eina_array_clean(&e->restack_objects); 1403 eina_array_clean(&e->restack_objects);
1404
1402 /* phase 3. add exposes */ 1405 /* phase 3. add exposes */
1403 EINA_LIST_FREE(e->damages, r) 1406 EINA_LIST_FREE(e->damages, r)
1404 { 1407 {
@@ -1406,7 +1409,20 @@ evas_render_updates_internal(Evas *e,
1406 r->x, r->y, r->w, r->h); 1409 r->x, r->y, r->w, r->h);
1407 eina_rectangle_free(r); 1410 eina_rectangle_free(r);
1408 } 1411 }
1409 /* phase 4. output & viewport changes */ 1412
1413 /* phase 4. framespace, output & viewport changes */
1414 if (e->framespace.changed)
1415 {
1416 int fx, fy, fw, fh;
1417
1418 fx = e->viewport.x - e->framespace.x;
1419 fy = e->viewport.y - e->framespace.y;
1420 fw = e->viewport.w + e->framespace.w;
1421 fh = e->viewport.h + e->framespace.h;
1422 e->engine.func->output_redraws_rect_add(e->engine.data.output,
1423 fx, fy, fw, fh);
1424 }
1425
1410 if (e->viewport.changed) 1426 if (e->viewport.changed)
1411 { 1427 {
1412 e->engine.func->output_redraws_rect_add(e->engine.data.output, 1428 e->engine.func->output_redraws_rect_add(e->engine.data.output,
@@ -1431,6 +1447,7 @@ evas_render_updates_internal(Evas *e,
1431 0, 0, 1447 0, 0,
1432 e->output.w, e->output.h); 1448 e->output.w, e->output.h);
1433 } 1449 }
1450
1434 /* phase 5. add obscures */ 1451 /* phase 5. add obscures */
1435 EINA_LIST_FOREACH(e->obscures, ll, r) 1452 EINA_LIST_FOREACH(e->obscures, ll, r)
1436 { 1453 {
@@ -1562,13 +1579,6 @@ evas_render_updates_internal(Evas *e,
1562 else 1579 else
1563 e->engine.func->context_mask_unset(e->engine.data.output, 1580 e->engine.func->context_mask_unset(e->engine.data.output,
1564 e->engine.data.context); 1581 e->engine.data.context);
1565 if (obj->cur.clipper)
1566 e->engine.func->context_clip_set(e->engine.data.output,
1567 e->engine.data.context,
1568 x, y, w, h);
1569 else
1570 e->engine.func->context_clip_unset(e->engine.data.output,
1571 e->engine.data.context);
1572#if 1 /* FIXME: this can slow things down... figure out optimum... coverage */ 1582#if 1 /* FIXME: this can slow things down... figure out optimum... coverage */
1573 for (j = offset; j < e->temporary_objects.count; ++j) 1583 for (j = offset; j < e->temporary_objects.count; ++j)
1574 { 1584 {
@@ -1671,6 +1681,7 @@ evas_render_updates_internal(Evas *e,
1671 e->changed = 0; 1681 e->changed = 0;
1672 e->viewport.changed = 0; 1682 e->viewport.changed = 0;
1673 e->output.changed = 0; 1683 e->output.changed = 0;
1684 e->framespace.changed = 0;
1674 e->invalidate = 0; 1685 e->invalidate = 0;
1675 1686
1676 /* If their are some object to restack or some object to delete, 1687 /* If their are some object to restack or some object to delete,
@@ -1686,6 +1697,8 @@ evas_render_updates_internal(Evas *e,
1686 } 1697 }
1687 1698
1688 evas_module_clean(); 1699 evas_module_clean();
1700
1701 evas_event_callback_call(e, EVAS_CALLBACK_RENDER_POST, NULL);
1689 1702
1690 RD("---]\n"); 1703 RD("---]\n");
1691 1704
diff --git a/libraries/evas/src/lib/cserve/Makefile.in b/libraries/evas/src/lib/cserve/Makefile.in
index 74b5ff9..7599ca2 100644
--- a/libraries/evas/src/lib/cserve/Makefile.in
+++ b/libraries/evas/src/lib/cserve/Makefile.in
@@ -198,8 +198,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
198PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 198PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
199PIXMAN_LIBS = @PIXMAN_LIBS@ 199PIXMAN_LIBS = @PIXMAN_LIBS@
200PKG_CONFIG = @PKG_CONFIG@ 200PKG_CONFIG = @PKG_CONFIG@
201PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
202PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
203PNG_CFLAGS = @PNG_CFLAGS@ 201PNG_CFLAGS = @PNG_CFLAGS@
204PNG_LIBS = @PNG_LIBS@ 202PNG_LIBS = @PNG_LIBS@
205RANLIB = @RANLIB@ 203RANLIB = @RANLIB@
@@ -216,6 +214,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
216VALGRIND_LIBS = @VALGRIND_LIBS@ 214VALGRIND_LIBS = @VALGRIND_LIBS@
217VERSION = @VERSION@ 215VERSION = @VERSION@
218VMAJ = @VMAJ@ 216VMAJ = @VMAJ@
217WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
218WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
219WIN32_CFLAGS = @WIN32_CFLAGS@ 219WIN32_CFLAGS = @WIN32_CFLAGS@
220WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 220WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
221XCB_CFLAGS = @XCB_CFLAGS@ 221XCB_CFLAGS = @XCB_CFLAGS@
@@ -297,6 +297,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
297evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 297evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
298evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 298evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
299evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 299evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
300evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
301evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
302evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
303evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
300evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 304evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
301evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 305evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
302evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 306evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/Makefile.in b/libraries/evas/src/lib/engines/Makefile.in
index 12e28c1..4c3c1da 100644
--- a/libraries/evas/src/lib/engines/Makefile.in
+++ b/libraries/evas/src/lib/engines/Makefile.in
@@ -208,8 +208,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
208PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 208PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
209PIXMAN_LIBS = @PIXMAN_LIBS@ 209PIXMAN_LIBS = @PIXMAN_LIBS@
210PKG_CONFIG = @PKG_CONFIG@ 210PKG_CONFIG = @PKG_CONFIG@
211PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
212PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
213PNG_CFLAGS = @PNG_CFLAGS@ 211PNG_CFLAGS = @PNG_CFLAGS@
214PNG_LIBS = @PNG_LIBS@ 212PNG_LIBS = @PNG_LIBS@
215RANLIB = @RANLIB@ 213RANLIB = @RANLIB@
@@ -226,6 +224,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
226VALGRIND_LIBS = @VALGRIND_LIBS@ 224VALGRIND_LIBS = @VALGRIND_LIBS@
227VERSION = @VERSION@ 225VERSION = @VERSION@
228VMAJ = @VMAJ@ 226VMAJ = @VMAJ@
227WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
228WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
229WIN32_CFLAGS = @WIN32_CFLAGS@ 229WIN32_CFLAGS = @WIN32_CFLAGS@
230WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 230WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
231XCB_CFLAGS = @XCB_CFLAGS@ 231XCB_CFLAGS = @XCB_CFLAGS@
@@ -307,6 +307,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
307evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 307evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
308evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 308evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
309evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 309evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
310evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
311evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
312evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
313evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
310evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 314evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
311evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 315evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
312evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 316evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/Makefile.in b/libraries/evas/src/lib/engines/common/Makefile.in
index b0162df..7d1f20a 100644
--- a/libraries/evas/src/lib/engines/common/Makefile.in
+++ b/libraries/evas/src/lib/engines/common/Makefile.in
@@ -252,8 +252,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
252PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 252PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
253PIXMAN_LIBS = @PIXMAN_LIBS@ 253PIXMAN_LIBS = @PIXMAN_LIBS@
254PKG_CONFIG = @PKG_CONFIG@ 254PKG_CONFIG = @PKG_CONFIG@
255PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
256PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
257PNG_CFLAGS = @PNG_CFLAGS@ 255PNG_CFLAGS = @PNG_CFLAGS@
258PNG_LIBS = @PNG_LIBS@ 256PNG_LIBS = @PNG_LIBS@
259RANLIB = @RANLIB@ 257RANLIB = @RANLIB@
@@ -270,6 +268,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
270VALGRIND_LIBS = @VALGRIND_LIBS@ 268VALGRIND_LIBS = @VALGRIND_LIBS@
271VERSION = @VERSION@ 269VERSION = @VERSION@
272VMAJ = @VMAJ@ 270VMAJ = @VMAJ@
271WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
272WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
273WIN32_CFLAGS = @WIN32_CFLAGS@ 273WIN32_CFLAGS = @WIN32_CFLAGS@
274WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 274WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
275XCB_CFLAGS = @XCB_CFLAGS@ 275XCB_CFLAGS = @XCB_CFLAGS@
@@ -351,6 +351,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
351evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 351evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
352evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 352evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
353evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 353evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
354evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
355evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
356evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
357evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
354evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 358evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
355evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 359evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
356evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 360evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/evas_convert_rgb_16.c b/libraries/evas/src/lib/engines/common/evas_convert_rgb_16.c
index b30ec1e..796ff17 100644
--- a/libraries/evas/src/lib/engines/common/evas_convert_rgb_16.c
+++ b/libraries/evas/src/lib/engines/common/evas_convert_rgb_16.c
@@ -117,7 +117,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int sr
117 } 117 }
118#endif 118#endif
119 return; 119 return;
120 pal = 0; 120 (void)pal;
121#else 121#else
122 DATA16 *d = (DATA16 *)dst; 122 DATA16 *d = (DATA16 *)dst;
123 int w0 = w; 123 int w0 = w;
@@ -144,7 +144,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int sr
144 d += dst_jump; 144 d += dst_jump;
145 } 145 }
146 return; 146 return;
147 pal = 0; 147 (void)pal;
148#endif 148#endif
149} 149}
150#endif 150#endif
@@ -216,7 +216,7 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src
216 } 216 }
217#endif 217#endif
218 return; 218 return;
219 pal = 0; 219 (void)pal;
220#else 220#else
221 DATA16 *d = (DATA16 *)dst; 221 DATA16 *d = (DATA16 *)dst;
222 int w0 = w; 222 int w0 = w;
@@ -233,7 +233,7 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith (DATA32 *src, DATA8 *dst, int src
233 d += dst_jump; 233 d += dst_jump;
234 } 234 }
235 return; 235 return;
236 pal = 0; 236 (void)pal;
237#endif 237#endif
238} 238}
239#endif 239#endif
@@ -295,7 +295,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_180 (DATA32 *src, DATA8 *dst
295 295
296 CONVERT_LOOP2_END_ROT_180(); 296 CONVERT_LOOP2_END_ROT_180();
297 return; 297 return;
298 pal = 0; 298 (void)pal;
299} 299}
300#endif 300#endif
301#endif 301#endif
@@ -333,7 +333,7 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_180 (DATA32 *src, DATA8 *dst,
333 333
334 CONVERT_LOOP_END_ROT_180(); 334 CONVERT_LOOP_END_ROT_180();
335 return; 335 return;
336 pal = 0; 336 (void)pal;
337} 337}
338#endif 338#endif
339#endif 339#endif
@@ -394,7 +394,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_270 (DATA32 *src, DATA8 *dst
394 394
395 CONVERT_LOOP2_END_ROT_270(); 395 CONVERT_LOOP2_END_ROT_270();
396 return; 396 return;
397 pal = 0; 397 (void)pal;
398} 398}
399#endif 399#endif
400#endif 400#endif
@@ -432,7 +432,7 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_270 (DATA32 *src, DATA8 *dst,
432 432
433 CONVERT_LOOP_END_ROT_270(); 433 CONVERT_LOOP_END_ROT_270();
434 return; 434 return;
435 pal = 0; 435 (void)pal;
436} 436}
437#endif 437#endif
438#endif 438#endif
@@ -493,7 +493,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_565_dith_rot_90 (DATA32 *src, DATA8 *dst,
493 493
494 CONVERT_LOOP2_END_ROT_90(); 494 CONVERT_LOOP2_END_ROT_90();
495 return; 495 return;
496 pal = 0; 496 (void)pal;
497} 497}
498#endif 498#endif
499#endif 499#endif
@@ -531,7 +531,7 @@ evas_common_convert_rgba_to_16bpp_rgb_565_dith_rot_90 (DATA32 *src, DATA8 *dst,
531 531
532 CONVERT_LOOP_END_ROT_90(); 532 CONVERT_LOOP_END_ROT_90();
533 return; 533 return;
534 pal = 0; 534 (void)pal;
535} 535}
536#endif 536#endif
537#endif 537#endif
@@ -592,7 +592,7 @@ evas_common_convert_rgba2_to_16bpp_bgr_565_dith (DATA32 *src, DATA8 *dst, int sr
592 592
593 CONVERT_LOOP2_END_ROT_0(); 593 CONVERT_LOOP2_END_ROT_0();
594 return; 594 return;
595 pal = 0; 595 (void)pal;
596} 596}
597#endif 597#endif
598#endif 598#endif
@@ -630,7 +630,7 @@ evas_common_convert_rgba_to_16bpp_bgr_565_dith (DATA32 *src, DATA8 *dst, int src
630 630
631 CONVERT_LOOP_END_ROT_0(); 631 CONVERT_LOOP_END_ROT_0();
632 return; 632 return;
633 pal = 0; 633 (void)pal;
634} 634}
635#endif 635#endif
636#endif 636#endif
@@ -691,7 +691,7 @@ evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_180 (DATA32 *src, DATA8 *dst
691 691
692 CONVERT_LOOP2_END_ROT_180(); 692 CONVERT_LOOP2_END_ROT_180();
693 return; 693 return;
694 pal = 0; 694 (void)pal;
695} 695}
696#endif 696#endif
697#endif 697#endif
@@ -731,7 +731,7 @@ evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_180 (DATA32 *src, DATA8 *dst,
731 731
732 CONVERT_LOOP_END_ROT_180(); 732 CONVERT_LOOP_END_ROT_180();
733 return; 733 return;
734 pal = 0; 734 (void)pal;
735} 735}
736#endif 736#endif
737#endif 737#endif
@@ -792,7 +792,7 @@ evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_270 (DATA32 *src, DATA8 *dst
792 792
793 CONVERT_LOOP2_END_ROT_270(); 793 CONVERT_LOOP2_END_ROT_270();
794 return; 794 return;
795 pal = 0; 795 (void)pal;
796} 796}
797#endif 797#endif
798#endif 798#endif
@@ -830,7 +830,7 @@ evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_270 (DATA32 *src, DATA8 *dst,
830 830
831 CONVERT_LOOP_END_ROT_270(); 831 CONVERT_LOOP_END_ROT_270();
832 return; 832 return;
833 pal = 0; 833 (void)pal;
834} 834}
835#endif 835#endif
836#endif 836#endif
@@ -891,7 +891,7 @@ evas_common_convert_rgba2_to_16bpp_bgr_565_dith_rot_90 (DATA32 *src, DATA8 *dst,
891 891
892 CONVERT_LOOP2_END_ROT_90(); 892 CONVERT_LOOP2_END_ROT_90();
893 return; 893 return;
894 pal = 0; 894 (void)pal;
895} 895}
896#endif 896#endif
897#endif 897#endif
@@ -929,7 +929,7 @@ evas_common_convert_rgba_to_16bpp_bgr_565_dith_rot_90 (DATA32 *src, DATA8 *dst,
929 929
930 CONVERT_LOOP_END_ROT_90(); 930 CONVERT_LOOP_END_ROT_90();
931 return; 931 return;
932 pal = 0; 932 (void)pal;
933} 933}
934#endif 934#endif
935#endif 935#endif
@@ -988,7 +988,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_444_dith (DATA32 *src, DATA8 *dst, int sr
988 988
989 CONVERT_LOOP2_END_ROT_0(); 989 CONVERT_LOOP2_END_ROT_0();
990 return; 990 return;
991 pal = 0; 991 (void)pal;
992} 992}
993#endif 993#endif
994#endif 994#endif
@@ -1025,7 +1025,7 @@ evas_common_convert_rgba_to_16bpp_rgb_444_dith (DATA32 *src, DATA8 *dst, int src
1025 1025
1026 CONVERT_LOOP_END_ROT_0(); 1026 CONVERT_LOOP_END_ROT_0();
1027 return; 1027 return;
1028 pal = 0; 1028 (void)pal;
1029} 1029}
1030#endif 1030#endif
1031#endif 1031#endif
@@ -1084,7 +1084,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_180 (DATA32 *src, DATA8 *dst
1084 1084
1085 CONVERT_LOOP2_END_ROT_180(); 1085 CONVERT_LOOP2_END_ROT_180();
1086 return; 1086 return;
1087 pal = 0; 1087 (void)pal;
1088} 1088}
1089#endif 1089#endif
1090#endif 1090#endif
@@ -1121,7 +1121,7 @@ evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_180 (DATA32 *src, DATA8 *dst,
1121 1121
1122 CONVERT_LOOP_END_ROT_180(); 1122 CONVERT_LOOP_END_ROT_180();
1123 return; 1123 return;
1124 pal = 0; 1124 (void)pal;
1125} 1125}
1126#endif 1126#endif
1127#endif 1127#endif
@@ -1180,7 +1180,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_270 (DATA32 *src, DATA8 *dst
1180 1180
1181 CONVERT_LOOP2_END_ROT_270(); 1181 CONVERT_LOOP2_END_ROT_270();
1182 return; 1182 return;
1183 pal = 0; 1183 (void)pal;
1184} 1184}
1185#endif 1185#endif
1186#endif 1186#endif
@@ -1217,7 +1217,7 @@ evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_270 (DATA32 *src, DATA8 *dst,
1217 1217
1218 CONVERT_LOOP_END_ROT_270(); 1218 CONVERT_LOOP_END_ROT_270();
1219 return; 1219 return;
1220 pal = 0; 1220 (void)pal;
1221} 1221}
1222#endif 1222#endif
1223#endif 1223#endif
@@ -1276,7 +1276,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_444_dith_rot_90 (DATA32 *src, DATA8 *dst,
1276 1276
1277 CONVERT_LOOP2_END_ROT_90(); 1277 CONVERT_LOOP2_END_ROT_90();
1278 return; 1278 return;
1279 pal = 0; 1279 (void)pal;
1280} 1280}
1281#endif 1281#endif
1282#endif 1282#endif
@@ -1313,7 +1313,7 @@ evas_common_convert_rgba_to_16bpp_rgb_444_dith_rot_90 (DATA32 *src, DATA8 *dst,
1313 1313
1314 CONVERT_LOOP_END_ROT_90(); 1314 CONVERT_LOOP_END_ROT_90();
1315 return; 1315 return;
1316 pal = 0; 1316 (void)pal;
1317} 1317}
1318#endif 1318#endif
1319#endif 1319#endif
@@ -1372,7 +1372,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_454645_dith (DATA32 *src, DATA8 *dst, int
1372 1372
1373 CONVERT_LOOP2_END_ROT_0(); 1373 CONVERT_LOOP2_END_ROT_0();
1374 return; 1374 return;
1375 pal = 0; 1375 (void)pal;
1376} 1376}
1377#endif 1377#endif
1378#endif 1378#endif
@@ -1409,7 +1409,7 @@ evas_common_convert_rgba_to_16bpp_rgb_454645_dith (DATA32 *src, DATA8 *dst, int
1409 1409
1410 CONVERT_LOOP_END_ROT_0(); 1410 CONVERT_LOOP_END_ROT_0();
1411 return; 1411 return;
1412 pal = 0; 1412 (void)pal;
1413} 1413}
1414#endif 1414#endif
1415#endif 1415#endif
@@ -1468,7 +1468,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_180 (DATA32 *src, DATA8 *
1468 1468
1469 CONVERT_LOOP2_END_ROT_180(); 1469 CONVERT_LOOP2_END_ROT_180();
1470 return; 1470 return;
1471 pal = 0; 1471 (void)pal;
1472} 1472}
1473#endif 1473#endif
1474#endif 1474#endif
@@ -1505,7 +1505,7 @@ evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_180 (DATA32 *src, DATA8 *d
1505 1505
1506 CONVERT_LOOP_END_ROT_180(); 1506 CONVERT_LOOP_END_ROT_180();
1507 return; 1507 return;
1508 pal = 0; 1508 (void)pal;
1509} 1509}
1510#endif 1510#endif
1511#endif 1511#endif
@@ -1565,7 +1565,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_270 (DATA32 *src, DATA8 *
1565 1565
1566 CONVERT_LOOP2_END_ROT_270(); 1566 CONVERT_LOOP2_END_ROT_270();
1567 return; 1567 return;
1568 pal = 0; 1568 (void)pal;
1569} 1569}
1570#endif 1570#endif
1571#endif 1571#endif
@@ -1602,7 +1602,7 @@ evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_270 (DATA32 *src, DATA8 *d
1602 1602
1603 CONVERT_LOOP_END_ROT_270(); 1603 CONVERT_LOOP_END_ROT_270();
1604 return; 1604 return;
1605 pal = 0; 1605 (void)pal;
1606} 1606}
1607#endif 1607#endif
1608#endif 1608#endif
@@ -1661,7 +1661,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_454645_dith_rot_90 (DATA32 *src, DATA8 *d
1661 1661
1662 CONVERT_LOOP2_END_ROT_90(); 1662 CONVERT_LOOP2_END_ROT_90();
1663 return; 1663 return;
1664 pal = 0; 1664 (void)pal;
1665} 1665}
1666#endif 1666#endif
1667#endif 1667#endif
@@ -1698,7 +1698,7 @@ evas_common_convert_rgba_to_16bpp_rgb_454645_dith_rot_90 (DATA32 *src, DATA8 *ds
1698 1698
1699 CONVERT_LOOP_END_ROT_90(); 1699 CONVERT_LOOP_END_ROT_90();
1700 return; 1700 return;
1701 pal = 0; 1701 (void)pal;
1702} 1702}
1703#endif 1703#endif
1704#endif 1704#endif
@@ -1757,7 +1757,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_555_dith (DATA32 *src, DATA8 *dst, int sr
1757 1757
1758 CONVERT_LOOP2_END_ROT_0(); 1758 CONVERT_LOOP2_END_ROT_0();
1759 return; 1759 return;
1760 pal = 0; 1760 (void)pal;
1761} 1761}
1762#endif 1762#endif
1763#endif 1763#endif
@@ -1794,7 +1794,7 @@ evas_common_convert_rgba_to_16bpp_rgb_555_dith (DATA32 *src, DATA8 *dst, int src
1794 1794
1795 CONVERT_LOOP_END_ROT_0(); 1795 CONVERT_LOOP_END_ROT_0();
1796 return; 1796 return;
1797 pal = 0; 1797 (void)pal;
1798} 1798}
1799#endif 1799#endif
1800#endif 1800#endif
@@ -1853,7 +1853,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_180 (DATA32 *src, DATA8 *dst
1853 1853
1854 CONVERT_LOOP2_END_ROT_180(); 1854 CONVERT_LOOP2_END_ROT_180();
1855 return; 1855 return;
1856 pal = 0; 1856 (void)pal;
1857} 1857}
1858#endif 1858#endif
1859#endif 1859#endif
@@ -1890,7 +1890,7 @@ evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_180 (DATA32 *src, DATA8 *dst,
1890 1890
1891 CONVERT_LOOP_END_ROT_180(); 1891 CONVERT_LOOP_END_ROT_180();
1892 return; 1892 return;
1893 pal = 0; 1893 (void)pal;
1894} 1894}
1895#endif 1895#endif
1896#endif 1896#endif
@@ -1949,7 +1949,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_270 (DATA32 *src, DATA8 *dst
1949 1949
1950 CONVERT_LOOP2_END_ROT_270(); 1950 CONVERT_LOOP2_END_ROT_270();
1951 return; 1951 return;
1952 pal = 0; 1952 (void)pal;
1953} 1953}
1954#endif 1954#endif
1955#endif 1955#endif
@@ -1986,7 +1986,7 @@ evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_270 (DATA32 *src, DATA8 *dst,
1986 1986
1987 CONVERT_LOOP_END_ROT_270(); 1987 CONVERT_LOOP_END_ROT_270();
1988 return; 1988 return;
1989 pal = 0; 1989 (void)pal;
1990} 1990}
1991#endif 1991#endif
1992#endif 1992#endif
@@ -2045,7 +2045,7 @@ evas_common_convert_rgba2_to_16bpp_rgb_555_dith_rot_90 (DATA32 *src, DATA8 *dst,
2045 2045
2046 CONVERT_LOOP2_END_ROT_90(); 2046 CONVERT_LOOP2_END_ROT_90();
2047 return; 2047 return;
2048 pal = 0; 2048 (void)pal;
2049} 2049}
2050#endif 2050#endif
2051#endif 2051#endif
@@ -2082,7 +2082,7 @@ evas_common_convert_rgba_to_16bpp_rgb_555_dith_rot_90 (DATA32 *src, DATA8 *dst,
2082 2082
2083 CONVERT_LOOP_END_ROT_90(); 2083 CONVERT_LOOP_END_ROT_90();
2084 return; 2084 return;
2085 pal = 0; 2085 (void)pal;
2086} 2086}
2087#endif 2087#endif
2088#endif 2088#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_convert_rgb_32.c b/libraries/evas/src/lib/engines/common/evas_convert_rgb_32.c
index 41dac6f..0401a4a 100644
--- a/libraries/evas/src/lib/engines/common/evas_convert_rgb_32.c
+++ b/libraries/evas/src/lib/engines/common/evas_convert_rgb_32.c
@@ -48,15 +48,167 @@ evas_common_convert_rgba_to_32bpp_rgb_8888_rot_180 (DATA32 *src, DATA8 *dst, int
48#endif 48#endif
49#endif 49#endif
50 50
51#ifdef TILE_ROTATE
52#define FAST_SIMPLE_ROTATE(suffix, pix_type) \
53 static void \
54 blt_rotated_90_trivial_##suffix(pix_type *dst, \
55 int dst_stride, \
56 const pix_type *src, \
57 int src_stride, \
58 int w, \
59 int h) \
60 { \
61 int x, y; \
62 for (y = 0; y < h; y++) \
63 { \
64 const pix_type *s = src + (h - y - 1); \
65 pix_type *d = dst + (dst_stride * y); \
66 for (x = 0; x < w; x++) \
67 { \
68 *d++ = *s; \
69 s += src_stride; \
70 } \
71 } \
72 } \
73 static void \
74 blt_rotated_270_trivial_##suffix(pix_type *dst, \
75 int dst_stride, \
76 const pix_type *src, \
77 int src_stride, \
78 int w, \
79 int h) \
80 { \
81 int x, y; \
82 for (y = 0; y < h; y++) \
83 { \
84 const pix_type *s = src + (src_stride * (w - 1)) + y; \
85 pix_type *d = dst + (dst_stride * y); \
86 for (x = 0; x < w; x++) \
87 { \
88 *d++ = *s; \
89 s -= src_stride; \
90 } \
91 } \
92 } \
93 static void \
94 blt_rotated_90_##suffix(pix_type *dst, \
95 int dst_stride, \
96 const pix_type *src, \
97 int src_stride, \
98 int w, \
99 int h) \
100 { \
101 int x, leading_pixels = 0, trailing_pixels = 0; \
102 const int TILE_SIZE = TILE_CACHE_LINE_SIZE / sizeof(pix_type); \
103 if ((uintptr_t)dst & (TILE_CACHE_LINE_SIZE - 1)) \
104 { \
105 leading_pixels = TILE_SIZE - \
106 (((uintptr_t)dst & (TILE_CACHE_LINE_SIZE - 1)) / sizeof(pix_type)); \
107 if (leading_pixels > w) \
108 leading_pixels = w; \
109 blt_rotated_90_trivial_##suffix(dst, \
110 dst_stride, \
111 src, \
112 src_stride, \
113 leading_pixels, \
114 h); \
115 dst += leading_pixels; \
116 src += leading_pixels * src_stride; \
117 w -= leading_pixels; \
118 } \
119 if ((uintptr_t)(dst + w) & (TILE_CACHE_LINE_SIZE - 1)) \
120 { \
121 trailing_pixels = (((uintptr_t)(dst + w) & \
122 (TILE_CACHE_LINE_SIZE - 1)) / sizeof(pix_type)); \
123 if (trailing_pixels > w) \
124 trailing_pixels = w; \
125 w -= trailing_pixels; \
126 } \
127 for (x = 0; x < w; x += TILE_SIZE) \
128 { \
129 blt_rotated_90_trivial_##suffix(dst + x, \
130 dst_stride, \
131 src + (src_stride * x), \
132 src_stride, \
133 TILE_SIZE, \
134 h); \
135 } \
136 if (trailing_pixels) \
137 blt_rotated_90_trivial_##suffix(dst + w, \
138 dst_stride, \
139 src + (w * src_stride), \
140 src_stride, \
141 trailing_pixels, \
142 h); \
143 } \
144 static void \
145 blt_rotated_270_##suffix(pix_type *dst, \
146 int dst_stride, \
147 const pix_type *src, \
148 int src_stride, \
149 int w, \
150 int h) \
151 { \
152 int x, leading_pixels = 0, trailing_pixels = 0; \
153 const int TILE_SIZE = TILE_CACHE_LINE_SIZE / sizeof(pix_type); \
154 if ((uintptr_t)dst & (TILE_CACHE_LINE_SIZE - 1)) \
155 { \
156 leading_pixels = TILE_SIZE - \
157 (((uintptr_t)dst & (TILE_CACHE_LINE_SIZE - 1)) / sizeof(pix_type)); \
158 if (leading_pixels > w) \
159 leading_pixels = w; \
160 blt_rotated_270_trivial_##suffix(dst, \
161 dst_stride, \
162 src + (src_stride * (w - leading_pixels)), \
163 src_stride, \
164 leading_pixels, \
165 h); \
166 dst += leading_pixels; \
167 w -= leading_pixels; \
168 } \
169 if ((uintptr_t)(dst + w) & (TILE_CACHE_LINE_SIZE - 1)) \
170 { \
171 trailing_pixels = (((uintptr_t)(dst + w) & \
172 (TILE_CACHE_LINE_SIZE - 1)) / sizeof(pix_type)); \
173 if (trailing_pixels > w) \
174 trailing_pixels = w; \
175 w -= trailing_pixels; \
176 src += trailing_pixels * src_stride; \
177 } \
178 for (x = 0; x < w; x += TILE_SIZE) \
179 { \
180 blt_rotated_270_trivial_##suffix(dst + x, \
181 dst_stride, \
182 src + (src_stride * (w - x - TILE_SIZE)), \
183 src_stride, \
184 TILE_SIZE, \
185 h); \
186 } \
187 if (trailing_pixels) \
188 blt_rotated_270_trivial_##suffix(dst + w, \
189 dst_stride, \
190 src - (trailing_pixels * src_stride), \
191 src_stride, \
192 trailing_pixels, \
193 h); \
194 }
195
196FAST_SIMPLE_ROTATE(8888, DATA8)
197#endif
198
199
51#ifdef BUILD_CONVERT_32_RGB_8888 200#ifdef BUILD_CONVERT_32_RGB_8888
52#ifdef BUILD_CONVERT_32_RGB_ROT270 201#ifdef BUILD_CONVERT_32_RGB_ROT270
53void 202void
54evas_common_convert_rgba_to_32bpp_rgb_8888_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__) 203evas_common_convert_rgba_to_32bpp_rgb_8888_rot_270 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__)
55{ 204{
205#ifdef TILE_ROTATE
206 blt_rotated_270_8888((DATA8 *)dst, dst_jump+w, (const DATA8 *)src, src_jump+h, w, h) ;
207#else
56 DATA32 *src_ptr; 208 DATA32 *src_ptr;
57 DATA32 *dst_ptr; 209 DATA32 *dst_ptr;
58 int x, y; 210 int x, y;
59 211
60 dst_ptr = (DATA32 *)dst; 212 dst_ptr = (DATA32 *)dst;
61 213
62 CONVERT_LOOP_START_ROT_270(); 214 CONVERT_LOOP_START_ROT_270();
@@ -64,6 +216,7 @@ evas_common_convert_rgba_to_32bpp_rgb_8888_rot_270 (DATA32 *src, DATA8 *dst, int
64 *dst_ptr = *src_ptr; 216 *dst_ptr = *src_ptr;
65 217
66 CONVERT_LOOP_END_ROT_270(); 218 CONVERT_LOOP_END_ROT_270();
219#endif
67 return; 220 return;
68} 221}
69#endif 222#endif
@@ -74,106 +227,118 @@ evas_common_convert_rgba_to_32bpp_rgb_8888_rot_270 (DATA32 *src, DATA8 *dst, int
74void 227void
75evas_common_convert_rgba_to_32bpp_rgb_8888_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__) 228evas_common_convert_rgba_to_32bpp_rgb_8888_rot_90 (DATA32 *src, DATA8 *dst, int src_jump, int dst_jump, int w, int h, int dith_x __UNUSED__, int dith_y __UNUSED__, DATA8 *pal __UNUSED__)
76{ 229{
77#ifndef BUILD_NEON 230# ifndef BUILD_NEON
231# ifdef TILE_ROTATE
232 blt_rotated_90_8888((DATA8 *)dst, dst_jump+w, (const DATA8 *)src, src_jump+h, w, h) ;
233# else
78 DATA32 *src_ptr; 234 DATA32 *src_ptr;
79 DATA32 *dst_ptr; 235 DATA32 *dst_ptr;
80 int x, y; 236 int x, y;
81 237
82 dst_ptr = (DATA32 *)dst; 238 dst_ptr = (DATA32 *)dst;
83 CONVERT_LOOP_START_ROT_90(); 239 CONVERT_LOOP_START_ROT_90();
84 240
85 *dst_ptr = *src_ptr; 241 *dst_ptr = *src_ptr;
86 242
87 CONVERT_LOOP_END_ROT_90(); 243 CONVERT_LOOP_END_ROT_90();
88#else 244# endif
245
246# else
247
248# ifdef TILE_ROTATE
249 blt_rotated_90_8888((DATA8 *)dst, dst_jump+w, (const DATA8 *)src, src_jump+h, w, h) ;
250# else
89 if ((w & 1) || (h & 1)) 251 if ((w & 1) || (h & 1))
90 { 252 {
91 /* Rarely (if ever) if ever: so slow path is fine */ 253 /* Rarely (if ever) if ever: so slow path is fine */
92 DATA32 *src_ptr; 254 DATA32 *src_ptr;
93 DATA32 *dst_ptr; 255 DATA32 *dst_ptr;
94 int x, y; 256 int x, y;
95 257
96 dst_ptr = (DATA32 *)dst; 258 dst_ptr = (DATA32 *)dst;
97 CONVERT_LOOP_START_ROT_90(); 259 CONVERT_LOOP_START_ROT_90();
98 260
99 *dst_ptr = *src_ptr; 261 *dst_ptr = *src_ptr;
100 262
101 CONVERT_LOOP_END_ROT_90(); 263 CONVERT_LOOP_END_ROT_90();
102 } else { 264 }
103#define AP "convert_rgba32_rot_90_" 265 else
104 asm volatile ( 266 {
105 ".fpu neon \n\t" 267# define AP "convert_rgba32_rot_90_"
106 " mov %[s1], %[src] \n\t" 268 asm volatile (
107 " add %[s1], %[h],lsl #2 \n\t" 269 ".fpu neon \n\t"
108 " sub %[s1], #8 \n\t" 270 " mov %[s1], %[src] \n\t"
109 271 " add %[s1], %[s1], %[h],lsl #2 \n\t"
110 " mov %[s2], %[src] \n\t" 272 " sub %[s1], #8 \n\t"
111 " add %[s2], %[h], lsl #3 \n\t" 273
112 " add %[s2], %[sjmp], lsr #1 \n\t" 274 " mov %[s2], %[src] \n\t"
113 " sub %[s2], #8 \n\t" 275 " add %[s2], %[s2], %[h], lsl #3 \n\t"
114 276 " add %[s2], %[s2], %[sjmp], lsr #1 \n\t"
115 " mov %[d1], %[dst] \n\t" 277 " sub %[s2], #8 \n\t"
116 278
117 " add %[d2], %[d1], %[djmp] \n\t" 279 " mov %[d1], %[dst] \n\t"
118 " add %[d2], %[w], lsl #2 \n\t" 280
119 281 " add %[d2], %[d1], %[djmp] \n\t"
120 " mov %[sadv], %[h], lsl #3 \n\t" 282 " add %[d2], %[d2], %[w], lsl #2 \n\t"
121 " add %[sadv], %[sjmp], lsl #1 \n\t" 283
122 284 " mov %[sadv], %[h], lsl #3 \n\t"
123 " mov %[y], #0 \n\t" 285 " add %[sadv], %[sadv], %[sjmp], lsl #1\n\t"
124 " mov %[x], #0 \n\t" 286
125 AP"loop: \n\t" 287 " mov %[y], #0 \n\t"
126 " vld1.u32 d0, [%[s1]] \n\t" 288 " mov %[x], #0 \n\t"
127 " vld1.u32 d1, [%[s2]] \n\t" 289 AP"loop: \n\t"
128 " add %[x], #2 \n\t" 290 " vld1.u32 d0, [%[s1]] \n\t"
129 " add %[s1], %[sadv] \n\t" 291 " vld1.u32 d1, [%[s2]] \n\t"
130 " add %[s2], %[sadv] \n\t" 292 " add %[x], #2 \n\t"
131 " vtrn.u32 d0, d1 \n\t" 293 " add %[s1], %[sadv] \n\t"
132 " cmp %[x], %[w] \n\t" 294 " add %[s2], %[sadv] \n\t"
133 " vst1.u32 d1, [%[d1]]! \n\t" 295 " vtrn.u32 d0, d1 \n\t"
134 " vst1.u32 d0, [%[d2]]! \n\t" 296 " cmp %[x], %[w] \n\t"
135 " blt "AP"loop \n\t" 297 " vst1.u32 d1, [%[d1]]! \n\t"
136 298 " vst1.u32 d0, [%[d2]]! \n\t"
137 " mov %[x], #0 \n\t" 299 " blt "AP"loop \n\t"
138 " add %[d1], %[djmp] \n\t" 300
139 " add %[d1], %[w], lsl #2 \n\t" 301 " mov %[x], #0 \n\t"
140 " add %[d2], %[djmp] \n\t" 302 " add %[d1], %[djmp] \n\t"
141 " add %[d2], %[w], lsl #2 \n\t" 303 " add %[d1], %[d1], %[w], lsl #2 \n\t"
142 304 " add %[d2], %[djmp] \n\t"
143 " mov %[s1], %[src] \n\t" 305 " add %[d2], %[d2], %[w], lsl #2 \n\t"
144 " add %[s1], %[h], lsl #2 \n\t" 306
145 " sub %[s1], %[y], lsl #2 \n\t" 307 " mov %[s1], %[src] \n\t"
146 " sub %[s1], #16 \n\t" 308 " add %[s1], %[s1], %[h], lsl #2 \n\t"
147 309 " sub %[s1], %[s1], %[y], lsl #2 \n\t"
148 " add %[s2], %[s1], %[h], lsl #2 \n\t" 310 " sub %[s1], #16 \n\t"
149 " add %[s2], %[sjmp], lsl #2 \n\t" 311
150 312 " add %[s2], %[s1], %[h], lsl #2 \n\t"
151 " add %[y], #2 \n\t" 313 " add %[s2], %[s2], %[sjmp], lsl #2 \n\t"
152 314
153 " cmp %[y], %[h] \n\t" 315 " add %[y], #2 \n\t"
154 " blt "AP"loop \n\t" 316
155 317 " cmp %[y], %[h] \n\t"
156 : // Out 318 " blt "AP"loop \n\t"
157 : [s1] "r" (1), 319
158 [s2] "r" (11), 320 : // Out
159 [d1] "r" (2), 321 : [s1] "r" (1),
160 [d2] "r" (12), 322 [s2] "r" (11),
161 [src] "r" (src), 323 [d1] "r" (2),
162 [dst] "r" (dst), 324 [d2] "r" (12),
163 [x] "r" (3), 325 [src] "r" (src),
164 [y] "r" (4), 326 [dst] "r" (dst),
165 [w] "r" (w), 327 [x] "r" (3),
166 [h] "r" (h), 328 [y] "r" (4),
167 [sadv] "r" (5), 329 [w] "r" (w),
168 [sjmp] "r" (src_jump * 4), 330 [h] "r" (h),
169 [djmp] "r" (dst_jump * 4 * 2) 331 [sadv] "r" (5),
170 : "d0", "d1", "memory", "cc"// Clober 332 [sjmp] "r" (src_jump * 4),
171 333 [djmp] "r" (dst_jump * 4 * 2)
172 334 : "d0", "d1", "memory", "cc"// Clober
173 ); 335
174 } 336
175#undef AP 337 );
176#endif 338 }
339# undef AP
340# endif
341# endif
177 return; 342 return;
178} 343}
179#endif 344#endif
@@ -448,7 +613,7 @@ evas_common_convert_rgba_to_32bpp_rgb_666(DATA32 *src, DATA8 *dst, int src_jump,
448 613
449 CONVERT_LOOP_START_ROT_0(); 614 CONVERT_LOOP_START_ROT_0();
450 615
451 *dst_ptr = 616 *dst_ptr =
452 (((R_VAL(src_ptr) << 12) | (B_VAL(src_ptr) >> 2)) & 0x03f03f) | 617 (((R_VAL(src_ptr) << 12) | (B_VAL(src_ptr) >> 2)) & 0x03f03f) |
453 ((G_VAL(src_ptr) << 4) & 0x000fc0); 618 ((G_VAL(src_ptr) << 4) & 0x000fc0);
454 619
diff --git a/libraries/evas/src/lib/engines/common/evas_convert_yuv.c b/libraries/evas/src/lib/engines/common/evas_convert_yuv.c
index a0d155c..000cb01 100644
--- a/libraries/evas/src/lib/engines/common/evas_convert_yuv.c
+++ b/libraries/evas/src/lib/engines/common/evas_convert_yuv.c
@@ -1091,7 +1091,7 @@ _evas_nv12tiledtorgb_raster(unsigned char **yuv, unsigned char *rgb, int w, int
1091 const int offset_value[2] = { 0, 64 * 16 }; 1091 const int offset_value[2] = { 0, 64 * 16 };
1092 int mb_x, mb_y, mb_w, mb_h; 1092 int mb_x, mb_y, mb_w, mb_h;
1093 int base_h; 1093 int base_h;
1094 int uv_x, uv_y, uv_step; 1094 int uv_x, uv_step;
1095 int stride; 1095 int stride;
1096 1096
1097 /* Idea iterate over each macroblock and convert each of them using _evas_nv12torgb_raster */ 1097 /* Idea iterate over each macroblock and convert each of them using _evas_nv12torgb_raster */
@@ -1128,7 +1128,7 @@ _evas_nv12tiledtorgb_raster(unsigned char **yuv, unsigned char *rgb, int w, int
1128 base_h = (mb_h >> 1) + (mb_h & 0x1); 1128 base_h = (mb_h >> 1) + (mb_h & 0x1);
1129 stride = w * sizeof (int); 1129 stride = w * sizeof (int);
1130 1130
1131 uv_x = 0; uv_y = 0; 1131 uv_x = 0;
1132 1132
1133 /* In this format we linearize macroblock on two line to form a Z and it's invert */ 1133 /* In this format we linearize macroblock on two line to form a Z and it's invert */
1134 for (mb_y = 0; mb_y < (mb_h >> 1); mb_y++) 1134 for (mb_y = 0; mb_y < (mb_h >> 1); mb_y++)
diff --git a/libraries/evas/src/lib/engines/common/evas_cpu.c b/libraries/evas/src/lib/engines/common/evas_cpu.c
index cff8b2b..fe90c5b 100644
--- a/libraries/evas/src/lib/engines/common/evas_cpu.c
+++ b/libraries/evas/src/lib/engines/common/evas_cpu.c
@@ -74,6 +74,7 @@ evas_common_cpu_sse3_test(void)
74#endif 74#endif
75} 75}
76 76
77#ifdef BUILD_ALTIVEC
77void 78void
78evas_common_cpu_altivec_test(void) 79evas_common_cpu_altivec_test(void)
79{ 80{
@@ -85,6 +86,7 @@ evas_common_cpu_altivec_test(void)
85#endif /* __VEC__ */ 86#endif /* __VEC__ */
86#endif /* __POWERPC__ */ 87#endif /* __POWERPC__ */
87} 88}
89#endif /* BUILD_ALTIVEC */
88 90
89void 91void
90evas_common_cpu_neon_test(void) 92evas_common_cpu_neon_test(void)
@@ -177,6 +179,7 @@ evas_common_cpu_init(void)
177#endif /* BUILD_SSE3 */ 179#endif /* BUILD_SSE3 */
178#endif /* BUILD_SSE */ 180#endif /* BUILD_SSE */
179#endif /* BUILD_MMX */ 181#endif /* BUILD_MMX */
182#ifdef BUILD_ALTIVEC
180#ifdef __POWERPC__ 183#ifdef __POWERPC__
181#ifdef __VEC__ 184#ifdef __VEC__
182 cpu_feature_mask |= CPU_FEATURE_ALTIVEC * 185 cpu_feature_mask |= CPU_FEATURE_ALTIVEC *
@@ -186,6 +189,7 @@ evas_common_cpu_init(void)
186 cpu_feature_mask &= ~CPU_FEATURE_ALTIVEC; 189 cpu_feature_mask &= ~CPU_FEATURE_ALTIVEC;
187#endif /* __VEC__ */ 190#endif /* __VEC__ */
188#endif /* __POWERPC__ */ 191#endif /* __POWERPC__ */
192#endif /* BUILD_ALTIVEC */
189#ifdef __SPARC__ 193#ifdef __SPARC__
190 cpu_feature_mask |= CPU_FEATURE_VIS * 194 cpu_feature_mask |= CPU_FEATURE_VIS *
191 evas_common_cpu_feature_test(evas_common_cpu_vis_test); 195 evas_common_cpu_feature_test(evas_common_cpu_vis_test);
diff --git a/libraries/evas/src/lib/engines/common/evas_draw_main.c b/libraries/evas/src/lib/engines/common/evas_draw_main.c
index 7652708..def19a8 100644
--- a/libraries/evas/src/lib/engines/common/evas_draw_main.c
+++ b/libraries/evas/src/lib/engines/common/evas_draw_main.c
@@ -75,6 +75,14 @@ evas_common_draw_context_free(RGBA_Draw_Context *dc)
75{ 75{
76 if (!dc) return; 76 if (!dc) return;
77 77
78#ifdef HAVE_PIXMAN
79 if (dc->col.pixman_color_image)
80 {
81 pixman_image_unref(dc->col.pixman_color_image);
82 dc->col.pixman_color_image = NULL;
83 }
84#endif
85
78 evas_common_draw_context_apply_clean_cutouts(&dc->cutout); 86 evas_common_draw_context_apply_clean_cutouts(&dc->cutout);
79 free(dc); 87 free(dc);
80} 88}
@@ -133,6 +141,20 @@ evas_common_draw_context_set_color(RGBA_Draw_Context *dc, int r, int g, int b, i
133 G_VAL(&(dc->col.col)) = (DATA8)g; 141 G_VAL(&(dc->col.col)) = (DATA8)g;
134 B_VAL(&(dc->col.col)) = (DATA8)b; 142 B_VAL(&(dc->col.col)) = (DATA8)b;
135 A_VAL(&(dc->col.col)) = (DATA8)a; 143 A_VAL(&(dc->col.col)) = (DATA8)a;
144#ifdef HAVE_PIXMAN
145 if (dc && dc->col.pixman_color_image)
146 pixman_image_unref(dc->col.pixman_color_image);
147
148 pixman_color_t pixman_color;
149
150 pixman_color.alpha = (dc->col.col & 0xff000000) >> 16;
151 pixman_color.red = (dc->col.col & 0x00ff0000) >> 8;
152 pixman_color.green = (dc->col.col & 0x0000ff00);
153 pixman_color.blue = (dc->col.col & 0x000000ff) << 8;
154
155 dc->col.pixman_color_image = pixman_image_create_solid_fill(&pixman_color);
156#endif
157
136} 158}
137 159
138EAPI void 160EAPI void
@@ -159,12 +181,42 @@ evas_common_draw_context_set_mask(RGBA_Draw_Context *dc, RGBA_Image *mask, int x
159 dc->mask.y = y; 181 dc->mask.y = y;
160 dc->mask.w = w; 182 dc->mask.w = w;
161 dc->mask.h = h; 183 dc->mask.h = h;
184
185#ifdef HAVE_PIXMAN
186 if (mask->pixman.im)
187 pixman_image_unref(mask->pixman.im);
188
189 if (mask->cache_entry.flags.alpha)
190 {
191 mask->pixman.im = pixman_image_create_bits(PIXMAN_a8r8g8b8, w, h,
192 (uint32_t *)mask->mask.mask,
193 w * 4);
194 }
195 else
196 {
197 mask->pixman.im = pixman_image_create_bits(PIXMAN_x8r8g8b8, w, h,
198 (uint32_t *)mask->mask.mask,
199 w * 4);
200 }
201#endif
202
162} 203}
163 204
164EAPI void 205EAPI void
165evas_common_draw_context_unset_mask(RGBA_Draw_Context *dc) 206evas_common_draw_context_unset_mask(RGBA_Draw_Context *dc)
166{ 207{
167 dc->mask.mask = NULL; 208 dc->mask.mask = NULL;
209
210#ifdef HAVE_PIXMAN
211 RGBA_Image *mask;
212 mask = (RGBA_Image *)dc->mask.mask;
213
214 if (mask && mask->pixman.im)
215 {
216 pixman_image_unref(mask->pixman.im);
217 mask->pixman.im = NULL;
218 }
219#endif
168} 220}
169 221
170 222
@@ -179,32 +231,32 @@ evas_common_draw_context_add_cutout(RGBA_Draw_Context *dc, int x, int y, int w,
179 { 231 {
180#if 1 // this is a bit faster 232#if 1 // this is a bit faster
181 int xa1, xa2, xb1, xb2; 233 int xa1, xa2, xb1, xb2;
182 234
183 xa1 = x; 235 xa1 = x;
184 xa2 = xa1 + w - 1; 236 xa2 = xa1 + w - 1;
185 xb1 = dc->clip.x; 237 xb1 = dc->clip.x;
186 if (xa2 < xb1) return; 238 if (xa2 < xb1) return;
187 xb2 = xb1 + dc->clip.w - 1; 239 xb2 = xb1 + dc->clip.w - 1;
188 if (xa1 >= xb2) return; 240 if (xa1 >= xb2) return;
189 if (xa2 > xb2) xa2 = xb2; 241 if (xa2 > xb2) xa2 = xb2;
190 if (xb1 > xa1) xa1 = xb1; 242 if (xb1 > xa1) xa1 = xb1;
191 x = xa1; 243 x = xa1;
192 w = xa2 - xa1 + 1; 244 w = xa2 - xa1 + 1;
193 245
194 xa1 = y; 246 xa1 = y;
195 xa2 = xa1 + h - 1; 247 xa2 = xa1 + h - 1;
196 xb1 = dc->clip.y; 248 xb1 = dc->clip.y;
197 if (xa2 < xb1) return; 249 if (xa2 < xb1) return;
198 xb2 = xb1 + dc->clip.h - 1; 250 xb2 = xb1 + dc->clip.h - 1;
199 if (xa1 >= xb2) return; 251 if (xa1 >= xb2) return;
200 if (xa2 > xb2) xa2 = xb2; 252 if (xa2 > xb2) xa2 = xb2;
201 if (xb1 > xa1) xa1 = xb1; 253 if (xb1 > xa1) xa1 = xb1;
202 y = xa1; 254 y = xa1;
203 h = xa2 - xa1 + 1; 255 h = xa2 - xa1 + 1;
204#else 256#else
205 RECTS_CLIP_TO_RECT(x, y, w, h, 257 RECTS_CLIP_TO_RECT(x, y, w, h,
206 dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h); 258 dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h);
207#endif 259#endif
208 if ((w < 1) || (h < 1)) return; 260 if ((w < 1) || (h < 1)) return;
209 } 261 }
210 evas_common_draw_context_cutouts_add(&dc->cutout, x, y, w, h); 262 evas_common_draw_context_cutouts_add(&dc->cutout, x, y, w, h);
@@ -513,7 +565,7 @@ evas_common_draw_context_apply_cutouts(RGBA_Draw_Context *dc)
513 565
514 if (!dc->clip.use) return NULL; 566 if (!dc->clip.use) return NULL;
515 if ((dc->clip.w <= 0) || (dc->clip.h <= 0)) return NULL; 567 if ((dc->clip.w <= 0) || (dc->clip.h <= 0)) return NULL;
516 568
517 569
518 res = evas_common_draw_context_cutouts_new(); 570 res = evas_common_draw_context_cutouts_new();
519 evas_common_draw_context_cutouts_add(res, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h); 571 evas_common_draw_context_cutouts_add(res, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h);
diff --git a/libraries/evas/src/lib/engines/common/evas_font_draw.c b/libraries/evas/src/lib/engines/common/evas_font_draw.c
index 94aa085..638cdfe 100644
--- a/libraries/evas/src/lib/engines/common/evas_font_draw.c
+++ b/libraries/evas/src/lib/engines/common/evas_font_draw.c
@@ -22,7 +22,7 @@
22 22
23static int max_cached_words = WORD_CACHE_NWORDS; 23static int max_cached_words = WORD_CACHE_NWORDS;
24 24
25struct prword 25struct prword
26{ 26{
27 EINA_INLIST; 27 EINA_INLIST;
28 struct cinfo *cinfo; 28 struct cinfo *cinfo;
@@ -34,16 +34,16 @@ struct prword
34 int baseline; 34 int baseline;
35}; 35};
36 36
37struct cinfo 37struct cinfo
38{ 38{
39 FT_UInt index; 39 FT_UInt index;
40 struct 40 struct
41 { 41 {
42 int x, y; 42 int x, y;
43 } pos; 43 } pos;
44 int posx; 44 int posx;
45 RGBA_Font_Glyph *fg; 45 RGBA_Font_Glyph *fg;
46 struct 46 struct
47 { 47 {
48 int w,h; 48 int w,h;
49 int rows; 49 int rows;
@@ -77,11 +77,11 @@ evas_common_font_draw_init(void)
77#ifdef EVAS_FRAME_QUEUING 77#ifdef EVAS_FRAME_QUEUING
78EAPI void 78EAPI void
79evas_common_font_draw_finish(void) 79evas_common_font_draw_finish(void)
80{ 80{
81} 81}
82#endif 82#endif
83 83
84/* 84/*
85 * BiDi handling: We receive the shaped string + other props from text_props, 85 * BiDi handling: We receive the shaped string + other props from text_props,
86 * we need to reorder it so we'll have the visual string (the way we draw) 86 * we need to reorder it so we'll have the visual string (the way we draw)
87 * and then for kerning we have to switch the order of the kerning query (as the prev 87 * and then for kerning we have to switch the order of the kerning query (as the prev
@@ -89,7 +89,7 @@ evas_common_font_draw_finish(void)
89 */ 89 */
90static void 90static void
91evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn __UNUSED__, int x, int y, 91evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font *fn __UNUSED__, int x, int y,
92 const Evas_Text_Props *text_props, RGBA_Gfx_Func func, int ext_x, int ext_y, int ext_w, 92 const Evas_Text_Props *text_props, RGBA_Gfx_Func func, int ext_x, int ext_y, int ext_w,
93 int ext_h, int im_w, int im_h __UNUSED__) 93 int ext_h, int im_w, int im_h __UNUSED__)
94{ 94{
95 DATA32 *im; 95 DATA32 *im;
@@ -136,7 +136,7 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
136 { 136 {
137 xrun -= x + xrun - ext_x - ext_w; 137 xrun -= x + xrun - ext_x - ext_w;
138 } 138 }
139 if (x < ext_x) 139 if (x < ext_x)
140 { 140 {
141 int excess = ext_x - x; 141 int excess = ext_x - x;
142 xstart = excess - 1; 142 xstart = excess - 1;
@@ -244,10 +244,29 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
244 if (j < w) j = w; 244 if (j < w) j = w;
245 h = fg->glyph_out->bitmap.rows; 245 h = fg->glyph_out->bitmap.rows;
246 /* 246 /*
247 if ((fg->glyph_out->bitmap.pixel_mode == ft_pixel_mode_grays) 247 if ((fg->glyph_out->bitmap.pixel_mode == ft_pixel_mode_grays)
248 && (fg->glyph_out->bitmap.num_grays == 256) 248 && (fg->glyph_out->bitmap.num_grays == 256)
249 ) 249 )
250 */ 250 */
251
252#ifdef HAVE_PIXMAN
253# ifdef PIXMAN_FONT
254 int index;
255 DATA32 *font_alpha_buffer;
256 pixman_image_t *font_mask_image;
257
258 font_alpha_buffer = alloca(w * h * sizeof(DATA32));
259 for (index = 0; index < (w * h); index++)
260 font_alpha_buffer[index] = data[index] << 24;
261
262 font_mask_image = pixman_image_create_bits(PIXMAN_a8r8g8b8, w, h,
263 font_alpha_buffer,
264 w * sizeof(DATA32));
265
266 if (!font_mask_image) return;
267# endif
268#endif
269
251 { 270 {
252 if ((j > 0) && (chr_x + w > ext_x)) 271 if ((j > 0) && (chr_x + w > ext_x))
253 { 272 {
@@ -255,44 +274,63 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
255 { 274 {
256 /* ext glyph draw */ 275 /* ext glyph draw */
257 dc->font_ext.func.gl_draw(dc->font_ext.data, 276 dc->font_ext.func.gl_draw(dc->font_ext.data,
258 (void *)dst, 277 (void *)dst,
259 dc, fg, chr_x, 278 dc, fg, chr_x,
260 y - (chr_y - y)); 279 y - (chr_y - y));
261 } 280 }
262 else 281 else
263 { 282 {
264 if ((fg->glyph_out->bitmap.num_grays == 256) && 283 if ((fg->glyph_out->bitmap.num_grays == 256) &&
265 (fg->glyph_out->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY)) 284 (fg->glyph_out->bitmap.pixel_mode == FT_PIXEL_MODE_GRAY))
266 { 285 {
267 for (i = 0; i < h; i++) 286#ifdef HAVE_PIXMAN
287# ifdef PIXMAN_FONT
288 if ((dst->pixman.im) &&
289 (dc->col.pixman_color_image))
290 pixman_image_composite(PIXMAN_OP_OVER,
291 dc->col.pixman_color_image,
292 font_mask_image,
293 dst->pixman.im,
294 chr_x,
295 y - (chr_y - y),
296 0, 0,
297 chr_x,
298 y - (chr_y - y),
299 w, h);
300 else
301# endif
302#endif
268 { 303 {
269 int dx, dy; 304 for (i = 0; i < h; i++)
270 int in_x, in_w; 305 {
271 306 int dx, dy;
272 in_x = 0; 307 int in_x, in_w;
273 in_w = 0; 308
274 dx = chr_x; 309 in_x = 0;
275 dy = y - (chr_y - i - y); 310 in_w = 0;
311 dx = chr_x;
312 dy = y - (chr_y - i - y);
276#ifdef EVAS_SLI 313#ifdef EVAS_SLI
277 if (((dy) % dc->sli.h) == dc->sli.y) 314 if (((dy) % dc->sli.h) == dc->sli.y)
278#endif 315#endif
279 {
280 if ((dx < (ext_x + ext_w)) &&
281 (dy >= (ext_y)) &&
282 (dy < (ext_y + ext_h)))
283 { 316 {
284 if (dx + w > (ext_x + ext_w)) 317 if ((dx < (ext_x + ext_w)) &&
285 in_w += (dx + w) - (ext_x + ext_w); 318 (dy >= (ext_y)) &&
286 if (dx < ext_x) 319 (dy < (ext_y + ext_h)))
287 { 320 {
288 in_w += ext_x - dx; 321 if (dx + w > (ext_x + ext_w))
289 in_x = ext_x - dx; 322 in_w += (dx + w) - (ext_x + ext_w);
290 dx = ext_x; 323 if (dx < ext_x)
291 } 324 {
292 if (in_w < w) 325 in_w += ext_x - dx;
293 { 326 in_x = ext_x - dx;
294 func(NULL, data + (i * j) + in_x, dc->col.col, 327 dx = ext_x;
295 im + (dy * im_w) + dx, w - in_w); 328 }
329 if (in_w < w)
330 {
331 func(NULL, data + (i * j) + in_x, dc->col.col,
332 im + (dy * im_w) + dx, w - in_w);
333 }
296 } 334 }
297 } 335 }
298 } 336 }
@@ -309,7 +347,7 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
309 { 347 {
310 int dx, dy; 348 int dx, dy;
311 int in_x, in_w, end; 349 int in_x, in_w, end;
312 350
313 in_x = 0; 351 in_x = 0;
314 in_w = 0; 352 in_w = 0;
315 dx = chr_x; 353 dx = chr_x;
@@ -333,8 +371,8 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
333 dp++; 371 dp++;
334 } 372 }
335 if ((dx < (ext_x + ext_w)) && 373 if ((dx < (ext_x + ext_w)) &&
336 (dy >= (ext_y)) && 374 (dy >= (ext_y)) &&
337 (dy < (ext_y + ext_h))) 375 (dy < (ext_y + ext_h)))
338 { 376 {
339 if (dx + w > (ext_x + ext_w)) 377 if (dx + w > (ext_x + ext_w))
340 in_w += (dx + w) - (ext_x + ext_w); 378 in_w += (dx + w) - (ext_x + ext_w);
@@ -347,7 +385,7 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
347 if (in_w < w) 385 if (in_w < w)
348 { 386 {
349 func(NULL, tmpbuf + in_x, dc->col.col, 387 func(NULL, tmpbuf + in_x, dc->col.col,
350 im + (dy * im_w) + dx, w - in_w); 388 im + (dy * im_w) + dx, w - in_w);
351 } 389 }
352 } 390 }
353 } 391 }
@@ -356,6 +394,11 @@ evas_common_font_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Font
356 } 394 }
357 } 395 }
358 } 396 }
397#ifdef HAVE_PIXMAN
398# ifdef PIXMAN_FONT
399 pixman_image_unref(font_mask_image);
400# endif
401#endif
359 } 402 }
360 else 403 else
361 break; 404 break;
@@ -573,7 +616,7 @@ evas_font_word_prerender(RGBA_Draw_Context *dc, const Evas_Text_Props *text_prop
573 } 616 }
574 } 617 }
575 } 618 }
576 else 619 else
577 { 620 {
578 im = NULL; 621 im = NULL;
579 } 622 }
@@ -599,7 +642,7 @@ evas_font_word_prerender(RGBA_Draw_Context *dc, const Evas_Text_Props *text_prop
599 { 642 {
600 struct prword *last = (struct prword *)(words->last); 643 struct prword *last = (struct prword *)(words->last);
601 644
602 if (last) 645 if (last)
603 { 646 {
604 if (last->im) free(last->im); 647 if (last->im) free(last->im);
605 if (last->cinfo) free(last->cinfo); 648 if (last->cinfo) free(last->cinfo);
diff --git a/libraries/evas/src/lib/engines/common/evas_font_main.c b/libraries/evas/src/lib/engines/common/evas_font_main.c
index 64b1d5e..7b3dabe 100644
--- a/libraries/evas/src/lib/engines/common/evas_font_main.c
+++ b/libraries/evas/src/lib/engines/common/evas_font_main.c
@@ -39,8 +39,6 @@ evas_common_font_init(void)
39EAPI void 39EAPI void
40evas_common_font_shutdown(void) 40evas_common_font_shutdown(void)
41{ 41{
42 int error;
43
44 if (initialised < 1) return; 42 if (initialised < 1) return;
45 initialised--; 43 initialised--;
46 if (initialised != 0) return; 44 if (initialised != 0) return;
@@ -53,7 +51,7 @@ evas_common_font_shutdown(void)
53 evas_common_font_cache_set(0); 51 evas_common_font_cache_set(0);
54 evas_common_font_flush(); 52 evas_common_font_flush();
55 53
56 error = FT_Done_FreeType(evas_ft_lib); 54 FT_Done_FreeType(evas_ft_lib);
57#ifdef EVAS_FRAME_QUEUING 55#ifdef EVAS_FRAME_QUEUING
58 evas_common_font_draw_finish(); 56 evas_common_font_draw_finish();
59#endif 57#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_image_data.c b/libraries/evas/src/lib/engines/common/evas_image_data.c
index 10b3988..2815ff8 100644
--- a/libraries/evas/src/lib/engines/common/evas_image_data.c
+++ b/libraries/evas/src/lib/engines/common/evas_image_data.c
@@ -1,3 +1,7 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
1#include <assert.h> 5#include <assert.h>
2 6
3#include "evas_common.h" 7#include "evas_common.h"
diff --git a/libraries/evas/src/lib/engines/common/evas_image_load.c b/libraries/evas/src/lib/engines/common/evas_image_load.c
index c7eff3f..21ac5d4 100644
--- a/libraries/evas/src/lib/engines/common/evas_image_load.c
+++ b/libraries/evas/src/lib/engines/common/evas_image_load.c
@@ -1,3 +1,7 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
1#include <sys/types.h> 5#include <sys/types.h>
2#include <sys/stat.h> 6#include <sys/stat.h>
3#include <unistd.h> 7#include <unistd.h>
diff --git a/libraries/evas/src/lib/engines/common/evas_image_main.c b/libraries/evas/src/lib/engines/common/evas_image_main.c
index d4d847c..d2f8c0b 100644
--- a/libraries/evas/src/lib/engines/common/evas_image_main.c
+++ b/libraries/evas/src/lib/engines/common/evas_image_main.c
@@ -145,7 +145,7 @@ _evas_common_rgba_image_new(void)
145#endif 145#endif
146 146
147 evas_common_rgba_image_scalecache_init(&im->cache_entry); 147 evas_common_rgba_image_scalecache_init(&im->cache_entry);
148 148
149 return &im->cache_entry; 149 return &im->cache_entry;
150} 150}
151 151
@@ -161,7 +161,7 @@ _evas_common_rgba_image_delete(Image_Entry *ie)
161 LKD(im->cache_entry.ref_fq_del); 161 LKD(im->cache_entry.ref_fq_del);
162 eina_condition_free(&(im->cache_entry.cond_fq_del)); 162 eina_condition_free(&(im->cache_entry.cond_fq_del));
163# endif 163# endif
164#endif 164#endif
165 evas_common_rgba_image_scalecache_shutdown(&im->cache_entry); 165 evas_common_rgba_image_scalecache_shutdown(&im->cache_entry);
166 if (ie->info.module) evas_module_unref((Evas_Module *)ie->info.module); 166 if (ie->info.module) evas_module_unref((Evas_Module *)ie->info.module);
167 /* memset the image to 0x99 because i recently saw a segv where an 167 /* memset the image to 0x99 because i recently saw a segv where an
@@ -173,13 +173,13 @@ _evas_common_rgba_image_delete(Image_Entry *ie)
173// memset(im, 0x99, sizeof(im)); 173// memset(im, 0x99, sizeof(im));
174#ifdef EVAS_CSERVE 174#ifdef EVAS_CSERVE
175 if (ie->data1) evas_cserve_image_free(ie); 175 if (ie->data1) evas_cserve_image_free(ie);
176#endif 176#endif
177/* 177/*
178 * FIXME: This doesn't seem to be needed... But I'm not sure why. 178 * FIXME: This doesn't seem to be needed... But I'm not sure why.
179 * -- nash 179 * -- nash
180 { 180 {
181 Filtered_Image *fi; 181 Filtered_Image *fi;
182 182
183 EINA_LIST_FREE(im->filtered, fi) 183 EINA_LIST_FREE(im->filtered, fi)
184 { 184 {
185 free(fi->key); 185 free(fi->key);
@@ -249,8 +249,8 @@ evas_common_rgba_image_unload(Image_Entry *ie)
249#endif 249#endif
250 return; 250 return;
251 } 251 }
252#endif 252#endif
253 253
254 if (im->image.data && !im->image.no_free) 254 if (im->image.data && !im->image.no_free)
255 free(im->image.data); 255 free(im->image.data);
256 im->image.data = NULL; 256 im->image.data = NULL;
@@ -266,18 +266,19 @@ void
266_evas_common_rgba_image_post_surface(Image_Entry *ie) 266_evas_common_rgba_image_post_surface(Image_Entry *ie)
267{ 267{
268#ifdef HAVE_PIXMAN 268#ifdef HAVE_PIXMAN
269 RGBA_Image *im = (RGBA_Image *) ie; 269# ifdef PIXMAN_IMAGE
270 270 RGBA_Image *im = (RGBA_Image *)ie;
271
271 if (im->pixman.im) pixman_image_unref(im->pixman.im); 272 if (im->pixman.im) pixman_image_unref(im->pixman.im);
272 if (im->cache_entry.flags.alpha) 273 if (im->cache_entry.flags.alpha)
273 { 274 {
274 im->pixman.im = pixman_image_create_bits 275 im->pixman.im = pixman_image_create_bits
275 ( 276 (
276// FIXME: endianess determines this 277// FIXME: endianess determines this
277 PIXMAN_a8r8g8b8, 278 PIXMAN_a8r8g8b8,
278// PIXMAN_b8g8r8a8, 279// PIXMAN_b8g8r8a8,
279 im->cache_entry.w, im->cache_entry.h, 280 im->cache_entry.w, im->cache_entry.h,
280 im->image.data, 281 im->image.data,
281 im->cache_entry.w * 4 282 im->cache_entry.w * 4
282 ); 283 );
283 } 284 }
@@ -285,16 +286,19 @@ _evas_common_rgba_image_post_surface(Image_Entry *ie)
285 { 286 {
286 im->pixman.im = pixman_image_create_bits 287 im->pixman.im = pixman_image_create_bits
287 ( 288 (
288// FIXME: endianess determines this 289// FIXME: endianess determines this
289 PIXMAN_x8r8g8b8, 290 PIXMAN_x8r8g8b8,
290// PIXMAN_b8g8r8x8, 291// PIXMAN_b8g8r8x8,
291 im->cache_entry.w, im->cache_entry.h, 292 im->cache_entry.w, im->cache_entry.h,
292 im->image.data, 293 im->image.data,
293 im->cache_entry.w * 4 294 im->cache_entry.w * 4
294 ); 295 );
295 } 296 }
297# else
298 (void)ie;
299# endif
296#else 300#else
297 ie = NULL; 301 (void)ie;
298#endif 302#endif
299} 303}
300 304
@@ -306,7 +310,7 @@ _evas_common_rgba_image_surface_alloc(Image_Entry *ie, unsigned int w, unsigned
306 310
307#ifdef EVAS_CSERVE 311#ifdef EVAS_CSERVE
308 if (ie->data1) return 0; 312 if (ie->data1) return 0;
309#endif 313#endif
310 if (im->image.no_free) return 0; 314 if (im->image.no_free) return 0;
311 315
312 if (im->flags & RGBA_IMAGE_ALPHA_ONLY) 316 if (im->flags & RGBA_IMAGE_ALPHA_ONLY)
@@ -328,7 +332,7 @@ _evas_common_rgba_image_surface_alloc(Image_Entry *ie, unsigned int w, unsigned
328# endif 332# endif
329#endif 333#endif
330 _evas_common_rgba_image_post_surface(ie); 334 _evas_common_rgba_image_post_surface(ie);
331 335
332 return 0; 336 return 0;
333} 337}
334 338
@@ -338,12 +342,14 @@ _evas_common_rgba_image_surface_delete(Image_Entry *ie)
338 RGBA_Image *im = (RGBA_Image *) ie; 342 RGBA_Image *im = (RGBA_Image *) ie;
339 343
340#ifdef HAVE_PIXMAN 344#ifdef HAVE_PIXMAN
345# ifdef PIXMAN_IMAGE
341 if (im->pixman.im) 346 if (im->pixman.im)
342 { 347 {
343 pixman_image_unref(im->pixman.im); 348 pixman_image_unref(im->pixman.im);
344 im->pixman.im = NULL; 349 im->pixman.im = NULL;
345 } 350 }
346#endif 351# endif
352#endif
347 if (ie->file) 353 if (ie->file)
348 DBG("unload: [%p] %s %s", ie, ie->file, ie->key); 354 DBG("unload: [%p] %s %s", ie, ie->file, ie->key);
349 if ((im->cs.data) && (im->image.data)) 355 if ((im->cs.data) && (im->image.data))
@@ -364,7 +370,7 @@ _evas_common_rgba_image_surface_delete(Image_Entry *ie)
364#ifdef EVAS_CSERVE 370#ifdef EVAS_CSERVE
365 else if (ie->data1) 371 else if (ie->data1)
366 evas_cserve_image_free(ie); 372 evas_cserve_image_free(ie);
367#endif 373#endif
368 374
369 im->image.data = NULL; 375 im->image.data = NULL;
370 ie->allocated.w = 0; 376 ie->allocated.w = 0;
@@ -391,7 +397,7 @@ _evas_common_rgba_image_dirty_region(Image_Entry* ie, unsigned int x __UNUSED__,
391 397
392#ifdef EVAS_CSERVE 398#ifdef EVAS_CSERVE
393 if (ie->data1) evas_cserve_image_free(ie); 399 if (ie->data1) evas_cserve_image_free(ie);
394#endif 400#endif
395 im->flags |= RGBA_IMAGE_IS_DIRTY; 401 im->flags |= RGBA_IMAGE_IS_DIRTY;
396 evas_common_rgba_image_scalecache_dirty(&im->cache_entry); 402 evas_common_rgba_image_scalecache_dirty(&im->cache_entry);
397} 403}
@@ -411,13 +417,13 @@ _evas_common_rgba_image_dirty(Image_Entry *ie_dst, const Image_Entry *ie_src)
411 { 417 {
412#ifdef EVAS_CSERVE 418#ifdef EVAS_CSERVE
413 if (ie_src->data1) evas_cserve_image_free((Image_Entry*) ie_src); 419 if (ie_src->data1) evas_cserve_image_free((Image_Entry*) ie_src);
414#endif 420#endif
415 return 1; 421 return 1;
416 } 422 }
417 423
418#ifdef EVAS_CSERVE 424#ifdef EVAS_CSERVE
419 if (ie_src->data1) evas_cserve_image_free((Image_Entry*) ie_src); 425 if (ie_src->data1) evas_cserve_image_free((Image_Entry*) ie_src);
420#endif 426#endif
421 evas_common_image_colorspace_normalize(src); 427 evas_common_image_colorspace_normalize(src);
422 evas_common_image_colorspace_normalize(dst); 428 evas_common_image_colorspace_normalize(dst);
423/* evas_common_blit_rectangle(src, dst, 0, 0, src->cache_entry.w, src->cache_entry.h, 0, 0); */ 429/* evas_common_blit_rectangle(src, dst, 0, 0, src->cache_entry.w, src->cache_entry.h, 0, 0); */
@@ -431,18 +437,18 @@ _evas_common_rgba_image_ram_usage(Image_Entry *ie)
431{ 437{
432 RGBA_Image *im = (RGBA_Image *)ie; 438 RGBA_Image *im = (RGBA_Image *)ie;
433 int size = sizeof(struct _RGBA_Image); 439 int size = sizeof(struct _RGBA_Image);
434 440
435 if (ie->cache_key) size += strlen(ie->cache_key); 441 if (ie->cache_key) size += strlen(ie->cache_key);
436 if (ie->file) size += strlen(ie->file); 442 if (ie->file) size += strlen(ie->file);
437 if (ie->key) size += strlen(ie->key); 443 if (ie->key) size += strlen(ie->key);
438 444
439 if (im->image.data) 445 if (im->image.data)
440 { 446 {
441#ifdef EVAS_CSERVE 447#ifdef EVAS_CSERVE
442 if ((!im->image.no_free) || (ie->data1)) 448 if ((!im->image.no_free) || (ie->data1))
443#else 449#else
444 if ((!im->image.no_free)) 450 if ((!im->image.no_free))
445#endif 451#endif
446 size += im->cache_entry.w * im->cache_entry.h * sizeof(DATA32); 452 size += im->cache_entry.w * im->cache_entry.h * sizeof(DATA32);
447 } 453 }
448 size += evas_common_rgba_image_scalecache_usage_get(&im->cache_entry); 454 size += evas_common_rgba_image_scalecache_usage_get(&im->cache_entry);
@@ -590,7 +596,7 @@ evas_common_image_colorspace_normalize(RGBA_Image *im)
590 { 596 {
591#ifdef EVAS_CSERVE 597#ifdef EVAS_CSERVE
592 if (((Image_Entry *)im)->data1) evas_cserve_image_free(&im->cache_entry); 598 if (((Image_Entry *)im)->data1) evas_cserve_image_free(&im->cache_entry);
593#endif 599#endif
594 if (!im->image.no_free) free(im->image.data); 600 if (!im->image.no_free) free(im->image.data);
595 im->image.data = im->cs.data; 601 im->image.data = im->cs.data;
596 im->cs.no_free = im->image.no_free; 602 im->cs.no_free = im->image.no_free;
diff --git a/libraries/evas/src/lib/engines/common/evas_image_scalecache.c b/libraries/evas/src/lib/engines/common/evas_image_scalecache.c
index 24a4f2d..e4e4790 100644
--- a/libraries/evas/src/lib/engines/common/evas_image_scalecache.c
+++ b/libraries/evas/src/lib/engines/common/evas_image_scalecache.c
@@ -48,9 +48,7 @@ struct _Scaleitem
48#ifdef SCALECACHE 48#ifdef SCALECACHE
49static unsigned long long use_counter = 0; 49static unsigned long long use_counter = 0;
50 50
51#ifdef BUILD_PTHREAD
52static LK(cache_lock); 51static LK(cache_lock);
53#endif
54static Eina_Inlist *cache_list = NULL; 52static Eina_Inlist *cache_list = NULL;
55static unsigned int cache_size = 0; 53static unsigned int cache_size = 0;
56static int init = 0; 54static int init = 0;
diff --git a/libraries/evas/src/lib/engines/common/evas_line_main.c b/libraries/evas/src/lib/engines/common/evas_line_main.c
index 04401cb..aacf805 100644
--- a/libraries/evas/src/lib/engines/common/evas_line_main.c
+++ b/libraries/evas/src/lib/engines/common/evas_line_main.c
@@ -109,9 +109,24 @@ _evas_draw_point(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y)
109 return; 109 return;
110 if ((dc->clip.use) && (!IN_RECT(x, y, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h))) 110 if ((dc->clip.use) && (!IN_RECT(x, y, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h)))
111 return; 111 return;
112 pfunc = evas_common_gfx_func_composite_color_pt_get(dc->col.col, dst, dc->render_op); 112#ifdef HAVE_PIXMAN
113 if (pfunc) 113# ifdef PIXMAN_LINE
114 pfunc(0, 255, dc->col.col, dst->image.data + (dst->cache_entry.w * y) + x); 114 pixman_op_t op = PIXMAN_OP_SRC;
115
116 if (dc->render_op == _EVAS_RENDER_BLEND)
117 op = PIXMAN_OP_OVER;
118
119 if ((dst->pixman.im) && (dc->col.pixman_color_image))
120 pixman_image_composite(op, dc->col.pixman_color_image, NULL,
121 dst->pixman.im, x, y, 0, 0, x, y, 1, 1);
122 else
123# endif
124#endif
125 {
126 pfunc = evas_common_gfx_func_composite_color_pt_get(dc->col.col, dst, dc->render_op);
127 if (pfunc)
128 pfunc(0, 255, dc->col.col, dst->image.data + (dst->cache_entry.w * y) + x);
129 }
115} 130}
116 131
117/* 132/*
@@ -130,6 +145,14 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
130 RGBA_Gfx_Pt_Func pfunc; 145 RGBA_Gfx_Pt_Func pfunc;
131 RGBA_Gfx_Func sfunc; 146 RGBA_Gfx_Func sfunc;
132 147
148#ifdef HAVE_PIXMAN
149# ifdef PIXMAN_LINE
150 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
151 if (dc->render_op == _EVAS_RENDER_BLEND)
152 op = PIXMAN_OP_OVER;
153# endif
154#endif
155
133 dstw = dst->cache_entry.w; 156 dstw = dst->cache_entry.w;
134 color = dc->col.col; 157 color = dc->col.col;
135 158
@@ -172,12 +195,30 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
172 195
173 len = x1 - x0 + 1; 196 len = x1 - x0 + 1;
174 p = dst->image.data + (dstw * y0) + x0; 197 p = dst->image.data + (dstw * y0) + x0;
175 sfunc = evas_common_gfx_func_composite_color_span_get(color, dst, len, dc->render_op); 198#ifdef HAVE_PIXMAN
176 if (sfunc) 199# ifdef PIXMAN_LINE
177 sfunc(NULL, NULL, color, p, len); 200 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
178 } 201 (!dc->mask.mask))
179 } 202 pixman_image_composite(op, dc->col.pixman_color_image,
180 return; 203 NULL, dst->pixman.im,
204 x0, y0, 0, 0, x0, y0, len, 1);
205 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
206 (dc->mask.mask))
207 pixman_image_composite(op, dc->col.pixman_color_image,
208 dc->mask.mask->pixman.im,
209 dst->pixman.im,
210 x0, y0, 0, 0, x0, y0, len, 1);
211 else
212# endif
213#endif
214 {
215 sfunc = evas_common_gfx_func_composite_color_span_get(color, dst, len, dc->render_op);
216 if (sfunc)
217 sfunc(NULL, NULL, color, p, len);
218 }
219 }
220 }
221 return;
181 } 222 }
182 223
183 pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, dc->render_op); 224 pfunc = evas_common_gfx_func_composite_color_pt_get(color, dst, dc->render_op);
@@ -192,17 +233,34 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
192 233
193 len = y1 - y0 + 1; 234 len = y1 - y0 + 1;
194 p = dst->image.data + (dstw * y0) + x0; 235 p = dst->image.data + (dstw * y0) + x0;
195 while (len--) 236#ifdef HAVE_PIXMAN
196 { 237# ifdef PIXMAN_LINE
238 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
239 (!dc->mask.mask))
240 pixman_image_composite(op, dc->col.pixman_color_image,
241 NULL, dst->pixman.im,
242 x0, y0, 0, 0, x0, y0, 1, len);
243 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
244 (dc->mask.mask))
245 pixman_image_composite(op, dc->col.pixman_color_image,
246 dc->mask.mask->pixman.im, dst->pixman.im,
247 x0, y0, 0, 0, x0, y0, 1, len);
248 else
249# endif
250#endif
251 {
252 while (len--)
253 {
197#ifdef EVAS_SLI 254#ifdef EVAS_SLI
198 if (((y1 + 1 - len) % dc->sli.h) == dc->sli.y) 255 if (((y1 + 1 - len) % dc->sli.h) == dc->sli.y)
199#endif 256#endif
200 { 257 {
201 pfunc(0, 255, color, p); 258 pfunc(0, 255, color, p);
202 } 259 }
203 p += dstw; 260 p += dstw;
204 } 261 }
205 } 262 }
263 }
206 return; 264 return;
207 } 265 }
208 266
@@ -281,16 +339,52 @@ _evas_draw_simple_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, i
281 if (dx > 0) dstw--; 339 if (dx > 0) dstw--;
282 else dstw++; 340 else dstw++;
283 } 341 }
284 342#ifdef HAVE_PIXMAN
343# ifdef PIXMAN_LINE
344 int pixman_x_position = x0;
345 int pixman_y_position = y0;
346 int x_unit = dstw - dst->cache_entry.w;
347# endif
348#endif
349
350
285 while (len--) 351 while (len--)
286 { 352 {
287#ifdef EVAS_SLI 353#ifdef EVAS_SLI
288 if (((y1 + 1 - len) % dc->sli.h) == dc->sli.y) 354 if (((y1 + 1 - len) % dc->sli.h) == dc->sli.y)
289#endif 355#endif
290 { 356 {
291 pfunc(0, 255, color, p); 357#ifdef HAVE_PIXMAN
292 } 358# ifdef PIXMAN_LINE
293 p += dstw; 359 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
360 (!dc->mask.mask))
361 pixman_image_composite(op, dc->col.pixman_color_image,
362 NULL, dst->pixman.im,
363 pixman_x_position,
364 pixman_y_position,
365 0, 0, pixman_x_position,
366 pixman_y_position, 1, 1);
367 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
368 (dc->mask.mask))
369 pixman_image_composite(op, dc->col.pixman_color_image,
370 dc->mask.mask->pixman.im,
371 dst->pixman.im,
372 pixman_x_position,
373 pixman_y_position, 0, 0,
374 pixman_x_position,
375 pixman_y_position, 1, 1);
376 else
377# endif
378#endif
379 pfunc(0, 255, color, p);
380 }
381#ifdef HAVE_PIXMAN
382# ifdef PIXMAN_LINE
383 pixman_x_position += x_unit;
384 pixman_y_position += 1;
385# endif
386#endif
387 p += dstw;
294 } 388 }
295 } 389 }
296} 390}
@@ -456,6 +550,31 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1,
456 dx = x1 - x0; 550 dx = x1 - x0;
457 dy = y1 - y0; 551 dy = y1 - y0;
458 552
553#ifdef HAVE_PIXMAN
554# ifdef PIXMAN_LINE
555 int pix_x;
556 int pix_y;
557 int pix_x_unit;
558 int pix_y_unit;
559
560 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
561 if (dc->render_op == _EVAS_RENDER_BLEND)
562 op = PIXMAN_OP_OVER;
563 pix_x = x0;
564 pix_y = y0;
565
566 if (dx < 0)
567 pix_x_unit = -1;
568 else
569 pix_x_unit = 1;
570
571 if (dy < 0)
572 pix_y_unit = -1;
573 else
574 pix_y_unit = 1;
575# endif
576#endif
577
459 if ( (dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy) ) 578 if ( (dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy) )
460 { 579 {
461 _evas_draw_simple_line(dst, dc, x0, y0, x1, y1); 580 _evas_draw_simple_line(dst, dc, x0, y0, x1, y1);
@@ -494,6 +613,11 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1,
494 prev_y = y; 613 prev_y = y;
495 p += dh; 614 p += dh;
496 py += dely; 615 py += dely;
616#ifdef HAVE_PIXMAN
617# ifdef PIXMAN_LINE
618 pix_y += pix_y_unit;
619# endif
620#endif
497 } 621 }
498 if (!p1_in) 622 if (!p1_in)
499 { 623 {
@@ -509,12 +633,37 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1,
509#endif 633#endif
510 { 634 {
511 if (IN_RANGE(px, py, clw, clh)) 635 if (IN_RANGE(px, py, clw, clh))
512 pfunc(0, 255, color, p); 636 {
513 } 637#ifdef HAVE_PIXMAN
514 next_x: 638# ifdef PIXMAN_LINE
515 yy += dyy; 639 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
516 px++; 640 (!dc->mask.mask))
517 p++; 641 pixman_image_composite(op, dc->col.pixman_color_image,
642 NULL, dst->pixman.im,
643 pix_x, pix_y, 0, 0,
644 pix_x, pix_y, 1, 1);
645 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
646 (dc->mask.mask))
647 pixman_image_composite(op, dc->col.pixman_color_image,
648 dc->mask.mask->pixman.im,
649 dst->pixman.im,
650 pix_x, pix_y, 0, 0,
651 pix_x, pix_y, 1, 1);
652 else
653# endif
654#endif
655 pfunc(0, 255, color, p);
656 }
657 }
658next_x:
659 yy += dyy;
660 px++;
661 p++;
662#ifdef HAVE_PIXMAN
663# ifdef PIXMAN_LINE
664 pix_x += pix_x_unit;
665# endif
666#endif
518 } 667 }
519 return; 668 return;
520 } 669 }
@@ -529,9 +678,14 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1,
529 x += ((xx - (x << 16)) >> 15); 678 x += ((xx - (x << 16)) >> 15);
530 if (prev_x != x) 679 if (prev_x != x)
531 { 680 {
532 prev_x = x; 681 prev_x = x;
533 px += delx; 682 px += delx;
534 p += delx; 683 p += delx;
684#ifdef HAVE_PIXMAN
685# ifdef PIXMAN_LINE
686 pix_x += pix_x_unit;
687# endif
688#endif
535 } 689 }
536 if (!p1_in) 690 if (!p1_in)
537 { 691 {
@@ -547,12 +701,38 @@ _evas_draw_line(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x1,
547#endif 701#endif
548 { 702 {
549 if (IN_RANGE(px, py, clw, clh)) 703 if (IN_RANGE(px, py, clw, clh))
550 pfunc(0, 255, color, p); 704 {
551 } 705#ifdef HAVE_PIXMAN
552 next_y: 706# ifdef PIXMAN_LINE
707 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
708 (!dc->mask.mask))
709 pixman_image_composite(op, dc->col.pixman_color_image,
710 NULL, dst->pixman.im,
711 pix_x, pix_y, 0, 0,
712 pix_x, pix_y, 1, 1);
713 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
714 (dc->mask.mask))
715 pixman_image_composite(op, dc->col.pixman_color_image,
716 dc->mask.mask->pixman.im,
717 dst->pixman.im,
718 pix_x, pix_y, 0, 0,
719 pix_x, pix_y, 1, 1);
720 else
721# endif
722#endif
723 pfunc(0, 255, color, p);
724 }
725 }
726next_y:
553 xx += dxx; 727 xx += dxx;
554 py++; 728 py++;
555 p += dstw; 729 p += dstw;
730#ifdef HAVE_PIXMAN
731# ifdef PIXMAN_LINE
732 pix_y += pix_y_unit;
733# endif
734#endif
735
556 } 736 }
557} 737}
558 738
@@ -568,12 +748,43 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
568 DATA32 *p, *data, color; 748 DATA32 *p, *data, color;
569 RGBA_Gfx_Pt_Func pfunc; 749 RGBA_Gfx_Pt_Func pfunc;
570 750
751 dx = x1 - x0;
752 dy = y1 - y0;
753
754#ifdef HAVE_PIXMAN
755# ifdef PIXMAN_LINE
756 int pix_x;
757 int pix_y;
758 int pix_x_unit;
759 int pix_y_unit;
760
761 pixman_image_t *aa_mask_image;
762 int alpha_data_buffer;
763
764 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
765 if (dc->render_op == _EVAS_RENDER_BLEND)
766 op = PIXMAN_OP_OVER;
767 pix_x = x0;
768 pix_y = y0;
769
770 if (dx < 0)
771 pix_x_unit = -1;
772 else
773 pix_x_unit = 1;
774
775 if (dy < 0)
776 pix_y_unit = -1;
777 else
778 pix_y_unit = 1;
779# endif
780#endif
571 if (y0 > y1) 781 if (y0 > y1)
572 EXCHANGE_POINTS(x0, y0, x1, y1); 782 EXCHANGE_POINTS(x0, y0, x1, y1);
783
573 dx = x1 - x0; 784 dx = x1 - x0;
574 dy = y1 - y0; 785 dy = y1 - y0;
575 786
576 if ( (dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy) ) 787 if ((dx == 0) || (dy == 0) || (dx == dy) || (dx == -dy))
577 { 788 {
578 _evas_draw_simple_line(dst, dc, x0, y0, x1, y1); 789 _evas_draw_simple_line(dst, dc, x0, y0, x1, y1);
579 return; 790 return;
@@ -609,9 +820,14 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
609 y = (yy >> 16); 820 y = (yy >> 16);
610 if (prev_y != y) 821 if (prev_y != y)
611 { 822 {
612 prev_y = y; 823 prev_y = y;
613 p += dh; 824 p += dh;
614 py += dely; 825 py += dely;
826#ifdef HAVE_PIXMAN
827# ifdef PIXMAN_LINE
828 pix_y += pix_y_unit;
829# endif
830#endif
615 } 831 }
616 if (!p1_in) 832 if (!p1_in)
617 { 833 {
@@ -624,39 +840,109 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
624 } 840 }
625 if (px < clw) 841 if (px < clw)
626 { 842 {
627 aa = ((yy - (y << 16)) >> 8); 843 aa = ((yy - (y << 16)) >> 8);
628 if ((py) < clh) 844 if ((py) < clh)
629 pfunc(0, 255 - aa, color, p); 845 {
630 if ((py + 1) < clh) 846#ifdef HAVE_PIXMAN
631 pfunc(0, aa, color, p + dstw); 847# ifdef PIXMAN_LINE
632 } 848 alpha_data_buffer = 255 - aa;
633 849 aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1,
634 next_x: 850 (uint32_t *)&alpha_data_buffer, 4);
635 yy += dyy; 851
636 px++; 852 if ((dst->pixman.im) && (dc->col.pixman_color_image ) &&
637 p++; 853 (!dc->mask.mask))
854 pixman_image_composite(PIXMAN_OP_OVER,
855 dc->col.pixman_color_image,
856 aa_mask_image, dst->pixman.im,
857 pix_x, pix_y, 0, 0,
858 pix_x, pix_y, 1, 1);
859 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
860 (dc->mask.mask) )
861 pixman_image_composite(op, dc->col.pixman_color_image,
862 dc->mask.mask->pixman.im,
863 dst->pixman.im,
864 pix_x, pix_y, 0, 0,
865 pix_x, pix_y, 1, 1);
866 else
867# endif
868#endif
869 pfunc(0, 255 - aa, color, p);
870#ifdef HAVE_PIXMAN
871# ifdef PIXMAN_LINE
872 pixman_image_unref(aa_mask_image);
873# endif
874#endif
875 }
876 if ((py + 1) < clh)
877 {
878#ifdef HAVE_PIXMAN
879# ifdef PIXMAN_LINE
880 alpha_data_buffer = aa;
881 aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1,
882 (uint32_t *)&alpha_data_buffer, 4);
883
884 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
885 (!dc->mask.mask))
886 pixman_image_composite(PIXMAN_OP_OVER,
887 dc->col.pixman_color_image,
888 aa_mask_image, dst->pixman.im,
889 pix_x, pix_y + 1, 0, 0,
890 pix_x, pix_y + 1, 1, 1);
891 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
892 (dc->mask.mask))
893 pixman_image_composite(op, dc->col.pixman_color_image,
894 dc->mask.mask->pixman.im,
895 dst->pixman.im,
896 pix_x, pix_y + 1, 0, 0,
897 pix_x, pix_y + 1, 1, 1);
898 else
899# endif
900#endif
901 pfunc(0, aa, color, p + dstw);
902#ifdef HAVE_PIXMAN
903# ifdef PIXMAN_LINE
904 pixman_image_unref(aa_mask_image);
905# endif
906#endif
907 }
908 }
909
910next_x:
911 yy += dyy;
912 px++;
913 p++;
914#ifdef HAVE_PIXMAN
915# ifdef PIXMAN_LINE
916 pix_x += pix_x_unit;
917# endif
918#endif
638 } 919 }
639 return; 920 return;
640 } 921 }
641 922
642 /* steep: y-parametric */ 923 /* steep: y-parametric */
643 SETUP_LINE_STEEP; 924 SETUP_LINE_STEEP;
644 925
645 while (py < by) 926 while (py < by)
646 { 927 {
647 DATA8 aa; 928 DATA8 aa;
648 929
649 x = (xx >> 16); 930 x = (xx >> 16);
650 if (prev_x != x) 931 if (prev_x != x)
651 { 932 {
652 prev_x = x; 933 prev_x = x;
653 px += delx; 934 px += delx;
654 p += delx; 935 p += delx;
936#ifdef HAVE_PIXMAN
937# ifdef PIXMAN_LINE
938 pix_x += pix_x_unit;
939# endif
940#endif
655 } 941 }
656 if (!p1_in) 942 if (!p1_in)
657 { 943 {
658 if ((px < 0) && (delx < 0)) return; 944 if ((px < 0) && (delx < 0)) return;
659 if ((px > rx) && (delx > 0)) return; 945 if ((px > rx) && (delx > 0)) return;
660 } 946 }
661 if (!p0_in) 947 if (!p0_in)
662 { 948 {
@@ -664,15 +950,80 @@ _evas_draw_line_aa(RGBA_Image *dst, RGBA_Draw_Context *dc, int x0, int y0, int x
664 } 950 }
665 if (py < clh) 951 if (py < clh)
666 { 952 {
667 aa = ((xx - (x << 16)) >> 8); 953 aa = ((xx - (x << 16)) >> 8);
668 if ((px) < clw) 954 if ((px) < clw)
669 pfunc(0, 255 - aa, color, p); 955 {
670 if ((px + 1) < clw) 956#ifdef HAVE_PIXMAN
671 pfunc(0, aa, color, p + 1); 957# ifdef PIXMAN_LINE
672 } 958 alpha_data_buffer = 255 - aa;
959 aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1, (uint32_t *)&alpha_data_buffer, 4);
960
961 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
962 (!dc->mask.mask))
963 pixman_image_composite(PIXMAN_OP_OVER,
964 dc->col.pixman_color_image,
965 aa_mask_image, dst->pixman.im,
966 pix_x, pix_y, 0, 0,
967 pix_x, pix_y, 1, 1);
968 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
969 (dc->mask.mask))
970 pixman_image_composite(op, dc->col.pixman_color_image,
971 dc->mask.mask->pixman.im,
972 dst->pixman.im,
973 pix_x, pix_y, 0, 0,
974 pix_x, pix_y, 1, 1);
975 else
976# endif
977#endif
978 pfunc(0, 255 - aa, color, p);
979#ifdef HAVE_PIXMAN
980# ifdef PIXMAN_LINE
981 pixman_image_unref(aa_mask_image);
982# endif
983#endif
984
985 }
986 if ((px + 1) < clw)
987 {
988#ifdef HAVE_PIXMAN
989# ifdef PIXMAN_LINE
990 alpha_data_buffer = aa;
991 aa_mask_image = pixman_image_create_bits(PIXMAN_a8, 1, 1,
992 (uint32_t *)&alpha_data_buffer, 4);
993
994 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
995 (!dc->mask.mask))
996 pixman_image_composite(PIXMAN_OP_OVER,
997 dc->col.pixman_color_image,
998 aa_mask_image, dst->pixman.im,
999 pix_x + 1, pix_y, 0, 0,
1000 pix_x + 1, pix_y, 1, 1);
1001 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
1002 (dc->mask.mask))
1003 pixman_image_composite(op, dc->col.pixman_color_image,
1004 dc->mask.mask->pixman.im,
1005 dst->pixman.im,
1006 pix_x + 1, pix_y, 0, 0,
1007 pix_x + 1, pix_y, 1, 1);
1008 else
1009# endif
1010#endif
1011 pfunc(0, aa, color, p + 1);
1012#ifdef HAVE_PIXMAN
1013# ifdef PIXMAN_LINE
1014 pixman_image_unref(aa_mask_image);
1015# endif
1016#endif
1017 }
1018 }
673 next_y: 1019 next_y:
674 xx += dxx; 1020 xx += dxx;
675 py++; 1021 py++;
676 p += dstw; 1022 p += dstw;
1023#ifdef HAVE_PIXMAN
1024# ifdef PIXMAN_LINE
1025 pix_y += pix_y_unit;
1026# endif
1027#endif
677 } 1028 }
678} 1029}
diff --git a/libraries/evas/src/lib/engines/common/evas_op_add/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_add/Makefile.in
index 4c721f9..78e893d 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_add/Makefile.in
+++ b/libraries/evas/src/lib/engines/common/evas_op_add/Makefile.in
@@ -166,8 +166,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
167PIXMAN_LIBS = @PIXMAN_LIBS@ 167PIXMAN_LIBS = @PIXMAN_LIBS@
168PKG_CONFIG = @PKG_CONFIG@ 168PKG_CONFIG = @PKG_CONFIG@
169PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
170PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
171PNG_CFLAGS = @PNG_CFLAGS@ 169PNG_CFLAGS = @PNG_CFLAGS@
172PNG_LIBS = @PNG_LIBS@ 170PNG_LIBS = @PNG_LIBS@
173RANLIB = @RANLIB@ 171RANLIB = @RANLIB@
@@ -184,6 +182,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
184VALGRIND_LIBS = @VALGRIND_LIBS@ 182VALGRIND_LIBS = @VALGRIND_LIBS@
185VERSION = @VERSION@ 183VERSION = @VERSION@
186VMAJ = @VMAJ@ 184VMAJ = @VMAJ@
185WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
186WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
187WIN32_CFLAGS = @WIN32_CFLAGS@ 187WIN32_CFLAGS = @WIN32_CFLAGS@
188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
189XCB_CFLAGS = @XCB_CFLAGS@ 189XCB_CFLAGS = @XCB_CFLAGS@
@@ -265,6 +265,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
268evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
269evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
270evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
271evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
268evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 272evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
269evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 273evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
270evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 274evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in
index e796ef2..e00dac8 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in
+++ b/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in
@@ -203,8 +203,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
203PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 203PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
204PIXMAN_LIBS = @PIXMAN_LIBS@ 204PIXMAN_LIBS = @PIXMAN_LIBS@
205PKG_CONFIG = @PKG_CONFIG@ 205PKG_CONFIG = @PKG_CONFIG@
206PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
207PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
208PNG_CFLAGS = @PNG_CFLAGS@ 206PNG_CFLAGS = @PNG_CFLAGS@
209PNG_LIBS = @PNG_LIBS@ 207PNG_LIBS = @PNG_LIBS@
210RANLIB = @RANLIB@ 208RANLIB = @RANLIB@
@@ -221,6 +219,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
221VALGRIND_LIBS = @VALGRIND_LIBS@ 219VALGRIND_LIBS = @VALGRIND_LIBS@
222VERSION = @VERSION@ 220VERSION = @VERSION@
223VMAJ = @VMAJ@ 221VMAJ = @VMAJ@
222WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
223WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
224WIN32_CFLAGS = @WIN32_CFLAGS@ 224WIN32_CFLAGS = @WIN32_CFLAGS@
225WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 225WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
226XCB_CFLAGS = @XCB_CFLAGS@ 226XCB_CFLAGS = @XCB_CFLAGS@
@@ -302,6 +302,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
302evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 302evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
303evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 303evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
304evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 304evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
305evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
306evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
307evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
308evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
305evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 309evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
306evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 310evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
307evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 311evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
index 64d5a86..1843265 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
+++ b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
@@ -53,7 +53,8 @@ _op_blend_c_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32
53static void 53static void
54init_blend_color_span_funcs_sse3(void) 54init_blend_color_span_funcs_sse3(void)
55{ 55{
56 op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_c_dp_sse3; 56// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
57// op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_c_dp_sse3;
57 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_caa_dp_sse3; 58 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_caa_dp_sse3;
58 59
59// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle) 60// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c
index 83230e5..5883d15 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c
+++ b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c
@@ -168,7 +168,8 @@ _op_blend_mas_can_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, i
168static void 168static void
169init_blend_mask_color_span_funcs_sse3(void) 169init_blend_mask_color_span_funcs_sse3(void)
170{ 170{
171 op_blend_span_funcs[SP_N][SM_AS][SC][DP][CPU_SSE3] = _op_blend_mas_c_dp_sse3; 171// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
172// op_blend_span_funcs[SP_N][SM_AS][SC][DP][CPU_SSE3] = _op_blend_mas_c_dp_sse3;
172 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_mas_cn_dp_sse3; 173 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_mas_cn_dp_sse3;
173 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_SSE3] = _op_blend_mas_can_dp_sse3; 174 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_SSE3] = _op_blend_mas_can_dp_sse3;
174 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_SSE3] = _op_blend_mas_caa_dp_sse3; 175 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_SSE3] = _op_blend_mas_caa_dp_sse3;
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c
index 2e72fec..69c597c 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c
+++ b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c
@@ -146,7 +146,6 @@ init_blend_pixel_span_funcs_sse3(void)
146 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pas_dp_sse3; 146 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pas_dp_sse3;
147 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pan_dp_sse3; 147 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pan_dp_sse3;
148 148
149
150// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle) 149// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
151// op_blend_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_p_dpan_sse3; 150// op_blend_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_p_dpan_sse3;
152 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_pas_dpan_sse3; 151 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_pas_dpan_sse3;
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in
index 52658a4..40536c0 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in
@@ -166,8 +166,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
167PIXMAN_LIBS = @PIXMAN_LIBS@ 167PIXMAN_LIBS = @PIXMAN_LIBS@
168PKG_CONFIG = @PKG_CONFIG@ 168PKG_CONFIG = @PKG_CONFIG@
169PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
170PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
171PNG_CFLAGS = @PNG_CFLAGS@ 169PNG_CFLAGS = @PNG_CFLAGS@
172PNG_LIBS = @PNG_LIBS@ 170PNG_LIBS = @PNG_LIBS@
173RANLIB = @RANLIB@ 171RANLIB = @RANLIB@
@@ -184,6 +182,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
184VALGRIND_LIBS = @VALGRIND_LIBS@ 182VALGRIND_LIBS = @VALGRIND_LIBS@
185VERSION = @VERSION@ 183VERSION = @VERSION@
186VMAJ = @VMAJ@ 184VMAJ = @VMAJ@
185WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
186WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
187WIN32_CFLAGS = @WIN32_CFLAGS@ 187WIN32_CFLAGS = @WIN32_CFLAGS@
188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
189XCB_CFLAGS = @XCB_CFLAGS@ 189XCB_CFLAGS = @XCB_CFLAGS@
@@ -265,6 +265,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
268evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
269evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
270evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
271evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
268evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 272evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
269evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 273evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
270evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 274evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/evas_op_mask/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_mask/Makefile.in
index 0ccd7f3..d5764b1 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_mask/Makefile.in
+++ b/libraries/evas/src/lib/engines/common/evas_op_mask/Makefile.in
@@ -166,8 +166,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
167PIXMAN_LIBS = @PIXMAN_LIBS@ 167PIXMAN_LIBS = @PIXMAN_LIBS@
168PKG_CONFIG = @PKG_CONFIG@ 168PKG_CONFIG = @PKG_CONFIG@
169PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
170PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
171PNG_CFLAGS = @PNG_CFLAGS@ 169PNG_CFLAGS = @PNG_CFLAGS@
172PNG_LIBS = @PNG_LIBS@ 170PNG_LIBS = @PNG_LIBS@
173RANLIB = @RANLIB@ 171RANLIB = @RANLIB@
@@ -184,6 +182,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
184VALGRIND_LIBS = @VALGRIND_LIBS@ 182VALGRIND_LIBS = @VALGRIND_LIBS@
185VERSION = @VERSION@ 183VERSION = @VERSION@
186VMAJ = @VMAJ@ 184VMAJ = @VMAJ@
185WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
186WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
187WIN32_CFLAGS = @WIN32_CFLAGS@ 187WIN32_CFLAGS = @WIN32_CFLAGS@
188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
189XCB_CFLAGS = @XCB_CFLAGS@ 189XCB_CFLAGS = @XCB_CFLAGS@
@@ -265,6 +265,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
268evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
269evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
270evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
271evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
268evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 272evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
269evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 273evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
270evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 274evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/evas_op_mul/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_mul/Makefile.in
index f239cf7..d5452fe 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_mul/Makefile.in
+++ b/libraries/evas/src/lib/engines/common/evas_op_mul/Makefile.in
@@ -166,8 +166,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
167PIXMAN_LIBS = @PIXMAN_LIBS@ 167PIXMAN_LIBS = @PIXMAN_LIBS@
168PKG_CONFIG = @PKG_CONFIG@ 168PKG_CONFIG = @PKG_CONFIG@
169PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
170PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
171PNG_CFLAGS = @PNG_CFLAGS@ 169PNG_CFLAGS = @PNG_CFLAGS@
172PNG_LIBS = @PNG_LIBS@ 170PNG_LIBS = @PNG_LIBS@
173RANLIB = @RANLIB@ 171RANLIB = @RANLIB@
@@ -184,6 +182,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
184VALGRIND_LIBS = @VALGRIND_LIBS@ 182VALGRIND_LIBS = @VALGRIND_LIBS@
185VERSION = @VERSION@ 183VERSION = @VERSION@
186VMAJ = @VMAJ@ 184VMAJ = @VMAJ@
185WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
186WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
187WIN32_CFLAGS = @WIN32_CFLAGS@ 187WIN32_CFLAGS = @WIN32_CFLAGS@
188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
189XCB_CFLAGS = @XCB_CFLAGS@ 189XCB_CFLAGS = @XCB_CFLAGS@
@@ -265,6 +265,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
268evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
269evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
270evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
271evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
268evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 272evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
269evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 273evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
270evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 274evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/evas_op_sub/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_sub/Makefile.in
index b68ed3b..4b93b1b 100644
--- a/libraries/evas/src/lib/engines/common/evas_op_sub/Makefile.in
+++ b/libraries/evas/src/lib/engines/common/evas_op_sub/Makefile.in
@@ -166,8 +166,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
167PIXMAN_LIBS = @PIXMAN_LIBS@ 167PIXMAN_LIBS = @PIXMAN_LIBS@
168PKG_CONFIG = @PKG_CONFIG@ 168PKG_CONFIG = @PKG_CONFIG@
169PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
170PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
171PNG_CFLAGS = @PNG_CFLAGS@ 169PNG_CFLAGS = @PNG_CFLAGS@
172PNG_LIBS = @PNG_LIBS@ 170PNG_LIBS = @PNG_LIBS@
173RANLIB = @RANLIB@ 171RANLIB = @RANLIB@
@@ -184,6 +182,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
184VALGRIND_LIBS = @VALGRIND_LIBS@ 182VALGRIND_LIBS = @VALGRIND_LIBS@
185VERSION = @VERSION@ 183VERSION = @VERSION@
186VMAJ = @VMAJ@ 184VMAJ = @VMAJ@
185WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
186WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
187WIN32_CFLAGS = @WIN32_CFLAGS@ 187WIN32_CFLAGS = @WIN32_CFLAGS@
188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
189XCB_CFLAGS = @XCB_CFLAGS@ 189XCB_CFLAGS = @XCB_CFLAGS@
@@ -265,6 +265,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
268evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
269evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
270evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
271evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
268evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 272evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
269evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 273evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
270evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 274evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common/evas_polygon_main.c b/libraries/evas/src/lib/engines/common/evas_polygon_main.c
index bca3f83..ea0bf13 100644
--- a/libraries/evas/src/lib/engines/common/evas_polygon_main.c
+++ b/libraries/evas/src/lib/engines/common/evas_polygon_main.c
@@ -1,3 +1,7 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
1#include <math.h> 5#include <math.h>
2 6
3#include "evas_common.h" 7#include "evas_common.h"
@@ -133,6 +137,14 @@ evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Po
133 int ext_x, ext_y, ext_w, ext_h; 137 int ext_x, ext_y, ext_w, ext_h;
134 int *sorted_index; 138 int *sorted_index;
135 139
140#ifdef HAVE_PIXMAN
141# ifdef PIXMAN_POLY
142 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
143 if (dc->render_op == _EVAS_RENDER_BLEND)
144 op = PIXMAN_OP_OVER;
145# endif
146#endif
147
136 ext_x = 0; 148 ext_x = 0;
137 ext_y = 0; 149 ext_y = 0;
138 ext_w = dst->cache_entry.w; 150 ext_w = dst->cache_entry.w;
@@ -279,10 +291,30 @@ evas_common_polygon_draw(RGBA_Image *dst, RGBA_Draw_Context *dc, RGBA_Polygon_Po
279 if (((span->y) % dc->sli.h) == dc->sli.y) 291 if (((span->y) % dc->sli.h) == dc->sli.y)
280#endif 292#endif
281 { 293 {
282 ptr = dst->image.data + (span->y * (dst->cache_entry.w)) + span->x; 294#ifdef HAVE_PIXMAN
283 func(NULL, NULL, dc->col.col, ptr, span->w); 295# ifdef PIXMAN_POLY
284 } 296 if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
285 } 297 (!dc->mask.mask))
298 pixman_image_composite(op, dc->col.pixman_color_image,
299 NULL, dst->pixman.im,
300 span->x, span->y, 0, 0,
301 span->x, span->y, span->w, 1);
302 else if ((dst->pixman.im) && (dc->col.pixman_color_image) &&
303 (dc->mask.mask))
304 pixman_image_composite(op, dc->col.pixman_color_image,
305 dc->mask.mask->pixman.im,
306 dst->pixman.im,
307 span->x, span->y, 0, 0,
308 span->x, span->y, span->w, 1);
309 else
310# endif
311#endif
312 {
313 ptr = dst->image.data + (span->y * (dst->cache_entry.w)) + span->x;
314 func(NULL, NULL, dc->col.col, ptr, span->w);
315 }
316 }
317 }
286 while (spans) 318 while (spans)
287 { 319 {
288 span = (RGBA_Span *)spans; 320 span = (RGBA_Span *)spans;
diff --git a/libraries/evas/src/lib/engines/common/evas_rectangle_main.c b/libraries/evas/src/lib/engines/common/evas_rectangle_main.c
index 28aaf16..fc25fd0 100644
--- a/libraries/evas/src/lib/engines/common/evas_rectangle_main.c
+++ b/libraries/evas/src/lib/engines/common/evas_rectangle_main.c
@@ -58,16 +58,34 @@ rectangle_draw_internal(RGBA_Image *dst, RGBA_Draw_Context *dc, int x, int y, in
58 RECTS_CLIP_TO_RECT(x, y, w, h, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h); 58 RECTS_CLIP_TO_RECT(x, y, w, h, dc->clip.x, dc->clip.y, dc->clip.w, dc->clip.h);
59 if ((w <= 0) || (h <= 0)) return; 59 if ((w <= 0) || (h <= 0)) return;
60 60
61 func = evas_common_gfx_func_composite_color_span_get(dc->col.col, dst, w, dc->render_op); 61#ifdef HAVE_PIXMAN
62 ptr = dst->image.data + (y * dst->cache_entry.w) + x; 62# ifdef PIXMAN_RECT
63 for (yy = 0; yy < h; yy++) 63 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
64
65 if (dc->render_op == _EVAS_RENDER_BLEND)
66 op = PIXMAN_OP_OVER;
67
68 if ((dst->pixman.im) && (dc->col.pixman_color_image))
64 { 69 {
70 pixman_image_composite(op, dc->col.pixman_color_image, NULL,
71 dst->pixman.im, x, y, 0, 0,
72 x, y, w, h);
73 }
74 else
75# endif
76#endif
77 {
78 func = evas_common_gfx_func_composite_color_span_get(dc->col.col, dst, w, dc->render_op);
79 ptr = dst->image.data + (y * dst->cache_entry.w) + x;
80 for (yy = 0; yy < h; yy++)
81 {
65#ifdef EVAS_SLI 82#ifdef EVAS_SLI
66 if (((yy + y) % dc->sli.h) == dc->sli.y) 83 if (((yy + y) % dc->sli.h) == dc->sli.y)
67#endif 84#endif
68 { 85 {
69 func(NULL, NULL, dc->col.col, ptr, w); 86 func(NULL, NULL, dc->col.col, ptr, w);
70 } 87 }
71 ptr += dst->cache_entry.w; 88 ptr += dst->cache_entry.w;
89 }
72 } 90 }
73} 91}
diff --git a/libraries/evas/src/lib/engines/common/evas_scale_sample.c b/libraries/evas/src/lib/engines/common/evas_scale_sample.c
index 54b8e92..a8951b8 100644
--- a/libraries/evas/src/lib/engines/common/evas_scale_sample.c
+++ b/libraries/evas/src/lib/engines/common/evas_scale_sample.c
@@ -154,7 +154,7 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst,
154 dst_clip_w = m_clip_w; 154 dst_clip_w = m_clip_w;
155 dst_clip_h = m_clip_h; 155 dst_clip_h = m_clip_h;
156 } 156 }
157 157
158 if (dst_clip_x < dst_region_x) 158 if (dst_clip_x < dst_region_x)
159 { 159 {
160 dst_clip_w += dst_clip_x - dst_region_x; 160 dst_clip_w += dst_clip_x - dst_region_x;
@@ -258,7 +258,7 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst,
258 func = evas_common_gfx_func_composite_pixel_mask_span_get(src, dst, dst_clip_w, dc->render_op); 258 func = evas_common_gfx_func_composite_pixel_mask_span_get(src, dst, dst_clip_w, dc->render_op);
259 maskobj = dc->mask.mask; 259 maskobj = dc->mask.mask;
260 mask = maskobj->mask.mask; 260 mask = maskobj->mask.mask;
261/* 261/*
262 if (1 || dst_region_w > src_region_w || dst_region_h > src_region_h){ 262 if (1 || dst_region_w > src_region_w || dst_region_h > src_region_h){
263 printf("Mask w/h: %d/%d\n",maskobj->cache_entry.w, 263 printf("Mask w/h: %d/%d\n",maskobj->cache_entry.w,
264 maskobj->cache_entry.h); 264 maskobj->cache_entry.h);
@@ -276,26 +276,47 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst,
276 if ((dst_region_w == src_region_w) && (dst_region_h == src_region_h)) 276 if ((dst_region_w == src_region_w) && (dst_region_h == src_region_h))
277 { 277 {
278#ifdef HAVE_PIXMAN 278#ifdef HAVE_PIXMAN
279 if ((1) && 279# ifdef PIXMAN_IMAGE_SCALE_SAMPLE
280 (src->pixman.im) && (dst->pixman.im) && 280 if ((src->pixman.im) && (dst->pixman.im) && (!dc->mask.mask) &&
281 ((!dc->mul.use) || 281 ((!dc->mul.use) ||
282 ((dc->mul.use) && (dc->mul.col == 0xffffffff))) && 282 ((dc->mul.use) && (dc->mul.col == 0xffffffff))) &&
283 ((dc->render_op == _EVAS_RENDER_COPY) || 283 ((dc->render_op == _EVAS_RENDER_COPY) ||
284 (dc->render_op == _EVAS_RENDER_BLEND)) 284 (dc->render_op == _EVAS_RENDER_BLEND)))
285 )
286 { 285 {
287 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY 286 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
288 if (dc->render_op == _EVAS_RENDER_BLEND) op = PIXMAN_OP_OVER; 287 if (dc->render_op == _EVAS_RENDER_BLEND)
288 op = PIXMAN_OP_OVER;
289
289 pixman_image_composite(op, 290 pixman_image_composite(op,
290 src->pixman.im, NULL, 291 src->pixman.im, NULL,
291 dst->pixman.im, 292 dst->pixman.im,
292 (dst_clip_x - dst_region_x) + src_region_x, 293 (dst_clip_x - dst_region_x) + src_region_x,
293 (dst_clip_y - dst_region_y) + src_region_y, 294 (dst_clip_y - dst_region_y) + src_region_y,
294 0, 0, 295 0, 0,
295 dst_clip_x, dst_clip_y, 296 dst_clip_x, dst_clip_y,
297 dst_clip_w, dst_clip_h);
298 }
299 else if ((src->pixman.im) && (dst->pixman.im) &&
300 (dc->mask.mask) && (dc->mask.mask->pixman.im) &&
301 ((dc->render_op == _EVAS_RENDER_COPY) ||
302 (dc->render_op == _EVAS_RENDER_BLEND)))
303 {
304 // In case of pixel and color operation.
305 pixman_op_t op = PIXMAN_OP_SRC; // _EVAS_RENDER_COPY
306 if (dc->render_op == _EVAS_RENDER_BLEND)
307 op = PIXMAN_OP_OVER;
308
309 pixman_image_composite(op,
310 src->pixman.im, dc->mask.mask->pixman.im,
311 dst->pixman.im,
312 (dst_clip_x - dst_region_x) + src_region_x,
313 (dst_clip_y - dst_region_y) + src_region_y,
314 0, 0,
315 dst_clip_x, dst_clip_y,
296 dst_clip_w, dst_clip_h); 316 dst_clip_w, dst_clip_h);
297 } 317 }
298 else 318 else
319# endif
299#endif 320#endif
300 { 321 {
301 ptr = src_data + ((dst_clip_y - dst_region_y + src_region_y) * src_w) + (dst_clip_x - dst_region_x) + src_region_x; 322 ptr = src_data + ((dst_clip_y - dst_region_y + src_region_y) * src_w) + (dst_clip_x - dst_region_x) + src_region_x;
@@ -322,59 +343,59 @@ scale_rgba_in_to_out_clip_sample_internal(RGBA_Image *src, RGBA_Image *dst,
322 } 343 }
323 else 344 else
324 { 345 {
325 /* fill scale tables */ 346 /* fill scale tables */
326 for (x = 0; x < dst_clip_w; x++) 347 for (x = 0; x < dst_clip_w; x++)
327 lin_ptr[x] = (((x + dst_clip_x - dst_region_x) * src_region_w) / dst_region_w) + src_region_x; 348 lin_ptr[x] = (((x + dst_clip_x - dst_region_x) * src_region_w) / dst_region_w) + src_region_x;
328 for (y = 0; y < dst_clip_h; y++) 349 for (y = 0; y < dst_clip_h; y++)
329 row_ptr[y] = src_data + (((((y + dst_clip_y - dst_region_y) * src_region_h) / dst_region_h) 350 row_ptr[y] = src_data + (((((y + dst_clip_y - dst_region_y) * src_region_h) / dst_region_h)
330 + src_region_y) * src_w); 351 + src_region_y) * src_w);
331 /* scale to dst */ 352 /* scale to dst */
332 dptr = dst_ptr; 353 dptr = dst_ptr;
333#ifdef DIRECT_SCALE 354#ifdef DIRECT_SCALE
334 if ((!src->cache_entry.flags.alpha) && 355 if ((!src->cache_entry.flags.alpha) &&
335 (!dst->cache_entry.flags.alpha) && 356 (!dst->cache_entry.flags.alpha) &&
336 (!dc->mul.use)) 357 (!dc->mul.use))
337 { 358 {
338 for (y = 0; y < dst_clip_h; y++) 359 for (y = 0; y < dst_clip_h; y++)
339 { 360 {
340#ifdef EVAS_SLI 361# ifdef EVAS_SLI
341 if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) 362 if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y)
342#endif 363# endif
343 { 364 {
344 dst_ptr = dptr; 365 dst_ptr = dptr;
345 for (x = 0; x < dst_clip_w; x++) 366 for (x = 0; x < dst_clip_w; x++)
346 { 367 {
347 ptr = row_ptr[y] + lin_ptr[x]; 368 ptr = row_ptr[y] + lin_ptr[x];
348 *dst_ptr = *ptr; 369 *dst_ptr = *ptr;
349 dst_ptr++; 370 dst_ptr++;
350 } 371 }
351 } 372 }
352 dptr += dst_w; 373 dptr += dst_w;
353 } 374 }
354 } 375 }
355 else 376 else
356#endif 377#endif
357 { 378 {
358 /* a scanline buffer */ 379 /* a scanline buffer */
359 buf = alloca(dst_clip_w * sizeof(DATA32)); 380 buf = alloca(dst_clip_w * sizeof(DATA32));
360 for (y = 0; y < dst_clip_h; y++) 381 for (y = 0; y < dst_clip_h; y++)
361 { 382 {
362#ifdef EVAS_SLI 383#ifdef EVAS_SLI
363 if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y) 384 if (((y + dst_clip_y) % dc->sli.h) == dc->sli.y)
364#endif 385#endif
365 { 386 {
366 dst_ptr = buf; 387 dst_ptr = buf;
367 for (x = 0; x < dst_clip_w; x++) 388 for (x = 0; x < dst_clip_w; x++)
368 { 389 {
369 ptr = row_ptr[y] + lin_ptr[x]; 390 ptr = row_ptr[y] + lin_ptr[x];
370 *dst_ptr = *ptr; 391 *dst_ptr = *ptr;
371 dst_ptr++; 392 dst_ptr++;
372 } 393 }
373 /* * blend here [clip_w *] buf -> dptr * */ 394 /* * blend here [clip_w *] buf -> dptr * */
374 func(buf, NULL, dc->mul.col, dptr, dst_clip_w); 395 func(buf, NULL, dc->mul.col, dptr, dst_clip_w);
375 } 396 }
376 dptr += dst_w; 397 dptr += dst_w;
377 } 398 }
378 } 399 }
379 } 400 }
380} 401}
diff --git a/libraries/evas/src/lib/engines/common/evas_tiler.c b/libraries/evas/src/lib/engines/common/evas_tiler.c
index 0bbe811..ff359a4 100644
--- a/libraries/evas/src/lib/engines/common/evas_tiler.c
+++ b/libraries/evas/src/lib/engines/common/evas_tiler.c
@@ -19,7 +19,9 @@ static inline list_node_t *rect_list_add_split_fuzzy(list_t *rects, list_node_t
19static inline void rect_list_merge_rects(list_t *rects, list_t *to_merge, int accepted_error); 19static inline void rect_list_merge_rects(list_t *rects, list_t *to_merge, int accepted_error);
20static inline void rect_list_add_split_fuzzy_and_merge(list_t *rects, list_node_t *node, int split_accepted_error, int merge_accepted_error); 20static inline void rect_list_add_split_fuzzy_and_merge(list_t *rects, list_node_t *node, int split_accepted_error, int merge_accepted_error);
21static inline void rect_print(const rect_t r); 21static inline void rect_print(const rect_t r);
22#if 0
22static inline void rect_list_print(const list_t rects); 23static inline void rect_list_print(const list_t rects);
24#endif
23 25
24static const list_node_t list_node_zeroed = { NULL }; 26static const list_node_t list_node_zeroed = { NULL };
25static const list_t list_zeroed = { NULL, NULL }; 27static const list_t list_zeroed = { NULL, NULL };
@@ -117,6 +119,7 @@ rect_print(const rect_t r)
117 INF("<rect(%d, %d, %d, %d)>", r.left, r.top, r.width, r.height); 119 INF("<rect(%d, %d, %d, %d)>", r.left, r.top, r.width, r.height);
118} 120}
119 121
122#if 0
120static inline void 123static inline void
121rect_list_print(const list_t rects) 124rect_list_print(const list_t rects)
122{ 125{
@@ -143,6 +146,7 @@ rect_list_print(const list_t rects)
143 } 146 }
144 putchar(']'); 147 putchar(']');
145} 148}
149#endif
146 150
147static inline void 151static inline void
148rect_list_append_node(list_t *rects, list_node_t *node) 152rect_list_append_node(list_t *rects, list_node_t *node)
diff --git a/libraries/evas/src/lib/engines/common/language/evas_bidi_utils.c b/libraries/evas/src/lib/engines/common/language/evas_bidi_utils.c
index 9f7859b..002cfbe 100644
--- a/libraries/evas/src/lib/engines/common/language/evas_bidi_utils.c
+++ b/libraries/evas/src/lib/engines/common/language/evas_bidi_utils.c
@@ -1,3 +1,7 @@
1#ifdef HAVE_CONFIG_H
2# include <config.h>
3#endif
4
1#include <string.h> 5#include <string.h>
2#include <stdlib.h> 6#include <stdlib.h>
3 7
diff --git a/libraries/evas/src/lib/engines/common/language/evas_language_utils.c b/libraries/evas/src/lib/engines/common/language/evas_language_utils.c
index 9c9b3e3..b362f10 100644
--- a/libraries/evas/src/lib/engines/common/language/evas_language_utils.c
+++ b/libraries/evas/src/lib/engines/common/language/evas_language_utils.c
@@ -13,6 +13,12 @@
13 * 13 *
14 * @{ 14 * @{
15 */ 15 */
16#ifdef HAVE_CONFIG_H
17# include <config.h>
18#endif
19
20#include <stdlib.h>
21
16#include <Eina.h> 22#include <Eina.h>
17 23
18#include "evas_language_utils.h" 24#include "evas_language_utils.h"
diff --git a/libraries/evas/src/lib/engines/common_16/Makefile.in b/libraries/evas/src/lib/engines/common_16/Makefile.in
index 9097a8d..313cbda 100644
--- a/libraries/evas/src/lib/engines/common_16/Makefile.in
+++ b/libraries/evas/src/lib/engines/common_16/Makefile.in
@@ -201,8 +201,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
201PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 201PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
202PIXMAN_LIBS = @PIXMAN_LIBS@ 202PIXMAN_LIBS = @PIXMAN_LIBS@
203PKG_CONFIG = @PKG_CONFIG@ 203PKG_CONFIG = @PKG_CONFIG@
204PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
205PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
206PNG_CFLAGS = @PNG_CFLAGS@ 204PNG_CFLAGS = @PNG_CFLAGS@
207PNG_LIBS = @PNG_LIBS@ 205PNG_LIBS = @PNG_LIBS@
208RANLIB = @RANLIB@ 206RANLIB = @RANLIB@
@@ -219,6 +217,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
219VALGRIND_LIBS = @VALGRIND_LIBS@ 217VALGRIND_LIBS = @VALGRIND_LIBS@
220VERSION = @VERSION@ 218VERSION = @VERSION@
221VMAJ = @VMAJ@ 219VMAJ = @VMAJ@
220WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
221WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
222WIN32_CFLAGS = @WIN32_CFLAGS@ 222WIN32_CFLAGS = @WIN32_CFLAGS@
223WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 223WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
224XCB_CFLAGS = @XCB_CFLAGS@ 224XCB_CFLAGS = @XCB_CFLAGS@
@@ -300,6 +300,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
300evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 300evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
301evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 301evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
302evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 302evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
303evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
304evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
305evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
306evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
303evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 307evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
304evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 308evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
305evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 309evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/engines/common_8/Makefile.in b/libraries/evas/src/lib/engines/common_8/Makefile.in
index 06c13de..7fa4fbb 100644
--- a/libraries/evas/src/lib/engines/common_8/Makefile.in
+++ b/libraries/evas/src/lib/engines/common_8/Makefile.in
@@ -200,8 +200,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
200PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 200PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
201PIXMAN_LIBS = @PIXMAN_LIBS@ 201PIXMAN_LIBS = @PIXMAN_LIBS@
202PKG_CONFIG = @PKG_CONFIG@ 202PKG_CONFIG = @PKG_CONFIG@
203PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
204PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
205PNG_CFLAGS = @PNG_CFLAGS@ 203PNG_CFLAGS = @PNG_CFLAGS@
206PNG_LIBS = @PNG_LIBS@ 204PNG_LIBS = @PNG_LIBS@
207RANLIB = @RANLIB@ 205RANLIB = @RANLIB@
@@ -218,6 +216,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
218VALGRIND_LIBS = @VALGRIND_LIBS@ 216VALGRIND_LIBS = @VALGRIND_LIBS@
219VERSION = @VERSION@ 217VERSION = @VERSION@
220VMAJ = @VMAJ@ 218VMAJ = @VMAJ@
219WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
220WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
221WIN32_CFLAGS = @WIN32_CFLAGS@ 221WIN32_CFLAGS = @WIN32_CFLAGS@
222WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 222WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
223XCB_CFLAGS = @XCB_CFLAGS@ 223XCB_CFLAGS = @XCB_CFLAGS@
@@ -299,6 +299,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
299evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 299evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
300evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 300evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
301evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 301evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
302evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
303evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
304evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
305evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
302evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 306evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
303evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 307evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
304evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 308evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/file/Makefile.in b/libraries/evas/src/lib/file/Makefile.in
index 599d980..2ac89b1 100644
--- a/libraries/evas/src/lib/file/Makefile.in
+++ b/libraries/evas/src/lib/file/Makefile.in
@@ -196,8 +196,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
196PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 196PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
197PIXMAN_LIBS = @PIXMAN_LIBS@ 197PIXMAN_LIBS = @PIXMAN_LIBS@
198PKG_CONFIG = @PKG_CONFIG@ 198PKG_CONFIG = @PKG_CONFIG@
199PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
200PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
201PNG_CFLAGS = @PNG_CFLAGS@ 199PNG_CFLAGS = @PNG_CFLAGS@
202PNG_LIBS = @PNG_LIBS@ 200PNG_LIBS = @PNG_LIBS@
203RANLIB = @RANLIB@ 201RANLIB = @RANLIB@
@@ -214,6 +212,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
214VALGRIND_LIBS = @VALGRIND_LIBS@ 212VALGRIND_LIBS = @VALGRIND_LIBS@
215VERSION = @VERSION@ 213VERSION = @VERSION@
216VMAJ = @VMAJ@ 214VMAJ = @VMAJ@
215WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
216WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
217WIN32_CFLAGS = @WIN32_CFLAGS@ 217WIN32_CFLAGS = @WIN32_CFLAGS@
218WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 218WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
219XCB_CFLAGS = @XCB_CFLAGS@ 219XCB_CFLAGS = @XCB_CFLAGS@
@@ -295,6 +295,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
295evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 295evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
296evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 296evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
297evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 297evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
298evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
299evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
300evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
301evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
298evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 302evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
299evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 303evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
300evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 304evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/file/evas_module.c b/libraries/evas/src/lib/file/evas_module.c
index 6b4d4f6..21d5cd0 100644
--- a/libraries/evas/src/lib/file/evas_module.c
+++ b/libraries/evas/src/lib/file/evas_module.c
@@ -285,7 +285,7 @@ evas_module_register(const Evas_Module_Api *module, Evas_Module_Type type)
285 if (type == EVAS_MODULE_TYPE_ENGINE) 285 if (type == EVAS_MODULE_TYPE_ENGINE)
286 { 286 {
287 eina_array_push(evas_engines, em); 287 eina_array_push(evas_engines, em);
288 em->id_engine = eina_array_count_get(evas_engines); 288 em->id_engine = eina_array_count(evas_engines);
289 } 289 }
290 290
291 eina_hash_direct_add(evas_modules[type], module->name, em); 291 eina_hash_direct_add(evas_modules[type], module->name, em);
@@ -398,7 +398,7 @@ Evas_Module *
398evas_module_engine_get(int render_method) 398evas_module_engine_get(int render_method)
399{ 399{
400 if ((render_method <= 0) || 400 if ((render_method <= 0) ||
401 ((unsigned int)render_method > eina_array_count_get(evas_engines))) 401 ((unsigned int)render_method > eina_array_count(evas_engines)))
402 return NULL; 402 return NULL;
403 return eina_array_data_get(evas_engines, render_method - 1); 403 return eina_array_data_get(evas_engines, render_method - 1);
404} 404}
diff --git a/libraries/evas/src/lib/file/evas_path.c b/libraries/evas/src/lib/file/evas_path.c
index ff13e20..c663c16 100644
--- a/libraries/evas/src/lib/file/evas_path.c
+++ b/libraries/evas/src/lib/file/evas_path.c
@@ -123,7 +123,7 @@ evas_file_path_list(char *path, const char *match, int match_case)
123 else 123 else
124 files = eina_list_append(files, strdup(info->path + info->name_start)); 124 files = eina_list_append(files, strdup(info->path + info->name_start));
125 } 125 }
126 eina_iterator_free(it); 126 if (it) eina_iterator_free(it);
127 return files; 127 return files;
128} 128}
129 129
diff --git a/libraries/evas/src/lib/include/Makefile.in b/libraries/evas/src/lib/include/Makefile.in
index 9d5c371..21f0099 100644
--- a/libraries/evas/src/lib/include/Makefile.in
+++ b/libraries/evas/src/lib/include/Makefile.in
@@ -166,8 +166,6 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@ 166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
167PIXMAN_LIBS = @PIXMAN_LIBS@ 167PIXMAN_LIBS = @PIXMAN_LIBS@
168PKG_CONFIG = @PKG_CONFIG@ 168PKG_CONFIG = @PKG_CONFIG@
169PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
170PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
171PNG_CFLAGS = @PNG_CFLAGS@ 169PNG_CFLAGS = @PNG_CFLAGS@
172PNG_LIBS = @PNG_LIBS@ 170PNG_LIBS = @PNG_LIBS@
173RANLIB = @RANLIB@ 171RANLIB = @RANLIB@
@@ -184,6 +182,8 @@ VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
184VALGRIND_LIBS = @VALGRIND_LIBS@ 182VALGRIND_LIBS = @VALGRIND_LIBS@
185VERSION = @VERSION@ 183VERSION = @VERSION@
186VMAJ = @VMAJ@ 184VMAJ = @VMAJ@
185WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
186WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
187WIN32_CFLAGS = @WIN32_CFLAGS@ 187WIN32_CFLAGS = @WIN32_CFLAGS@
188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@ 188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
189XCB_CFLAGS = @XCB_CFLAGS@ 189XCB_CFLAGS = @XCB_CFLAGS@
@@ -265,6 +265,10 @@ evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@ 265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@ 266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@ 267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
268evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
269evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
270evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
271evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
268evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@ 272evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
269evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@ 273evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
270evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@ 274evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
diff --git a/libraries/evas/src/lib/include/evas_common.h b/libraries/evas/src/lib/include/evas_common.h
index f817202..a9063e6 100644
--- a/libraries/evas/src/lib/include/evas_common.h
+++ b/libraries/evas/src/lib/include/evas_common.h
@@ -1,9 +1,9 @@
1#ifndef EVAS_COMMON_H 1#ifndef EVAS_COMMON_H
2#define EVAS_COMMON_H 2#define EVAS_COMMON_H
3 3
4#ifdef HAVE_CONFIG_H 4//#ifdef HAVE_CONFIG_H
5# include "config.h" /* so that EAPI in Evas.h is correctly defined */ 5#include "config.h" /* so that EAPI in Evas.h is correctly defined */
6#endif 6//#endif
7 7
8#ifdef HAVE_EVIL 8#ifdef HAVE_EVIL
9# include <Evil.h> 9# include <Evil.h>
@@ -138,8 +138,6 @@ extern EAPI int _evas_log_dom_global;
138# define BUILD_PTHREAD 138# define BUILD_PTHREAD
139#endif 139#endif
140 140
141#ifdef BUILD_PTHREAD
142
143#define LK(x) Eina_Lock x 141#define LK(x) Eina_Lock x
144#define LKI(x) eina_lock_new(&(x)) 142#define LKI(x) eina_lock_new(&(x))
145#define LKD(x) eina_lock_free(&(x)) 143#define LKD(x) eina_lock_free(&(x))
@@ -148,42 +146,28 @@ extern EAPI int _evas_log_dom_global;
148#define LKU(x) eina_lock_release(&(x)) 146#define LKU(x) eina_lock_release(&(x))
149#define LKDBG(x) eina_lock_debug(&(x)) 147#define LKDBG(x) eina_lock_debug(&(x))
150 148
149/* for rwlocks */
150#define RWLK(x) Eina_RWLock x
151#define RWLKI(x) eina_rwlock_new(&(x))
152#define RWLKD(x) eina_rwlock_free(&(x))
153#define RDLKL(x) eina_rwlock_take_read(&(x))
154#define WRLKL(x) eina_rwlock_take_write(&(x))
155#define RWLKU(x) eina_rwlock_release(&(x))
156
157#ifdef BUILD_PTHREAD
158
151# define TH(x) pthread_t x 159# define TH(x) pthread_t x
152# define THI(x) int x 160# define THI(x) int x
153# define TH_MAX 8 161# define TH_MAX 8
154 162
155/* for rwlocks */
156#define RWLK(x) pthread_rwlock_t x
157#define RWLKI(x) pthread_rwlock_init(&(x), NULL)
158#define RWLKD(x) pthread_rwlock_destroy(&(x))
159#define RDLKL(x) pthread_rwlock_rdlock(&(x))
160#define WRLKL(x) pthread_rwlock_wrlock(&(x))
161#define RWLKU(x) pthread_rwlock_unlock(&(x))
162
163
164// even though in theory having every Nth rendered line done by a different 163// even though in theory having every Nth rendered line done by a different
165// thread might even out load across threads - it actually slows things down. 164// thread might even out load across threads - it actually slows things down.
166//#define EVAS_SLI 1 165//#define EVAS_SLI 1
167 166
168#else 167#else
169# define LK(x)
170# define LKI(x)
171# define LKD(x)
172# define LKL(x)
173# define LKT(x) 1
174# define LKU(x)
175# define TH(x) 168# define TH(x)
176# define THI(x) 169# define THI(x)
177# define TH_MAX 0 170# define TH_MAX 0
178# define LKDBG(x)
179
180/* for rwlocks */
181#define RWLK(x)
182#define RWLKI(x)
183#define RWLKD(x)
184#define RDLKL(x)
185#define WRLKL(x)
186#define RWLKU(x)
187 171
188#endif 172#endif
189 173
@@ -338,6 +322,21 @@ void *alloca (size_t);
338#define pld(addr, off) 322#define pld(addr, off)
339#endif /* __ARMEL__ */ 323#endif /* __ARMEL__ */
340 324
325// these here are in config.h - just here for documentation
326//#ifdef __ARM_ARCH__
327// *IF* you enable pixman, this determines which things pixman will do
328////#define PIXMAN_FONT 1
329////#define PIXMAN_RECT 1
330////#define PIXMAN_LINE 1
331////#define PIXMAN_POLY 1
332//#define PIXMAN_IMAGE 1
333//#define PIXMAN_IMAGE_SCALE_SAMPLE 1
334//#endif
335// not related to pixman but an alternate rotate code
336//#define TILE_ROTATE 1
337
338#define TILE_CACHE_LINE_SIZE 64
339
341/*****************************************************************************/ 340/*****************************************************************************/
342 341
343#define UNROLL2(op...) op op 342#define UNROLL2(op...) op op
@@ -678,6 +677,9 @@ struct _RGBA_Draw_Context
678 DATA32 col; 677 DATA32 col;
679 } mul; 678 } mul;
680 struct { 679 struct {
680#ifdef HAVE_PIXMAN
681 pixman_image_t *pixman_color_image;
682#endif
681 DATA32 col; 683 DATA32 col;
682 } col; 684 } col;
683 struct RGBA_Draw_Context_clip { 685 struct RGBA_Draw_Context_clip {
@@ -1032,14 +1034,14 @@ struct _Tilebuf
1032 int x, y, w, h; 1034 int x, y, w, h;
1033 } prev_add, prev_del; 1035 } prev_add, prev_del;
1034#ifdef RECTUPDATE 1036#ifdef RECTUPDATE
1035/* 1037/*
1036 Regionbuf *rb; 1038 Regionbuf *rb;
1037 */ 1039 */
1038#elif defined(EVAS_RECT_SPLIT) 1040#elif defined(EVAS_RECT_SPLIT)
1039 int need_merge; 1041 int need_merge;
1040 list_t rects; 1042 list_t rects;
1041#else 1043#else
1042/* 1044/*
1043 struct { 1045 struct {
1044 int w, h; 1046 int w, h;
1045 Tilebuf_Tile *tiles; 1047 Tilebuf_Tile *tiles;
diff --git a/libraries/evas/src/lib/include/evas_private.h b/libraries/evas/src/lib/include/evas_private.h
index 90498d0..84c1d36 100644
--- a/libraries/evas/src/lib/include/evas_private.h
+++ b/libraries/evas/src/lib/include/evas_private.h
@@ -301,12 +301,13 @@ struct _Evas
301 struct { 301 struct {
302 unsigned char inside : 1; 302 unsigned char inside : 1;
303 int mouse_grabbed; 303 int mouse_grabbed;
304 int downs;
304 DATA32 button; 305 DATA32 button;
305 Evas_Coord x, y; 306 Evas_Coord x, y;
307 int nogrep;
306 struct { 308 struct {
307 Eina_List *in; 309 Eina_List *in;
308 } object; 310 } object;
309
310 } pointer; 311 } pointer;
311 312
312 struct { 313 struct {
@@ -320,6 +321,12 @@ struct _Evas
320 unsigned char changed : 1; 321 unsigned char changed : 1;
321 } output; 322 } output;
322 323
324 struct
325 {
326 Evas_Coord x, y, w, h;
327 Eina_Bool changed : 1;
328 } framespace;
329
323 Eina_List *damages; 330 Eina_List *damages;
324 Eina_List *obscures; 331 Eina_List *obscures;
325 332
@@ -331,6 +338,7 @@ struct _Evas
331 338
332 int walking_list; 339 int walking_list;
333 int events_frozen; 340 int events_frozen;
341 Evas_Event_Flags default_event_flags;
334 342
335 struct { 343 struct {
336 Evas_Module *module; 344 Evas_Module *module;
@@ -577,7 +585,7 @@ struct _Evas_Object
577 unsigned char recalculate_cycle; 585 unsigned char recalculate_cycle;
578 Eina_Clist calc_entry; 586 Eina_Clist calc_entry;
579 587
580 Evas_Object_Pointer_Mode pointer_mode : 1; 588 Evas_Object_Pointer_Mode pointer_mode : 2;
581 589
582 Eina_Bool store : 1; 590 Eina_Bool store : 1;
583 Eina_Bool pass_events : 1; 591 Eina_Bool pass_events : 1;
@@ -608,6 +616,8 @@ struct _Evas_Object
608 Eina_Bool changed_move_only : 1; 616 Eina_Bool changed_move_only : 1;
609 Eina_Bool changed_nomove : 1; 617 Eina_Bool changed_nomove : 1;
610 Eina_Bool del_ref : 1; 618 Eina_Bool del_ref : 1;
619
620 Eina_Bool is_frame : 1;
611}; 621};
612 622
613struct _Evas_Func_Node 623struct _Evas_Func_Node
@@ -772,6 +782,7 @@ struct _Evas_Func
772 char *(*image_format_get) (void *data, void *image); 782 char *(*image_format_get) (void *data, void *image);
773 void (*image_colorspace_set) (void *data, void *image, int cspace); 783 void (*image_colorspace_set) (void *data, void *image, int cspace);
774 int (*image_colorspace_get) (void *data, void *image); 784 int (*image_colorspace_get) (void *data, void *image);
785 Eina_Bool (*image_can_region_get) (void *data, void *image);
775 void (*image_mask_create) (void *data, void *image); 786 void (*image_mask_create) (void *data, void *image);
776 void *(*image_native_set) (void *data, void *image, void *native); 787 void *(*image_native_set) (void *data, void *image, void *native);
777 void *(*image_native_get) (void *data, void *image); 788 void *(*image_native_get) (void *data, void *image);
@@ -861,6 +872,7 @@ struct _Evas_Image_Load_Func
861 Eina_Bool (*file_head) (Image_Entry *ie, const char *file, const char *key, int *error); 872 Eina_Bool (*file_head) (Image_Entry *ie, const char *file, const char *key, int *error);
862 Eina_Bool (*file_data) (Image_Entry *ie, const char *file, const char *key, int *error); 873 Eina_Bool (*file_data) (Image_Entry *ie, const char *file, const char *key, int *error);
863 double (*frame_duration) (Image_Entry *ie, const char *file, const int start, const int frame_num); 874 double (*frame_duration) (Image_Entry *ie, const char *file, const int start, const int frame_num);
875 Eina_Bool do_region;
864}; 876};
865 877
866struct _Evas_Image_Save_Func 878struct _Evas_Image_Save_Func
@@ -904,7 +916,7 @@ void evas_object_clip_across_check(Evas_Object *obj);
904void evas_object_clip_across_clippees_check(Evas_Object *obj); 916void evas_object_clip_across_clippees_check(Evas_Object *obj);
905void evas_object_mapped_clip_across_mark(Evas_Object *obj); 917void evas_object_mapped_clip_across_mark(Evas_Object *obj);
906void evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info); 918void evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info);
907void evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void *event_info); 919void evas_object_event_callback_call(Evas_Object *obj, Evas_Callback_Type type, void *event_info, int event_id);
908Eina_List *evas_event_objects_event_list(Evas *e, Evas_Object *stop, int x, int y); 920Eina_List *evas_event_objects_event_list(Evas *e, Evas_Object *stop, int x, int y);
909int evas_mem_free(int mem_required); 921int evas_mem_free(int mem_required);
910int evas_mem_degrade(int mem_required); 922int evas_mem_degrade(int mem_required);