Eolian: Integration of Image
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Sun, 23 Mar 2014 11:05:20 +0000 (13:05 +0200)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Sun, 23 Mar 2014 12:17:38 +0000 (14:17 +0200)
src/lib/Makefile.am
src/lib/elm_icon.c
src/lib/elm_image.c
src/lib/elm_image.eo [new file with mode: 0644]
src/lib/elm_image_eo.h
src/lib/elm_widget_image.h

index 7fadeaf..d23d8ee 100644 (file)
@@ -593,7 +593,9 @@ BUILT_SOURCES = \
                elm_grid.eo.c \
                elm_grid.eo.h \
                elc_hoversel.eo.c \
-               elc_hoversel.eo.h
+               elc_hoversel.eo.h \
+               elm_image.eo.c \
+               elm_image.eo.h
 
 EXTRA_DIST += \
             elm_widget.eo \
@@ -630,7 +632,8 @@ EXTRA_DIST += \
             elm_gesture_layer.eo \
             elm_glview.eo \
             elm_grid.eo \
-            elc_hoversel.eo
+            elc_hoversel.eo \
+            elm_image.eo
 
 nodist_includesunstable_HEADERS = \
                                  elm_widget.eo.h \
@@ -667,5 +670,6 @@ nodist_includesunstable_HEADERS = \
                                  elm_gesture_layer.eo.h \
                                  elm_glview.eo.h \
                                  elm_grid.eo.h \
-                                 elc_hoversel.eo.h
+                                 elc_hoversel.eo.h \
+                                 elm_image.eo.h
 
index 6f12a69..258a896 100644 (file)
@@ -353,7 +353,7 @@ static void
 _edje_signals_free(Elm_Icon_Smart_Data *sd)
 {
    Edje_Signal_Data *esd;
-   Elm_Image_Smart_Data *id = eo_data_scope_get(sd->obj, ELM_OBJ_IMAGE_CLASS);
+   Elm_Image_Data *id = eo_data_scope_get(sd->obj, ELM_OBJ_IMAGE_CLASS);
 
    EINA_LIST_FREE(sd->edje_signals, esd)
      {
@@ -372,7 +372,7 @@ _elm_icon_smart_file_set(Eo *obj, void *_pd, va_list *list)
    Evas_Object *pclip;
 
    Elm_Icon_Smart_Data *sd = _pd;
-   Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
+   Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
 
    const char *file = va_arg(*list, const char *);
    const char *key = va_arg(*list, const char *);
@@ -630,7 +630,7 @@ _elm_icon_signal_emit(Evas_Object *obj,
                       const char *source)
 {
 
-   Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
+   Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
 
    if (!id->edje) return;
 
@@ -648,7 +648,7 @@ _elm_icon_signal_callback_add(Evas_Object *obj,
    Edje_Signal_Data *esd;
 
    ELM_ICON_DATA_GET(obj, sd);
-   Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
+   Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
 
    if (!id->edje) return;
 
@@ -679,7 +679,7 @@ _elm_icon_signal_callback_del(Evas_Object *obj,
    Eina_List *l;
 
    ELM_ICON_DATA_GET(obj, sd);
-   Elm_Image_Smart_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
+   Elm_Image_Data *id = eo_data_scope_get(obj, ELM_OBJ_IMAGE_CLASS);
 
    if (!id->edje) return NULL;
 
index c7c610b..9ca07f9 100644 (file)
@@ -9,8 +9,6 @@
 
 #define FMT_SIZE_T "%zu"
 
-EAPI Eo_Op ELM_OBJ_IMAGE_BASE_ID = EO_NOOP;
-
 #define MY_CLASS ELM_OBJ_IMAGE_CLASS
 #define MY_CLASS_NAME "Elm_Image"
 #define MY_CLASS_NAME_LEGACY "elm_image"
@@ -43,7 +41,7 @@ _on_image_preloaded(void *data,
                     Evas_Object *obj,
                     void *event EINA_UNUSED)
 {
-   Elm_Image_Smart_Data *sd = data;
+   Elm_Image_Data *sd = data;
    sd->preloading = EINA_FALSE;
    if (sd->show) evas_object_show(obj);
    ELM_SAFE_FREE(sd->prev_img, evas_object_del);
@@ -105,7 +103,7 @@ _img_new(Evas_Object *obj)
 }
 
 static void
-_elm_image_internal_sizing_eval(Evas_Object *obj, Elm_Image_Smart_Data *sd)
+_elm_image_internal_sizing_eval(Evas_Object *obj, Elm_Image_Data *sd)
 {
    Evas_Coord x, y, w, h;
    const char *type;
@@ -236,42 +234,25 @@ _elm_image_edje_file_set(Evas_Object *obj,
    return EINA_TRUE;
 }
 
-static void
-_elm_image_smart_smooth_scale_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_smooth_scale_set(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, Eina_Bool smooth)
 {
-   Eina_Bool smooth = va_arg(*list, int);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
    if (sd->edje) return;
 
    evas_object_image_smooth_scale_set(sd->img, smooth);
 }
 
-static void
-_elm_image_smart_smooth_scale_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_smooth_scale_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Image_Smart_Data *sd = _pd;
-
-   if (!ret) return;
-
-   if (sd->edje)
-     {
-        *ret = EINA_FALSE;
-        return;
-     }
+   if (sd->edje) return EINA_FALSE;
 
-   *ret = evas_object_image_smooth_scale_get(sd->img);
+   return evas_object_image_smooth_scale_get(sd->img);
 }
 
-static void
-_elm_image_smart_fill_inside_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_fill_inside_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool fill_inside)
 {
-   Eina_Bool fill_inside = va_arg(*list, int);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
    fill_inside = !!fill_inside;
 
    if (sd->fill_inside == fill_inside) return;
@@ -281,24 +262,15 @@ _elm_image_smart_fill_inside_set(Eo *obj, void *_pd, va_list *list)
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-static void
-_elm_image_smart_fill_inside_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_fill_inside_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
-   if (ret) *ret = sd->fill_inside;
+   return sd->fill_inside;
 }
 
-static void
-_elm_image_smart_resize_up_set(Eo *obj, void *_pd, va_list *list)
-
+EOLIAN static void
+_elm_image_resize_up_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool resize_up)
 {
-   Eina_Bool resize_up = va_arg(*list, int);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
    resize_up = !!resize_up;
 
    if (sd->resize_up == resize_up) return;
@@ -308,23 +280,15 @@ _elm_image_smart_resize_up_set(Eo *obj, void *_pd, va_list *list)
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-static void
-_elm_image_smart_resize_up_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_resize_up_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
-   if (ret) *ret = sd->resize_up;
+   return sd->resize_up;
 }
 
-static void
-_elm_image_smart_resize_down_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_resize_down_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool resize_down)
 {
-   Eina_Bool resize_down = va_arg(*list, int);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
    resize_down = !!resize_down;
 
    if (sd->resize_down == resize_down) return;
@@ -334,17 +298,14 @@ _elm_image_smart_resize_down_set(Eo *obj, void *_pd, va_list *list)
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-static void
-_elm_image_smart_resize_down_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_resize_down_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   Elm_Image_Smart_Data *sd = _pd;
-   if (ret) *ret = sd->resize_up;
+   return sd->resize_up;
 }
 
 static void
-_elm_image_flip_horizontal(Evas_Object *obj, Elm_Image_Smart_Data *sd)
+_elm_image_flip_horizontal(Evas_Object *obj, Elm_Image_Data *sd)
 {
    unsigned int *p1, *p2, tmp;
    unsigned int *data;
@@ -374,7 +335,7 @@ _elm_image_flip_horizontal(Evas_Object *obj, Elm_Image_Smart_Data *sd)
 }
 
 static void
-_elm_image_flip_vertical(Evas_Object *obj, Elm_Image_Smart_Data *sd)
+_elm_image_flip_vertical(Evas_Object *obj, Elm_Image_Data *sd)
 {
    unsigned int *p1, *p2, tmp;
    unsigned int *data;
@@ -404,7 +365,7 @@ _elm_image_flip_vertical(Evas_Object *obj, Elm_Image_Smart_Data *sd)
 }
 
 static void
-_elm_image_smart_rotate_180(Evas_Object *obj, Elm_Image_Smart_Data *sd)
+_elm_image_smart_rotate_180(Evas_Object *obj, Elm_Image_Data *sd)
 {
    unsigned int *p1, *p2, tmp;
    unsigned int *data;
@@ -452,11 +413,9 @@ _elm_image_drag_n_drop_cb(void *elm_obj,
    return EINA_FALSE;
 }
 
-static void
-_elm_image_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_image_evas_smart_add(Eo *obj, Elm_Image_Data *priv)
 {
-   Elm_Image_Smart_Data *priv = _pd;
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
    elm_widget_sub_object_parent_add(obj);
 
@@ -488,11 +447,9 @@ _elm_image_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
    eo_do(obj, elm_obj_image_sizing_eval());
 }
 
-static void
-_elm_image_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_image_evas_smart_del(Eo *obj, Elm_Image_Data *sd)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
    ecore_timer_del(sd->anim_timer);
    evas_object_del(sd->img);
    evas_object_del(sd->prev_img);
@@ -503,14 +460,9 @@ _elm_image_smart_del(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
    eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
 }
 
-static void
-_elm_image_smart_move(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_evas_smart_move(Eo *obj, Elm_Image_Data *sd, Evas_Coord x, Evas_Coord y)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   Evas_Coord x = va_arg(*list, Evas_Coord);
-   Evas_Coord y = va_arg(*list, Evas_Coord);
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_move(x, y));
 
    if ((sd->img_x == x) && (sd->img_y == y)) return;
@@ -521,13 +473,9 @@ _elm_image_smart_move(Eo *obj, void *_pd, va_list *list)
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-static void
-_elm_image_smart_resize(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_evas_smart_resize(Eo *obj, Elm_Image_Data *sd, Evas_Coord w, Evas_Coord h)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-   Evas_Coord w = va_arg(*list, Evas_Coord);
-   Evas_Coord h = va_arg(*list, Evas_Coord);
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_resize(w, h));
 
    if ((sd->img_w == w) && (sd->img_h == h)) return;
@@ -539,11 +487,9 @@ _elm_image_smart_resize(Eo *obj, void *_pd, va_list *list)
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-static void
-_elm_image_smart_show(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_image_evas_smart_show(Eo *obj, Elm_Image_Data *sd)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
    sd->show = EINA_TRUE;
    if (sd->preloading) return;
 
@@ -554,11 +500,9 @@ _elm_image_smart_show(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
    ELM_SAFE_FREE(sd->prev_img, evas_object_del);
 }
 
-static void
-_elm_image_smart_hide(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_image_evas_smart_hide(Eo *obj, Elm_Image_Data *sd)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_hide());
 
    sd->show = EINA_FALSE;
@@ -567,28 +511,18 @@ _elm_image_smart_hide(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
    ELM_SAFE_FREE(sd->prev_img, evas_object_del);
 }
 
-static void
-_elm_image_smart_member_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_image_evas_smart_member_add(Eo *obj, Elm_Image_Data *sd, Evas_Object *member)
 {
-   Evas_Object *member = va_arg(*list, Evas_Object *);
-   Elm_Image_Smart_Data *sd = _pd;
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_member_add(member));
 
    if (sd->hit_rect)
      evas_object_raise(sd->hit_rect);
 }
 
-static void
-_elm_image_smart_color_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_evas_smart_color_set(Eo *obj, Elm_Image_Data *sd, int r, int g, int b, int a)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   int r = va_arg(*list, int);
-   int g = va_arg(*list, int);
-   int b = va_arg(*list, int);
-   int a = va_arg(*list, int);
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_color_set(r, g, b, a));
 
    evas_object_color_set(sd->hit_rect, 0, 0, 0, 0);
@@ -596,81 +530,64 @@ _elm_image_smart_color_set(Eo *obj, void *_pd, va_list *list)
    if (sd->prev_img) evas_object_color_set(sd->prev_img, r, g, b, a);
 }
 
-static void
-_elm_image_smart_clip_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_evas_smart_clip_set(Eo *obj, Elm_Image_Data *sd, Evas_Object *clip)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   Evas_Object *clip = va_arg(*list, Evas_Object *);
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_clip_set(clip));
 
    evas_object_clip_set(sd->img, clip);
    if (sd->prev_img) evas_object_clip_set(sd->prev_img, clip);
 }
 
