--- /dev/null
+#include "e.h"
+#include "e_map.h"
+
+#define E_MAP_INDEX_IN_RANGE(MAP, X) ((X >= 0) && (X < MAP->count))
+
+struct _E_Map
+{
+ Evas_Map *map;
+ int count;
+ Eina_Bool internal;
+};
+
+EINTERN Eina_Bool
+e_map_set_to_comp_object(E_Map *em, Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+
+ if (!em)
+ {
+ evas_object_map_set(obj, NULL);
+ return EINA_TRUE;
+ }
+
+ evas_object_map_set(obj, em->map);
+
+ return EINA_TRUE;
+}
+
+EINTERN E_Map *
+e_map_get_from_comp_object(const Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, NULL);
+
+ E_Map *em = E_NEW(E_Map, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, NULL);
+
+ em->map = (Evas_Map *) evas_object_map_get(obj);
+ if (!em->map)
+ {
+ ELOGF("MAP", "evas_object_map_get failed. (object:%p)", NULL, obj);
+ free(em);
+ return NULL;
+ }
+ em->internal = EINA_TRUE;
+ em->count = evas_map_count_get(em->map);
+
+ return em;
+}
+
+E_API E_Map *
+e_map_new(void)
+{
+ E_Map *em = E_NEW(E_Map, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, NULL);
+
+ em->map = evas_map_new(4);
+ if (!em->map)
+ {
+ ELOGF("MAP", "evas_map_new failed.", NULL);
+ free(em);
+ return NULL;
+ }
+
+ em->count = 4;
+ em->internal = EINA_FALSE;
+
+ return em;
+}
+
+E_API E_Map *
+e_map_dup(E_Map *em)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, NULL);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em->map, NULL);
+
+ E_Map *em_dup = E_NEW(E_Map, 1);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em_dup, NULL);
+
+ memcpy(em_dup, em, sizeof(E_Map));
+ em_dup->map = evas_map_dup(em->map);
+ if (!em_dup->map)
+ {
+ ELOGF("MAP", "evas_map_dup failed. (E_Map:%p)", NULL, em);
+ free(em_dup);
+ return NULL;
+ }
+
+ em_dup->internal = EINA_FALSE;
+
+ return em_dup;
+}
+
+E_API Eina_Bool
+e_map_free(E_Map *em)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+
+ if (em->map && !em->internal)
+ evas_map_free(em->map);
+ free(em);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_point_coord_get(E_Map *em, int idx, int *x, int *y, int *z)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(E_MAP_INDEX_IN_RANGE(em, idx), EINA_FALSE);
+
+ evas_map_point_coord_get(em->map, idx, x, y, z);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_point_coord_set(E_Map *em, int idx, int x, int y, int z)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(E_MAP_INDEX_IN_RANGE(em, idx), EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_point_coord_set(em->map, idx, x, y, z);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_point_precise_coord_get(E_Map *em, int idx, double *x, double *y, double *z)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(E_MAP_INDEX_IN_RANGE(em, idx), EINA_FALSE);
+
+ evas_map_point_precise_coord_get(em->map, idx, x, y, z);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_point_precise_coord_set(E_Map *em, int idx, double x, double y, double z)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(E_MAP_INDEX_IN_RANGE(em, idx), EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_point_precise_coord_set(em->map, idx, x, y, z);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_point_image_uv_get(E_Map *em, int idx, double *u, double *v)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(E_MAP_INDEX_IN_RANGE(em, idx), EINA_FALSE);
+
+ evas_map_point_image_uv_get(em->map, idx, u, v);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_point_image_uv_set(E_Map *em, int idx, double u, double v)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(E_MAP_INDEX_IN_RANGE(em, idx), EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_point_image_uv_set(em->map, idx, u, v);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_coords_get(E_Map *em, double x, double y, double *mx, double *my, int grab)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+
+ return evas_map_coords_get(em->map, x, y, mx, my, grab);
+}
+
+E_API Eina_Bool
+e_map_alpha_get(E_Map *em)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+
+ return evas_map_alpha_get(em->map);
+}
+
+E_API Eina_Bool
+e_map_alpha_set(E_Map *em, Eina_Bool alpha)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_alpha_set(em->map, alpha);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_point_color_set(E_Map *em, int idx, int r, int g, int b, int a)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_FALSE_RETURN_VAL(E_MAP_INDEX_IN_RANGE(em, idx), EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_point_color_set(em->map, idx, r, g, b, a);
+
+ return EINA_TRUE;
+}
+
+E_API int
+e_map_count_get(E_Map *em)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, -1);
+
+ return evas_map_count_get(em->map);
+}
+
+E_API Eina_Bool
+e_map_smooth_set(E_Map *em, Eina_Bool enabled)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_smooth_set(em->map, enabled);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_util_points_populate_from_geometry(E_Map *em, int x, int y, int w, int h, int z)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+
+ evas_map_util_points_populate_from_geometry(em->map, x, y, w, h, z);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_util_points_populate_from_object(E_Map *em, Evas_Object *obj)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+
+ evas_map_util_points_populate_from_object(em->map, obj);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_util_points_populate_from_object_full(E_Map *em, Evas_Object *obj, int z)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ EINA_SAFETY_ON_NULL_RETURN_VAL(obj, EINA_FALSE);
+
+ evas_map_util_points_populate_from_object_full(em->map, obj, z);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_util_object_move_sync_set(E_Map *em, Eina_Bool enabled)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_util_object_move_sync_set(em->map, enabled);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_util_points_color_set(E_Map *em, int r, int g, int b, int a)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+ if (em->internal) return EINA_FALSE;
+
+ evas_map_util_points_color_set(em->map, r, g, b, a);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_util_zoom_with_constant_ratio(E_Map *em, double zoom, int cx, int cy)
+{
+ return e_map_util_zoom(em, zoom, zoom, cx, cy);
+}
+
+E_API Eina_Bool
+e_map_util_zoom(E_Map *em, double zoomx, double zoomy, int cx, int cy)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+
+ evas_map_util_zoom(em->map, zoomx, zoomy, cx, cy);
+
+ return EINA_TRUE;
+}
+
+E_API Eina_Bool
+e_map_util_rotate(E_Map *em, int angle, int cx, int cy)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(em, EINA_FALSE);
+
+ evas_map_util_rotate(em->map, angle, cx, cy);
+
+ return EINA_TRUE;
+}
--- /dev/null
+#ifdef E_TYPEDEFS
+typedef struct _E_Map E_Map;
+#else
+# ifndef E_MAP_H
+# define E_MAP_H
+
+/* current Evas_Map is support only four points.
+ * So, we're provide e_map_new without count parameter. */
+E_API E_Map *e_map_new(void);
+E_API E_Map *e_map_dup(E_Map *em);
+E_API Eina_Bool e_map_free(E_Map *em);
+E_API Eina_Bool e_map_point_coord_get(E_Map *em, int idx, int *x, int *y, int *z);
+E_API Eina_Bool e_map_point_coord_set(E_Map *em, int idx, int x, int y, int z);
+E_API Eina_Bool e_map_point_precise_coord_get(E_Map *em, int idx, double *x, double *y, double *z);
+E_API Eina_Bool e_map_point_precise_coord_set(E_Map *em, int idx, double x, double y, double z);
+E_API Eina_Bool e_map_point_image_uv_get(E_Map *em, int idx, double *u, double *v);
+E_API Eina_Bool e_map_point_image_uv_set(E_Map *em, int idx, double u, double v);
+E_API Eina_Bool e_map_coords_get(E_Map *em, double x, double y, double *mx, double *my, int grab);
+E_API Eina_Bool e_map_alpha_get(E_Map *em);
+E_API Eina_Bool e_map_alpha_set(E_Map *em, Eina_Bool alpha);
+E_API Eina_Bool e_map_point_color_set(E_Map *em, int idx, int r, int g, int b, int a);
+E_API int e_map_count_get(E_Map *em);
+E_API Eina_Bool e_map_smooth_set(E_Map *em, Eina_Bool enabled);
+
+E_API Eina_Bool e_map_util_points_populate_from_geometry(E_Map *em, int x, int y, int w, int h, int z);
+E_API Eina_Bool e_map_util_points_populate_from_object(E_Map *em, Evas_Object *obj);
+E_API Eina_Bool e_map_util_points_populate_from_object_full(E_Map *em, Evas_Object *obj, int z);
+E_API Eina_Bool e_map_util_object_move_sync_set(E_Map *em, Eina_Bool enabled);
+E_API Eina_Bool e_map_util_points_color_set(E_Map *em, int r, int g, int b, int a);
+E_API Eina_Bool e_map_util_zoom_with_constant_ratio(E_Map *em, double zoom, int cx, int cy);
+E_API Eina_Bool e_map_util_zoom(E_Map *em, double zoomx, double zoomy, int cx, int cy);
+E_API Eina_Bool e_map_util_rotate(E_Map *em, int angle, int cx, int cy);
+
+EINTERN Eina_Bool e_map_set_to_comp_object(E_Map *em, Evas_Object *obj);
+EINTERN E_Map * e_map_get_from_comp_object(const Evas_Object *obj);
+
+# endif
+#endif