-static void
-_elm_image_smart_clip_unset(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
-
+EOLIAN static void
+_elm_image_evas_smart_clip_unset(Eo *obj, Elm_Image_Data *sd)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
    eo_do_super(obj, MY_CLASS, evas_obj_smart_clip_unset());
 
    evas_object_clip_unset(sd->img);
    if (sd->prev_img) evas_object_clip_unset(sd->prev_img);
 }
 
-static void
-_elm_image_smart_theme(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_elm_widget_theme_apply(Eo *obj, Elm_Image_Data *sd EINA_UNUSED)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   if (ret) *ret = EINA_FALSE;
    Eina_Bool int_ret = EINA_FALSE;
-
    eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret));
-   if (!int_ret) return;
+   if (!int_ret) return EINA_FALSE;
 
    eo_do(obj, elm_obj_image_sizing_eval());
 
-   if (ret) *ret = EINA_TRUE;
+   return EINA_TRUE;
 }
 
-static void
-_elm_image_smart_event(Eo *obj, void *_pd EINA_UNUSED, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_elm_widget_event(Eo *obj, Elm_Image_Data *_pd EINA_UNUSED, Evas_Object *src, Evas_Callback_Type type, void *event_info)
 {
-   Evas_Object *src = va_arg(*list, Evas_Object *);
    (void) src;
-   Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type);
-   void *event_info = va_arg(*list, void *);
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
    Evas_Event_Key_Down *ev = event_info;
-   if (ret) *ret = EINA_FALSE;
 
-   if (elm_widget_disabled_get(obj)) return;
-   if (type != EVAS_CALLBACK_KEY_DOWN) return;
-   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
+   if (elm_widget_disabled_get(obj)) return EINA_FALSE;
+   if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
 
    if ((strcmp(ev->key, "Return")) &&
        (strcmp(ev->key, "KP_Enter")) &&
        (strcmp(ev->key, "space")))
-     return;
+     return EINA_FALSE;
 
    _activate(obj);
 
    ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
-   if (ret) *ret = EINA_TRUE;
+   return EINA_TRUE;
 }
 
-static void
-_elm_image_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_image_sizing_eval(Eo *obj, Elm_Image_Data *sd)
 {
    Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
    int w, h;
    double ts;
 
-   Elm_Image_Smart_Data *sd = _pd;
-
    _elm_image_internal_sizing_eval(obj, sd);
 
    eo_do(obj, elm_obj_image_smooth_scale_set(sd->smooth));
@@ -682,7 +599,7 @@ _elm_image_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
 
    ts = sd->scale;
    sd->scale = 1.0;
-   eo_do(obj, elm_obj_image_size_get(&w, &h));
+   eo_do(obj, elm_obj_image_object_size_get(&w, &h));
 
    sd->scale = ts;
    evas_object_size_hint_min_get(obj, &minw, &minh);
@@ -747,22 +664,14 @@ _elm_image_file_set_do(Evas_Object *obj)
      evas_object_image_load_size_set(sd->img, sd->load_size, sd->load_size);
    else
      {
-        eo_do((Eo *) obj, elm_obj_image_size_get(&w, &h));
+        eo_do((Eo *) obj, elm_obj_image_object_size_get(&w, &h));
         evas_object_image_load_size_set(sd->img, w, h);
      }
 }
 
-static void
-_elm_image_smart_memfile_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_memfile_set(Eo *obj, Elm_Image_Data *sd, const void *img, size_t size, const char *format, const char *key)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   const void *img = va_arg(*list, const void *);
-   size_t size = va_arg(*list, size_t);
-   const char *format = va_arg(*list, const char *);
-   const char *key = va_arg(*list, const char *);
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
    _elm_image_file_set_do(obj);
 
    evas_object_image_memfile_set
@@ -778,34 +687,26 @@ _elm_image_smart_memfile_set(Eo *obj, void *_pd, va_list *list)
      {
         ERR("Things are going bad for some random " FMT_SIZE_T
             " byte chunk of memory (%p)", size, sd->img);
-        if (ret) *ret = EINA_FALSE;
-        return;
+        return EINA_FALSE;
      }
 
    _elm_image_internal_sizing_eval(obj, sd);
 
-   if (ret) *ret = EINA_TRUE;
+   return EINA_TRUE;
 }
 
-static void
-_elm_image_smart_scale_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_scale_set(Eo *obj, Elm_Image_Data *sd, double scale)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   double scale = va_arg(*list, double);
-
    sd->scale = scale;
 
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-static void
-_elm_image_smart_scale_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static double
+_elm_image_scale_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-   double *ret = va_arg(*list, double *);
-
-   if (ret) *ret = sd->scale;
+   return sd->scale;
 }
 
 EAPI Evas_Object *
@@ -817,8 +718,8 @@ elm_image_add(Evas_Object *parent)
    return obj;
 }
 
-static void
-_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
+EOLIAN static void
+_elm_image_eo_base_constructor(Eo *obj, Elm_Image_Data *_pd EINA_UNUSED)
 {
    eo_do_super(obj, MY_CLASS, eo_constructor());
    eo_do(obj,
@@ -827,23 +728,6 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
 }
 
 EAPI Eina_Bool
-elm_image_memfile_set(Evas_Object *obj,
-                      const void *img,
-                      size_t size,
-                      const char *format,
-                      const char *key)
-{
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-
-   EINA_SAFETY_ON_NULL_RETURN_VAL(img, EINA_FALSE);
-   EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, EINA_FALSE);
-
-   Eina_Bool ret = EINA_FALSE;
-   eo_do(obj, elm_obj_image_memfile_set(img, size, format, key, &ret));
-   return ret;
-}
-
-EAPI Eina_Bool
 elm_image_file_set(Evas_Object *obj,
                    const char *file,
                    const char *group)
@@ -873,7 +757,7 @@ elm_image_mmap_set(Evas_Object *obj,
 }
 
 static void
-_elm_image_smart_internal_file_set(Eo *obj, Elm_Image_Smart_Data *sd,
+_elm_image_smart_internal_file_set(Eo *obj, Elm_Image_Data *sd,
                                    const char *file, const Eina_File *f, const char *key, Eina_Bool *ret)
 {
    if (eina_str_has_extension(file, ".edj"))
@@ -914,7 +798,7 @@ static void
 _elm_image_smart_download_done(void *data, Elm_Url *url EINA_UNUSED, Eina_Binbuf *download)
 {
    Eo *obj = data;
-   Elm_Image_Smart_Data *sd = eo_data_scope_get(obj, MY_CLASS);
+   Elm_Image_Data *sd = eo_data_scope_get(obj, MY_CLASS);
    Eina_File *f;
    size_t length;
    Eina_Bool ret = EINA_FALSE;
@@ -955,7 +839,7 @@ static void
 _elm_image_smart_download_cancel(void *data, Elm_Url *url EINA_UNUSED, int error)
 {
    Eo *obj = data;
-   Elm_Image_Smart_Data *sd = eo_data_scope_get(obj, MY_CLASS);
+   Elm_Image_Data *sd = eo_data_scope_get(obj, MY_CLASS);
    Elm_Image_Error err = { error, EINA_FALSE };
 
    evas_object_smart_callback_call(obj, SIG_DOWNLOAD_ERROR, &err);
@@ -979,15 +863,10 @@ static const char *remote_uri[] = {
   "http://", "https://", "ftp://"
 };
 
-static void
-_elm_image_smart_file_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_file_set(Eo *obj, Elm_Image_Data *sd, const char *file, const char *key)
 {
-   const char *file = va_arg(*list, const char *);
-   const char *key = va_arg(*list, const char *);
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
+   Eina_Bool ret = EINA_FALSE;
    unsigned int i;
 
    if (sd->remote) _elm_url_cancel(sd->remote);
@@ -1007,114 +886,61 @@ _elm_image_smart_file_set(Eo *obj, void *_pd, va_list *list)
             {
                evas_object_smart_callback_call(obj, SIG_DOWNLOAD_START, NULL);
                eina_stringshare_replace(&sd->key, key);
-               if (ret) *ret = EINA_TRUE;
-               return ;
+               return EINA_TRUE;
             }
           break;
        }
 
-   _elm_image_smart_internal_file_set(obj, sd, file, NULL, key, ret);
+   _elm_image_smart_internal_file_set(obj, sd, file, NULL, key, &ret);
+
+   return ret;
 }
 
-static void
-_elm_image_smart_mmap_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_mmap_set(Eo *obj, Elm_Image_Data *sd, const Eina_File *f, const char *key)
 {
-  const Eina_File *f = va_arg(*list, const Eina_File *);
-  const char *key = va_arg(*list, const char*);
-  Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-  Elm_Image_Smart_Data *sd = _pd;
+  Eina_Bool ret;
 
   if (sd->remote) _elm_url_cancel(sd->remote);
   sd->remote = NULL;
 
   _elm_image_smart_internal_file_set(obj, sd,
                                     eina_file_filename_get(f), f,
-                                    key, ret);
-}
+                                    key, &ret);
 
-EAPI void
-elm_image_file_get(const Evas_Object *obj,
-                   const char **file,
-                   const char **group)
-{
-   ELM_IMAGE_CHECK(obj);
-   eo_do((Eo *) obj, elm_obj_image_file_get(file, group));
+   return ret;
 }
 
-static void
-_elm_image_smart_file_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_file_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, const char **file, const char **key)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   const char **file = va_arg(*list, const char **);
-   const char **key = va_arg(*list, const char **);
-
    if (sd->edje)
      edje_object_file_get(sd->img, file, key);
    else
      evas_object_image_file_get(sd->img, file, key);
 }
 
-EAPI void
-elm_image_smooth_set(Evas_Object *obj,
-                     Eina_Bool smooth)
-{
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_smooth_set(smooth));
-}
-
-static void
-_elm_image_smart_smooth_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_smooth_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool smooth)
 {
-   Eina_Bool smooth = va_arg(*list, int);
-   Elm_Image_Smart_Data *sd = _pd;
    sd->smooth = smooth;
 
    eo_do(obj, elm_obj_image_sizing_eval());
 }
 
-EAPI Eina_Bool
-elm_image_smooth_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_image_smooth_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_smooth_get(&ret));
-   return ret;
+   return sd->smooth;
 }
 
-static void
-_elm_image_smart_smooth_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_object_size_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, int *w, int *h)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Image_Smart_Data *sd = _pd;
-   if (ret) *ret = sd->smooth;
-}
-
-EAPI void
-elm_image_object_size_get(const Evas_Object *obj,
-                          int *w,
-                          int *h)
-{
-   if (w) *w = 0;
-   if (h) *h = 0;
-
-   ELM_IMAGE_CHECK(obj);
-   eo_do((Eo *) obj, elm_obj_image_size_get(w, h));
-}
-
-static void
-_elm_image_smart_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   int *w = va_arg(*list, int *);
-   int *h = va_arg(*list, int *);
-
    int tw, th;
    int cw = 0, ch = 0;
    const char *type;
 
-   Elm_Image_Smart_Data *sd = _pd;
-
    type = evas_object_type_get(sd->img);
    if (!type) return;
 
@@ -1134,134 +960,53 @@ _elm_image_smart_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
    if (h) *h = th;
 }
 
-EAPI void
-elm_image_no_scale_set(Evas_Object *obj,
-                       Eina_Bool no_scale)
-{
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_no_scale_set(no_scale));
-}
-
-static void
-_elm_image_smart_no_scale_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_no_scale_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool no_scale)
 {
-   Eina_Bool no_scale = va_arg(*list, int);
-   Elm_Image_Smart_Data *sd = _pd;
    sd->no_scale = no_scale;
 
    eo_do(obj, elm_obj_image_sizing_eval());
 }
 
-EAPI Eina_Bool
-elm_image_no_scale_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_image_no_scale_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_no_scale_get(&ret));
-   return ret;
+   return sd->no_scale;
 }
 
-static void
-_elm_image_smart_no_scale_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_resizable_set(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, Eina_Bool up, Eina_Bool down)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Image_Smart_Data *sd = _pd;
-   if (ret) *ret = sd->no_scale;
-}
-
-EAPI void
-elm_image_resizable_set(Evas_Object *obj,
-                        Eina_Bool up,
-                        Eina_Bool down)
-{
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_resizable_set(up, down));
-}
-
-static void
-_elm_image_smart_resizable_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Eina_Bool up = va_arg(*list, int);
-   Eina_Bool down = va_arg(*list, int);
-   Elm_Image_Smart_Data *sd = _pd;
-
    sd->resize_up = !!up;
    sd->resize_down = !!down;
 
    eo_do(obj, elm_obj_image_sizing_eval());
 }
 
-EAPI void
-elm_image_resizable_get(const Evas_Object *obj,
-                        Eina_Bool *size_up,
-                        Eina_Bool *size_down)
-{
-   ELM_IMAGE_CHECK(obj);
-   eo_do((Eo *) obj, elm_obj_image_resizable_get(size_up, size_down));
-}
-
-static void
-_elm_image_smart_resizable_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_resizable_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, Eina_Bool *size_up, Eina_Bool *size_down)
 {
-   Eina_Bool *size_up = va_arg(*list, Eina_Bool *);
-   Eina_Bool *size_down = va_arg(*list, Eina_Bool *);
-
-   Elm_Image_Smart_Data *sd = _pd;
    if (size_up) *size_up = sd->resize_up;
    if (size_down) *size_down = sd->resize_down;
 }
 
-EAPI void
-elm_image_fill_outside_set(Evas_Object *obj,
-                           Eina_Bool fill_outside)
+EOLIAN static void
+_elm_image_fill_outside_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool fill_outside)
 {
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_fill_outside_set(fill_outside));
-}
-
-static void
-_elm_image_smart_fill_outside_set(Eo *obj, void *_pd, va_list *list)
-{
-   Eina_Bool fill_outside = va_arg(*list, int);
-   Elm_Image_Smart_Data *sd = _pd;
    sd->fill_inside = !fill_outside;
 
    eo_do(obj, elm_obj_image_sizing_eval());
 }
 
-EAPI Eina_Bool
-elm_image_fill_outside_get(const Evas_Object *obj)
-{
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_fill_outside_get(&ret));
-   return ret;
-}
-
-static void
-_elm_image_smart_fill_outside_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   Elm_Image_Smart_Data *sd = _pd;
-   if (ret) *ret = !sd->fill_inside;
-}
-
-EAPI void
-elm_image_preload_disabled_set(Evas_Object *obj,
-                               Eina_Bool disabled)
+EOLIAN static Eina_Bool
+_elm_image_fill_outside_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_preload_disabled_set(!!disabled));
+   return !sd->fill_inside;
 }
 
-static void
-_elm_image_smart_preload_disabled_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_preload_disabled_set(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, Eina_Bool disable)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   Eina_Bool disable = va_arg(*list, int);
-
    if (sd->edje || !sd->preloading) return;
 
    //FIXME: Need to keep the disabled status for next image loading.
@@ -1284,13 +1029,9 @@ elm_image_prescale_set(Evas_Object *obj,
    eo_do(obj, elm_obj_image_load_size_set(size));
 }
 
-static void
-_elm_image_smart_load_size_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_load_size_set(Eo *obj EINA_UNUSED, Elm_Image_Data *sd, int size)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-
-   int size = va_arg(*list, int);
-
    sd->load_size = size;
 }
 
@@ -1304,34 +1045,19 @@ elm_image_prescale_get(const Evas_Object *obj)
    return ret;
 }
 
-static void
-_elm_image_smart_load_size_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Elm_Image_Smart_Data *sd = _pd;
-
-   int *ret = va_arg(*list, int *);
-
-   if (ret) *ret = sd->load_size;
-}
-
-EAPI void
-elm_image_orient_set(Evas_Object *obj,
-                     Elm_Image_Orient orient)
+EOLIAN static int
+_elm_image_load_size_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_orient_set(orient));
+   return sd->load_size;
 }
 
-static void
-_elm_image_smart_orient_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_orient_set(Eo *obj, Elm_Image_Data *sd, Elm_Image_Orient orient)
 {
-   Elm_Image_Orient orient = va_arg(*list, Elm_Image_Orient);
 
    unsigned int *data, *data2 = NULL, *to, *from;
    int x, y, w, hw, iw, ih;
 
-   Elm_Image_Smart_Data *sd = _pd;
-
    if (sd->edje)
      return;
 
@@ -1433,45 +1159,18 @@ _elm_image_smart_orient_set(Eo *obj, void *_pd, va_list *list)
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-EAPI Elm_Image_Orient
-elm_image_orient_get(const Evas_Object *obj)
+EOLIAN static Elm_Image_Orient
+_elm_image_orient_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj) ELM_IMAGE_ORIENT_NONE;
-
-   Elm_Image_Orient ret = ELM_IMAGE_ORIENT_NONE;
-   eo_do((Eo *) obj, elm_obj_image_orient_get(&ret));
-
-   return ret;
-}
-
-static void
-_elm_image_smart_orient_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Elm_Image_Smart_Data *sd = _pd;
-
-   Elm_Image_Orient *ret = va_arg(*list, Elm_Image_Orient *);
-
-   if (ret) *ret = sd->orient;
-}
-
-EAPI void
-elm_image_editable_set(Evas_Object *obj,
-                       Eina_Bool set)
-{
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_editable_set(set));
+   return sd->orient;
 }
 
 /**
  * Turns on editing through drag and drop and copy and paste.
  */
-static void
-_elm_image_smart_editable_set(Eo *obj, void *_pd, va_list *list)
-
+EOLIAN static void
+_elm_image_editable_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool edit)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-   Eina_Bool edit = va_arg(*list, int);
-
    if (sd->edje)
      {
         WRN("No editing edje objects yet (ever)\n");
@@ -1500,58 +1199,21 @@ _elm_image_smart_editable_set(Eo *obj, void *_pd, va_list *list)
            _elm_image_drag_n_drop_cb, obj);
 }
 
-EAPI Eina_Bool
-elm_image_editable_get(const Evas_Object *obj)
-{
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_editable_get(&ret));
-   return ret;
-}
-
-static void
-_elm_image_smart_editable_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+EOLIAN static Eina_Bool
+_elm_image_editable_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   if (ret) *ret = sd->edit;
+   return sd->edit;
 }
 
-EAPI Evas_Object *
-elm_image_object_get(const Evas_Object *obj)
+EOLIAN static Evas_Object*
+_elm_image_object_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj) NULL;
-
-   Evas_Object *ret = NULL;
-   eo_do((Eo *) obj, elm_obj_image_object_get(&ret));
-   return ret;
+   return sd->img;
 }
 
-static void
-_elm_image_smart_object_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Evas_Object **ret = va_arg(*list, Evas_Object **);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
-   if (ret) *ret = sd->img;
-}
-
-EAPI void
-elm_image_aspect_fixed_set(Evas_Object *obj,
-                           Eina_Bool fixed)
-{
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_aspect_fixed_set(fixed));
-}
-
-static void
-_elm_image_smart_aspect_fixed_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_aspect_fixed_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool fixed)
 {
-   Elm_Image_Smart_Data *sd = _pd;
-   Eina_Bool fixed = va_arg(*list, int);
-
    fixed = !!fixed;
    if (sd->aspect_fixed == fixed) return;
 
@@ -1560,63 +1222,23 @@ _elm_image_smart_aspect_fixed_set(Eo *obj, void *_pd, va_list *list)
    _elm_image_internal_sizing_eval(obj, sd);
 }
 
-EAPI Eina_Bool
-elm_image_aspect_fixed_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_image_aspect_fixed_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_aspect_fixed_get(&ret));
-   return ret;
+   return sd->aspect_fixed;
 }
 
-static void
-_elm_image_smart_aspect_fixed_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Elm_Image_Smart_Data *sd = _pd;
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   if (ret) *ret = sd->aspect_fixed;
-}
-
-EAPI Eina_Bool
-elm_image_animated_available_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_image_animated_available_get(Eo *obj, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_animated_available_get(&ret));
-   return ret;
-}
-
-static void
-_elm_image_smart_animated_available_get(Eo *obj, void *_pd, va_list *list)
-{
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-
-   Elm_Image_Smart_Data *sd = _pd;
-
-   if (sd->edje)
-     {
-        if (ret) *ret = EINA_FALSE;
-        return;
-     }
+   if (sd->edje) return EINA_FALSE;
 
-   if (ret) *ret = evas_object_image_animated_get(elm_image_object_get(obj));
+   return evas_object_image_animated_get(elm_image_object_get(obj));
 }
 
-EAPI void
-elm_image_animated_set(Evas_Object *obj,
-                       Eina_Bool anim)
+EOLIAN static void
+_elm_image_animated_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool anim)
 {
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_animated_set(anim));
-}
-
-static void
-_elm_image_smart_animated_set(Eo *obj, void *_pd, va_list *list)
-{
-   Eina_Bool anim = va_arg(*list, int);
-   Elm_Image_Smart_Data *sd = _pd;
-
    anim = !!anim;
    if (sd->anim == anim) return;
 
@@ -1645,37 +1267,15 @@ _elm_image_smart_animated_set(Eo *obj, void *_pd, va_list *list)
    return;
 }
 
-EAPI Eina_Bool
-elm_image_animated_get(const Evas_Object *obj)
-{
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_animated_get(&ret));
-   return ret;
-}
-
-static void
-_elm_image_smart_animated_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
-{
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Image_Smart_Data *sd = _pd;
-   if (ret) *ret = sd->anim;
-}
-
-EAPI void
-elm_image_animated_play_set(Evas_Object *obj,
-                            Eina_Bool play)
+EOLIAN static Eina_Bool
+_elm_image_animated_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj);
-   eo_do(obj, elm_obj_image_animated_play_set(play));
+   return sd->anim;
 }
 
-static void
-_elm_image_smart_animated_play_set(Eo *obj, void *_pd, va_list *list)
+EOLIAN static void
+_elm_image_animated_play_set(Eo *obj, Elm_Image_Data *sd, Eina_Bool play)
 {
-   Eina_Bool play = va_arg(*list, int);
-   Elm_Image_Smart_Data *sd = _pd;
-
    if (!sd->anim) return;
    if (sd->play == play) return;
 
@@ -1693,183 +1293,16 @@ _elm_image_smart_animated_play_set(Eo *obj, void *_pd, va_list *list)
    sd->play = play;
 }
 
-EAPI Eina_Bool
-elm_image_animated_play_get(const Evas_Object *obj)
+EOLIAN static Eina_Bool
+_elm_image_animated_play_get(Eo *obj EINA_UNUSED, Elm_Image_Data *sd)
 {
-   ELM_IMAGE_CHECK(obj) EINA_FALSE;
-   Eina_Bool ret = EINA_FALSE;
-   eo_do((Eo *) obj, elm_obj_image_animated_play_get(&ret));
-   return ret;
+   return sd->play;
 }
 
 static void
-_elm_image_smart_animated_play_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+_elm_image_class_constructor(Eo_Class *klass)
 {
-   Eina_Bool *ret = va_arg(*list, Eina_Bool *);
-   Elm_Image_Smart_Data *sd = _pd;
-   if (ret) *ret = sd->play;
-}
-
-static void
-_class_constructor(Eo_Class *klass)
-{
-   const Eo_Op_Func_Description func_desc[] = {
-        EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
-
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_image_smart_add),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_image_smart_del),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_RESIZE), _elm_image_smart_resize),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MOVE), _elm_image_smart_move),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_SHOW), _elm_image_smart_show),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_HIDE), _elm_image_smart_hide),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_MEMBER_ADD), _elm_image_smart_member_add),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_COLOR_SET), _elm_image_smart_color_set),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_CLIP_SET), _elm_image_smart_clip_set),
-        EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_CLIP_UNSET), _elm_image_smart_clip_unset),
-
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_image_smart_theme),
-        EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_image_smart_event),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ASPECT_FIXED_SET), _elm_image_smart_aspect_fixed_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ASPECT_FIXED_GET), _elm_image_smart_aspect_fixed_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_EDITABLE_SET), _elm_image_smart_editable_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_EDITABLE_GET), _elm_image_smart_editable_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_FILE_SET), _elm_image_smart_file_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_FILE_GET), _elm_image_smart_file_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SIZING_EVAL), _elm_image_smart_sizing_eval),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_SCALE_SET), _elm_image_smart_smooth_scale_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_SCALE_GET), _elm_image_smart_smooth_scale_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_FILL_INSIDE_SET), _elm_image_smart_fill_inside_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_FILL_INSIDE_GET), _elm_image_smart_fill_inside_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_FILL_OUTSIDE_SET), _elm_image_smart_fill_outside_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_FILL_OUTSIDE_GET), _elm_image_smart_fill_outside_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_OBJECT_GET), _elm_image_smart_object_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_LOAD_SIZE_SET), _elm_image_smart_load_size_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_LOAD_SIZE_GET), _elm_image_smart_load_size_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_MEMFILE_SET), _elm_image_smart_memfile_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_MMAP_SET), _elm_image_smart_mmap_set),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ORIENT_SET), _elm_image_smart_orient_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ORIENT_GET), _elm_image_smart_orient_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_PRELOAD_DISABLED_SET), _elm_image_smart_preload_disabled_set),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_RESIZE_DOWN_SET), _elm_image_smart_resize_down_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_RESIZE_DOWN_GET), _elm_image_smart_resize_down_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_RESIZE_UP_SET), _elm_image_smart_resize_up_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_RESIZE_UP_GET), _elm_image_smart_resize_up_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SCALE_SET), _elm_image_smart_scale_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SCALE_GET), _elm_image_smart_scale_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_OBJECT_SIZE_GET), _elm_image_smart_size_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_SET), _elm_image_smart_smooth_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_GET), _elm_image_smart_smooth_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_NO_SCALE_SET), _elm_image_smart_no_scale_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_NO_SCALE_GET), _elm_image_smart_no_scale_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_RESIZABLE_SET), _elm_image_smart_resizable_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_RESIZABLE_GET), _elm_image_smart_resizable_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_AVAILABLE_GET), _elm_image_smart_animated_available_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_SET), _elm_image_smart_animated_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_GET), _elm_image_smart_animated_get),
-
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_PLAY_SET), _elm_image_smart_animated_play_set),
-        EO_OP_FUNC(ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_PLAY_GET), _elm_image_smart_animated_play_get),
-
-        EO_OP_FUNC_SENTINEL
-   };
-   eo_class_funcs_set(klass, func_desc);
-
    evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
 }
 
-static const Eo_Op_Description op_desc[] = {
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ASPECT_FIXED_SET, "Set whether the original aspect ratio of the image should be kept on resize."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ASPECT_FIXED_GET, "Get if the object retains the original aspect ratio."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_EDITABLE_SET, "Make the image 'editable'."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_EDITABLE_GET, "Check if the image is 'editable'."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_FILE_SET, "Set the file that will be used as the image's source."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_FILE_GET, "Get the file that will be used as image."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_SIZING_EVAL, "'Virtual' function on evaluating the object's final geometry."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_SCALE_SET, "'Virtual' function on setting whether the object's image should be scaled smoothly or not."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_SCALE_GET, "'Virtual' function on retrieving whether the object's image is to scaled smoothly or not."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_FILL_INSIDE_SET, "'Virtual' function on how to resize the object's internal image, when maintaining a given aspect ratio -- leave blank spaces or scale to fill all space, with pixels out of bounds."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_FILL_INSIDE_GET, "'Virtual' function on retrieving how the object's internal image is to be resized, when maintaining a given aspect ratio."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_FILL_OUTSIDE_SET, "Set if the image fills the entire object area, when keeping the aspect ratio."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_FILL_OUTSIDE_GET, "Get if the object is filled outside."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_OBJECT_GET, "Get the inlined image object of the image widget."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_LOAD_SIZE_SET, "'Virtual' function on setting the object's image loading size (in pixels, applied to both axis)."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_LOAD_SIZE_GET, "'Virtual' function on retrieving the object's image loading size."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_MEMFILE_SET, "Set a location in memory to be used as an image object's source bitmap."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_MMAP_SET, "Set an Eina_File to be used as an image object's source bitmap."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ORIENT_SET, "Set the image orientation."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ORIENT_GET, "Get the image orientation."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_PRELOAD_DISABLED_SET, "Enable or disable preloading of the image."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_RESIZE_DOWN_SET, "'Virtual' function on setting whether the object's image can be resized to a size smaller than the original one."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_RESIZE_DOWN_GET, "'Virtual' function on retrieving whether the object's image can be resized to a size smaller than the original one."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_RESIZE_UP_SET, "'Virtual' function on setting whether the object's image can be resized to a size greater than the original one."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_RESIZE_UP_GET, "'Virtual' function on retrieving whether the object's image can be resized to a size greater than the original one."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_SCALE_SET, "'Virtual' function on setting the scale for the object's image size."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_SCALE_GET, "'Virtual' function on retrieving the scale for the object's image size."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_OBJECT_SIZE_GET, "Get the current size of the image."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_SET, "Set the smooth effect for an image."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_SMOOTH_GET, "Get the smooth effect for an image."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_NO_SCALE_SET, "Disable scaling of this object."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_NO_SCALE_GET, "Get whether scaling is disabled on the object."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_RESIZABLE_SET, "Set if the object is (up/down) resizable."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_RESIZABLE_GET, "Get if the object is (up/down) resizable."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_AVAILABLE_GET, "Get whether an image object supports animation or not."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_SET, "Set whether an image object (which supports animation) is to animate itself or not."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_GET, "Get whether an image object has animation enabled or not."),
-
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_PLAY_SET, "Start or stop an image object's animation."),
-     EO_OP_DESCRIPTION(ELM_OBJ_IMAGE_SUB_ID_ANIMATED_PLAY_GET, "Get whether an image object is under animation or not."),
-
-     EO_OP_DESCRIPTION_SENTINEL
-};
-static const Eo_Class_Description class_desc = {
-     EO_VERSION,
-     MY_CLASS_NAME,
-     EO_CLASS_TYPE_REGULAR,
-     EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_IMAGE_BASE_ID, op_desc, ELM_OBJ_IMAGE_SUB_ID_LAST),
-     NULL,
-     sizeof(Elm_Image_Smart_Data),
-     _class_constructor,
-     NULL
-};
-EO_DEFINE_CLASS(elm_obj_image_class_get, &class_desc, ELM_OBJ_WIDGET_CLASS, EVAS_SMART_CLICKABLE_INTERFACE, NULL);
+#include "elm_image.eo.c"
diff --git a/src/lib/elm_image.eo b/src/lib/elm_image.eo
new file mode 100644 (file)
index 0000000..4191387
--- /dev/null
@@ -0,0 +1,547 @@
+class Elm_Image (Elm_Widget, Evas_Clickable_Interface)
+{
+   eo_prefix: elm_obj_image;
+   properties {
+      editable {
+         set {
+            /*@
+            Make the image 'editable'.
+
+            This means the image is a valid drag target for drag and drop, and can be
+            cut or pasted too.
+
+            @ingroup Image */
+         }
+         get {
+            /*@
+            Check if the image is 'editable'.
+
+            @return Editability.
+
+            A return value of EINA_TRUE means the image is a valid drag target
+            for drag and drop, and can be cut or pasted too.
+
+            @ingroup Image */
+         }
+         values {
+            Eina_Bool set; /*@ Turn on or off editability. Default is @c EINA_FALSE. */
+         }
+      }
+      smooth_scale {
+         set {
+            /*@ No description supplied by the EAPI. */
+         }
+         get {
+            /*@ No description supplied by the EAPI. */
+         }
+         values {
+            Eina_Bool smooth;
+         }
+      }
+      resize_down {
+         set {
+            /*@ No description supplied by the EAPI. */
+         }
+         get {
+            /*@ No description supplied by the EAPI. */
+         }
+         values {
+            Eina_Bool resize_down;
+         }
+      }
+      load_size {
+         set {
+            /*@ No description supplied by the EAPI. */
+         }
+         get {
+            /*@ No description supplied by the EAPI. */
+         }
+         values {
+            int size;
+         }
+      }
+      animated_play {
+         set {
+            /*@
+            Start or stop an image object's animation.
+
+            To actually start playing any image object's animation, if it
+            supports it, one must do something like:
+
+            @code
+            if (elm_image_animated_available_get(img))
+            {
+            elm_image_animated_set(img, EINA_TRUE);
+            elm_image_animated_play_set(img, EINA_TRUE);
+            }
+            @endcode
+
+            elm_image_animated_set() will enable animation on the image, <b>but
+            not start it yet</b>. This is the function one uses to start and
+            stop animations on image objects.
+
+            @see elm_image_animated_available_get()
+            @see elm_image_animated_set()
+            @see elm_image_animated_play_get()
+
+            @ingroup Image
+            @since 1.7 */
+         }
+         get {
+            /*@
+            Get whether an image object is under animation or not.
+
+            @return @c EINA_TRUE, if the image is being animated, @c EINA_FALSE
+            otherwise.
+
+            @see elm_image_animated_play_get()
+
+            @ingroup Image
+            @since 1.7 */
+         }
+         values {
+            Eina_Bool play; /*@ @c EINA_TRUE to start the animation, @c EINA_FALSE
+            otherwise. Default is @c EINA_FALSE. */
+         }
+      }
+      resize_up {
+         set {
+            /*@ No description supplied by the EAPI. */
+         }
+         get {
+            /*@ No description supplied by the EAPI. */
+         }
+         values {
+            Eina_Bool resize_up;
+         }
+      }
+      smooth {
+         set {
+            /*@
+            Set the smooth effect for an image.
+
+            Set the scaling algorithm to be used when scaling the image. Smooth
+            scaling provides a better resulting image, but is slower.
+
+            The smooth scaling should be disabled when making animations that change
+            the image size, since it will be faster. Animations that don't require
+            resizing of the image can keep the smooth scaling enabled (even if the
+            image is already scaled, since the scaled image will be cached).
+
+            @see elm_image_smooth_get()
+
+            @ingroup Image */
+         }
+         get {
+            /*@
+            Get the smooth effect for an image.
+
+            @return @c EINA_TRUE if smooth scaling is enabled, @c EINA_FALSE otherwise.
+
+            @see elm_image_smooth_set()
+
+            @ingroup Image */
+         }
+         values {
+            Eina_Bool smooth; /*@ @c EINA_TRUE if smooth scaling should be used, @c EINA_FALSE
+            otherwise. Default is @c EINA_TRUE. */
+         }
+      }
+      no_scale {
+         set {
+            /*@
+            Disable scaling of this object.
+
+            This function disables scaling of the elm_image widget through the
+            function elm_object_scale_set(). However, this does not affect the widget
+            size/resize in any way. For that effect, take a look at
+            elm_image_resizable_set().
+
+            @see elm_image_no_scale_get()
+            @see elm_image_resizable_set()
+            @see elm_object_scale_set()
+
+            @ingroup Image */
+         }
+         get {
+            /*@
+            Get whether scaling is disabled on the object.
+
+            @return @c EINA_TRUE if scaling is disabled, @c EINA_FALSE otherwise
+
+            @see elm_image_no_scale_set()
+
+            @ingroup Image */
+         }
+         values {
+            Eina_Bool no_scale; /*@ @c EINA_TRUE if the object is not scalable, @c EINA_FALSE
+            otherwise. Default is @c EINA_FALSE. */
+         }
+      }
+      animated {
+         set {
+            /*@
+            Set whether an image object (which supports animation) is to
+            animate itself or not.
+
+            An image object, even if it supports animation, will be displayed
+            by default without animation. Call this function with @a animated
+            set to @c EINA_TRUE to enable its animation. To start or stop the
+            animation, actually, use elm_image_animated_play_set().
+
+            @see elm_image_animated_get()
+            @see elm_image_animated_available_get()
+            @see elm_image_animated_play_set()
+
+            @ingroup Image
+            @since 1.7 */
+         }
+         get {
+            /*@
+            Get whether an image object has animation enabled or not.
+
+            @return @c EINA_TRUE if the image has animation enabled,
+            @c EINA_FALSE otherwise.
+
+            @see elm_image_animated_set()
+
+            @ingroup Image
+            @since 1.7 */
+         }
+         values {
+            Eina_Bool anim; /*@ @c EINA_TRUE if the object is to animate itself,
+            @c EINA_FALSE otherwise. Default is @c EINA_FALSE. */
+         }
+      }
+      scale {
+         set {
+            /*@ No description supplied by the EAPI. */
+         }
+         get {
+            /*@ No description supplied by the EAPI. */
+         }
+         values {
+            double scale;
+         }
+      }
+      file {
+         set {
+            /*@
+            Set the file that will be used as the image's source.
+
+            @return (@c EINA_TRUE = success, @c EINA_FALSE = error)
+
+            @see elm_image_file_get()
+
+            @note This function will trigger the Edje file case based on the
+            extension of the @a file string (expects @c ".edj", for this
+            case).
+
+            @note If you use animated gif image and create multiple image objects with
+            one gif image file, you should set the @p group differently for each object.
+            Or image objects will share one evas image cache entry and you will get
+            unwanted frames.
+
+            @ingroup Image */
+            return Eina_Bool;
+            legacy null;
+         }
+         get {
+            /*@
+            Get the file that will be used as image.
+
+            @see elm_image_file_set()
+
+            @ingroup Image */
+         }
+         values {
+            const char *file; /*@ The path to file that will be used as image source */
+            const char *group; /*@ The group that the image belongs to, in case it's an
+            EET (including Edje case) file. This can be used as a key inside
+            evas image cache if this is a normal image file not eet file. */
+         }
+      }
+      fill_inside {
+         set {
+            /*@ No description supplied by the EAPI. */
+         }
+         get {
+            /*@ No description supplied by the EAPI. */
+         }
+         values {
+            Eina_Bool fill_inside;
+         }
+      }
+      aspect_fixed {
+         set {
+            /*@
+            Set whether the original aspect ratio of the image should be kept on resize.
+
+            The original aspect ratio (width / height) of the image is usually
+            distorted to match the object's size. Enabling this option will retain
+            this original aspect, and the way that the image is fit into the object's
+            area depends on the option set by elm_image_fill_outside_set().
+
+            @see elm_image_aspect_fixed_get()
+            @see elm_image_fill_outside_set()
+
+            @ingroup Image */
+         }
+         get {
+            /*@
+            Get if the object retains the original aspect ratio.
+
+            @return @c EINA_TRUE if the object keeps the original aspect, @c EINA_FALSE
+            otherwise.
+
+            @ingroup Image */
+         }
+         values {
+            Eina_Bool fixed; /*@ @c EINA_TRUE if the image should retain the aspect,
+            @c EINA_FALSE otherwise. */
+         }
+      }
+      orient {
+         set {
+            /*@
+            Set the image orientation.
+
+            This function allows to rotate or flip the given image.
+
+            @see elm_image_orient_get()
+            @see @ref Elm_Image_Orient
+
+            @ingroup Image */
+         }
+         get {
+            /*@
+            Get the image orientation.
+
+            @return The image orientation @ref Elm_Image_Orient
+
+            @see elm_image_orient_set()
+            @see @ref Elm_Image_Orient
+
+            @ingroup Image */
+         }
+         values {
+            Elm_Image_Orient orient; /*@ The image orientation @ref Elm_Image_Orient
+            Default is #ELM_IMAGE_ORIENT_NONE. */
+         }
+      }
+      fill_outside {
+         set {
+            /*@
+            Set if the image fills the entire object area, when keeping the aspect ratio.
+
+            When the image should keep its aspect ratio even if resized to another
+            aspect ratio, there are two possibilities to resize it: keep the entire
+            image inside the limits of height and width of the object (@p fill_outside
+            is @c EINA_FALSE) or let the extra width or height go outside of the object,
+            and the image will fill the entire object (@p fill_outside is @c EINA_TRUE).
+
+            @note This option will have no effect if
+            elm_image_aspect_fixed_set() is set to @c EINA_FALSE.
+
+            @see elm_image_fill_outside_get()
+            @see elm_image_aspect_fixed_set()
+
+            @ingroup Image */
+         }
+         get {
+            /*@
+            Get if the object is filled outside
+
+            @return @c EINA_TRUE if the object is filled outside, @c EINA_FALSE otherwise.
+
+            @see elm_image_fill_outside_set()
+
+            @ingroup Image */
+         }
+         values {
+            Eina_Bool fill_outside; /*@ @c EINA_TRUE if the object is filled outside,
+            @c EINA_FALSE otherwise. Default is @c EINA_FALSE. */
+         }
+      }
+      resizable {
+         set {
+            /*@
+            Set if the object is (up/down) resizable.
+
+            This function limits the image resize ability. If @p size_up is set to
+            @c EINA_FALSE, the object can't have its height or width resized to a value
+            higher than the original image size. Same is valid for @p size_down.
+
+            @see elm_image_resizable_get()
+
+            @ingroup Image */
+         }
+         get {
+            /*@
+            Get if the object is (up/down) resizable.
+
+            @see elm_image_resizable_set()
+
+            @ingroup Image */
+         }
+         values {
+            Eina_Bool up; /*@ A bool to set if the object is resizable up. Default is
+            @c EINA_TRUE. */
+            Eina_Bool down; /*@ A bool to set if the object is resizable down. Default
+            is @c EINA_TRUE. */
+         }
+      }
+      preload_disabled {
+         set {
+            /*@
+            Enable or disable preloading of the image
+
+            @ingroup Image */
+         }
+         values {
+            Eina_Bool disabled; /*@ If EINA_TRUE, preloading will be disabled */
+         }
+      }
+      mmap {
+         set {
+            /*@
+            Set the file that will be used as the image's source.
+
+            @return (@c EINA_TRUE = success, @c EINA_FALSE = error)
+
+            @see elm_image_file_set()
+
+            @note This function will trigger the Edje file case based on the
+            extension of the @a file string use to create the Eina_File (expects
+            @c ".edj", for this case).
+
+            @note If you use animated gif image and create multiple image objects with
+            one gif image file, you should set the @p group differently for each object.
+            Or image objects will share one evas image cache entry and you will get
+            unwanted frames.
+
+            @ingroup Image */
+            return Eina_Bool;
+            legacy null;
+         }
+         values {
+            const Eina_File *file; /*@ The handler to an Eina_File that will be used as image source */
+            const char *group; /*@ The group that the image belongs to, in case it's an
+            EET (including Edje case) file. This can be used as a key inside
+            evas image cache if this is a normal image file not eet file. */
+         }
+      }
+      memfile {
+         set {
+            /*@
+            Set a location in memory to be used as an image object's source
+            bitmap.
+
+            This function is handy when the contents of an image file are
+            mapped in memory, for example.
+
+            The @p format string should be something like @c "png", @c "jpg",
+            @c "tga", @c "tiff", @c "bmp" etc, when provided (@c NULL, on the
+            contrary). This improves the loader performance as it tries the
+            "correct" loader first, before trying a range of other possible
+            loaders until one succeeds.
+
+            @return (@c EINA_TRUE = success, @c EINA_FALSE = error)
+
+            @since 1.7
+
+            @ingroup Image */
+            return Eina_Bool;
+         }
+         values {
+            const void *img; /*@ The binary data that will be used as image source */
+            size_t size; /*@ The size of binary data blob @p img */
+            const char *format; /*@ (Optional) expected format of @p img bytes */
+            const char *key; /*@ Optional indexing key of @p img to be passed to the
+            image loader (eg. if @p img is a memory-mapped EET file) */
+         }
+      }
+      animated_available {
+         get {
+            /*@
+            Get whether an image object supports animation or not.
+
+            @return @c EINA_TRUE if the image supports animation,
+            @c EINA_FALSE otherwise.
+
+            This function returns if this Elementary image object's internal
+            image can be animated. Currently Evas only supports GIF
+            animation. If the return value is @b EINA_FALSE, other
+            @c elm_image_animated_xxx API calls won't work.
+
+            @see elm_image_animated_set()
+
+            @ingroup Image
+            @since 1.7 */
+            return Eina_Bool;
+         }
+      }
+      object {
+         get {
+            /*@
+            Get the inlined image object of the image widget.
+
+            @return The inlined image object, or NULL if none exists
+
+            This function allows one to get the underlying @c Evas_Object of type
+            Image from this elementary widget. It can be useful to do things like get
+            the pixel data, save the image to a file, etc.
+
+            @note Be careful to not manipulate it, as it is under control of
+            elementary.
+
+            @ingroup Image */
+            return Evas_Object *;
+         }
+      }
+      object_size {
+         get {
+            /*@
+            Get the current size of the image.
+
+            This is the real size of the image, not the size of the object.
+
+            @ingroup Image */
+         }
+         values {
+            int w; /*@ Pointer to store width, or NULL. */
+            int h; /*@ Pointer to store height, or NULL. */
+         }
+      }
+   }
+   methods {
+      sizing_eval {
+         /*@ No description supplied by the EAPI. */
+      }
+   }
+   implements {
+      class::constructor;
+      Eo_Base::constructor;
+      Evas_Smart::hide;
+      Evas_Smart::clip::set;
+      Evas_Smart::clip_unset;
+      Evas_Smart::show;
+      Evas_Smart::color::set;
+      Evas_Smart::move;
+      Evas_Smart::add;
+      Evas_Smart::del;
+      Evas_Smart::member_add;
+      Evas_Smart::resize;
+      Elm_Widget::theme_apply;
+      Elm_Widget::event;
+   }
+   events {
+      drop;
+      clicked;
+      download,start;
+      download,progress;
+      download,done;
+      download,error;
+   }
+
+}
index 4a5358a..f2e5e8f 100644 (file)
@@ -3,6 +3,8 @@
  *
  * @{
  */
+#include "elm_image.eo.h"
+#if 0
 #define ELM_OBJ_IMAGE_CLASS elm_obj_image_class_get()
 
 const Eo_Class *elm_obj_image_class_get(void) EINA_CONST;
@@ -560,6 +562,7 @@ enum
  */
 #define elm_obj_image_scale_get(ret) ELM_OBJ_IMAGE_ID(ELM_OBJ_IMAGE_SUB_ID_SCALE_GET), EO_TYPECHECK(double *, ret)
 
+#endif
 
 /**
  * @}
index fc6f8f4..e1d3158 100644 (file)
@@ -25,8 +25,8 @@
 /**
  * Base widget smart data extended with image instance data.
  */
-typedef struct _Elm_Image_Smart_Data Elm_Image_Smart_Data;
-struct _Elm_Image_Smart_Data
+typedef struct _Elm_Image_Data Elm_Image_Data;
+struct _Elm_Image_Data
 {
    Evas_Object          *hit_rect;
    Evas_Object          *img;
@@ -67,7 +67,7 @@ struct _Elm_Image_Smart_Data
  */
 
 #define ELM_IMAGE_DATA_GET(o, sd) \
-  Elm_Image_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_IMAGE_CLASS)
+  Elm_Image_Data * sd = eo_data_scope_get(o, ELM_OBJ_IMAGE_CLASS)
 
 #define ELM_IMAGE_DATA_GET_OR_RETURN(o, ptr)         \
   ELM_IMAGE_DATA_GET(o, ptr);                        \