summaryrefslogtreecommitdiff
path: root/src/lib/elementary/efl_ui_image.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/elementary/efl_ui_image.c')
-rw-r--r--src/lib/elementary/efl_ui_image.c428
1 files changed, 196 insertions, 232 deletions
diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c
index a807fa536b..9d83ce37f8 100644
--- a/src/lib/elementary/efl_ui_image.c
+++ b/src/lib/elementary/efl_ui_image.c
@@ -3,7 +3,8 @@
#endif
#define EFL_ACCESS_IMAGE_PROTECTED
-#define EFL_ACCESS_PROTECTED
+#define EFL_ACCESS_OBJECT_PROTECTED
+#define EFL_ACCESS_COMPONENT_PROTECTED
#define EFL_ACCESS_WIDGET_ACTION_PROTECTED
#define EFL_LAYOUT_CALC_PROTECTED
@@ -16,7 +17,6 @@
#define MY_CLASS EFL_UI_IMAGE_CLASS
#define MY_CLASS_NAME "Efl.Ui.Image"
-#define MY_CLASS_NAME_LEGACY "elm_image"
#define NON_EXISTING (void *)-1
static const char *icon_theme = NULL;
@@ -181,15 +181,15 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img)
// according to (iw x ih), (sd->img_w x sd->img_h), and scale_type
switch (sd->scale_type)
{
- case EFL_IMAGE_SCALE_TYPE_NONE:
+ case EFL_GFX_IMAGE_SCALE_TYPE_NONE:
w = iw;
h = ih;
break;
- case EFL_IMAGE_SCALE_TYPE_FILL:
+ case EFL_GFX_IMAGE_SCALE_TYPE_FILL:
w = sd->img_w;
h = sd->img_h;
break;
- case EFL_IMAGE_SCALE_TYPE_FIT_INSIDE:
+ case EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE:
w = sd->img_w;
h = ((double)ih * w) / (double)iw;
@@ -206,7 +206,7 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img)
h = ih;
}
break;
- case EFL_IMAGE_SCALE_TYPE_FIT_OUTSIDE:
+ case EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE:
w = sd->img_w;
h = ((double)ih * w) / (double)iw;
if (h < sd->img_h)
@@ -222,7 +222,7 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img)
h = ih;
}
break;
- case EFL_IMAGE_SCALE_TYPE_TILE:
+ case EFL_GFX_IMAGE_SCALE_TYPE_TILE:
x = sd->img_x;
y = sd->img_y;
w = sd->img_w;
@@ -518,20 +518,20 @@ _efl_ui_image_edje_file_set(Evas_Object *obj,
return _efl_ui_image_async_file_set(obj, sd, file, f, group);
/* FIXME: do i want to update icon on file change ? */
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
return EINA_TRUE;
}
EOLIAN static void
-_efl_ui_image_efl_image_smooth_scale_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, Eina_Bool smooth)
+_efl_ui_image_efl_gfx_image_smooth_scale_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, Eina_Bool smooth)
{
sd->smooth = smooth;
if (!sd->edje) evas_object_image_smooth_scale_set(sd->img, smooth);
}
EOLIAN static Eina_Bool
-_efl_ui_image_efl_image_smooth_scale_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_gfx_image_smooth_scale_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->smooth;
}
@@ -594,7 +594,7 @@ EOLIAN static void
_efl_ui_image_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Image_Data *sd)
{
if (elm_widget_is_legacy(obj))
- efl_event_callback_del(obj, EFL_GFX_EVENT_CHANGE_SIZE_HINTS,
+ efl_event_callback_del(obj, EFL_GFX_ENTITY_EVENT_CHANGE_SIZE_HINTS,
_on_size_hints_changed, sd);
ecore_timer_del(sd->anim_timer);
evas_object_del(sd->img);
@@ -604,41 +604,35 @@ _efl_ui_image_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Image_Data *sd)
if (sd->remote.binbuf) ELM_SAFE_FREE(sd->remote.binbuf, eina_binbuf_free);
ELM_SAFE_FREE(sd->remote.key, eina_stringshare_del);
- if (sd->pfuture)
- {
- efl_future_cancel(sd->pfuture);
- sd->pfuture = NULL;
- }
-
- if (sd->model)
+ if (sd->property.model)
{
- efl_event_callback_del(sd->model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
- _efl_ui_image_model_properties_changed_cb, obj);
- efl_unref(sd->model);
- sd->model = NULL;
+ efl_event_callback_del(sd->property.model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
+ _efl_ui_image_model_properties_changed_cb, obj);
+ efl_unref(sd->property.model);
+ sd->property.model = NULL;
}
efl_canvas_group_del(efl_super(obj, MY_CLASS));
}
EOLIAN static void
-_efl_ui_image_efl_gfx_position_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Position2D pos)
+_efl_ui_image_efl_gfx_entity_position_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Position2D pos)
{
if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y))
return;
- efl_gfx_position_set(efl_super(obj, MY_CLASS), pos);
+ efl_gfx_entity_position_set(efl_super(obj, MY_CLASS), pos);
if ((sd->img_x == pos.x) && (sd->img_y == pos.y)) return;
sd->img_x = pos.x;
sd->img_y = pos.y;
/* takes care of moving */
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
}
EOLIAN static void
-_efl_ui_image_efl_gfx_size_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Size2D sz)
+_efl_ui_image_efl_gfx_entity_size_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Size2D sz)
{
if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h))
return;
@@ -649,10 +643,10 @@ _efl_ui_image_efl_gfx_size_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Size2D sz)
sd->img_h = sz.h;
/* takes care of resizing */
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
super:
- efl_gfx_size_set(efl_super(obj, MY_CLASS), sz);
+ efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz);
}
static void
@@ -660,10 +654,10 @@ _efl_ui_image_show(Eo *obj, Efl_Ui_Image_Data *sd)
{
sd->show = EINA_TRUE;
- efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE);
+ efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), EINA_TRUE);
if (sd->preload_status == EFL_UI_IMAGE_PRELOADING) return;
- efl_gfx_visible_set(sd->img, EINA_TRUE);
+ efl_gfx_entity_visible_set(sd->img, EINA_TRUE);
_prev_img_del(sd);
}
@@ -671,13 +665,13 @@ static void
_efl_ui_image_hide(Eo *obj, Efl_Ui_Image_Data *sd)
{
sd->show = EINA_FALSE;
- efl_gfx_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE);
- efl_gfx_visible_set(sd->img, EINA_FALSE);
+ efl_gfx_entity_visible_set(efl_super(obj, MY_CLASS), EINA_FALSE);
+ efl_gfx_entity_visible_set(sd->img, EINA_FALSE);
_prev_img_del(sd);
}
EOLIAN static void
-_efl_ui_image_efl_gfx_visible_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool vis)
+_efl_ui_image_efl_gfx_entity_visible_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool vis)
{
if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_VISIBLE, 0, vis))
return;
@@ -721,7 +715,7 @@ _efl_ui_image_efl_canvas_object_clip_set(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Ob
}
EOLIAN static Efl_Ui_Theme_Apply
-_efl_ui_image_elm_widget_theme_apply(Eo *obj, Efl_Ui_Image_Data *sd EINA_UNUSED)
+_efl_ui_image_efl_ui_widget_theme_apply(Eo *obj, Efl_Ui_Image_Data *sd EINA_UNUSED)
{
Efl_Ui_Theme_Apply int_ret = EFL_UI_THEME_APPLY_FAILED;
@@ -762,12 +756,12 @@ _efl_ui_image_sizing_eval(Evas_Object *obj)
EFL_UI_IMAGE_DATA_GET_OR_RETURN(obj, sd);
_efl_ui_image_internal_sizing_eval(obj, sd);
- efl_image_smooth_scale_set(obj, sd->smooth);
+ efl_gfx_image_smooth_scale_set(obj, sd->smooth);
if (sd->no_scale)
_efl_ui_image_internal_scale_set(obj, sd, 1.0);
else
- _efl_ui_image_internal_scale_set(obj, sd, efl_gfx_scale_get(obj) * elm_config_scale_get());
+ _efl_ui_image_internal_scale_set(obj, sd, efl_gfx_entity_scale_get(obj) * elm_config_scale_get());
ts = sd->scale;
sd->scale = 1.0;
@@ -845,32 +839,19 @@ _efl_ui_image_file_set_do(Evas_Object *obj)
}
static void
-_on_size_hints_changed(void *data, const Efl_Event *ev)
-{
- _efl_ui_image_internal_sizing_eval(ev->object, data);
-}
-
-EAPI Evas_Object *
-elm_image_add(Evas_Object *parent)
+_on_size_hints_changed(void *data EINA_UNUSED, const Efl_Event *ev)
{
- EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
- Evas_Object *obj = elm_legacy_add(MY_CLASS, parent);
- EFL_UI_IMAGE_DATA_GET(obj, priv);
-
- efl_event_callback_add(obj, EFL_GFX_EVENT_CHANGE_SIZE_HINTS, _on_size_hints_changed, priv);
-
- return obj;
+ _efl_ui_image_sizing_eval(ev->object);
}
EOLIAN static Eo *
_efl_ui_image_efl_object_constructor(Eo *obj, Efl_Ui_Image_Data *pd)
{
obj = efl_constructor(efl_super(obj, MY_CLASS));
- efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
- efl_access_role_set(obj, EFL_ACCESS_ROLE_IMAGE);
+ efl_access_object_role_set(obj, EFL_ACCESS_ROLE_IMAGE);
- pd->scale_type = EFL_IMAGE_SCALE_TYPE_FIT_INSIDE;
+ pd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE;
pd->self = obj;
return obj;
@@ -946,7 +927,7 @@ _efl_ui_image_smart_internal_file_set(Eo *obj, Efl_Ui_Image_Data *sd,
evas_object_image_preload(sd->img, EINA_FALSE);
}
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
return EINA_TRUE;
}
@@ -964,7 +945,7 @@ _efl_ui_image_remote_copier_cancel(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
Eo *copier = sd->remote.copier;
if (!copier) return;
- /* copier is flagged as close_on_destructor, thus:
+ /* copier is flagged as close_on_invalidate, thus:
* efl_del()
* -> efl_io_closer_close()
* -> "done" event
@@ -1075,7 +1056,7 @@ _efl_ui_image_download(Eo *obj, Efl_Ui_Image_Data *sd, const char *url, const ch
sd->remote.copier = efl_add(EFL_IO_COPIER_CLASS, obj,
efl_io_copier_source_set(efl_added, dialer),
- efl_io_closer_close_on_destructor_set(efl_added, EINA_TRUE),
+ efl_io_closer_close_on_invalidate_set(efl_added, EINA_TRUE),
efl_event_callback_array_add(efl_added, _efl_ui_image_remote_copier_cbs(), obj));
EINA_SAFETY_ON_NULL_GOTO(sd->remote.copier, error_copier);
eina_stringshare_replace(&sd->remote.key, key);
@@ -1143,11 +1124,11 @@ _efl_ui_image_efl_file_file_set(Eo *obj, Efl_Ui_Image_Data *sd, const char *file
sd->anim = EINA_FALSE;
}
- if (!file && !sd->prev_img) return EINA_FALSE;
- else if (!file && sd->prev_img)
+ if (!file)
{
- _prev_img_del(sd);
- return EINA_TRUE;
+ if (sd->prev_img)
+ _prev_img_del(sd);
+ return _efl_ui_image_smart_internal_file_set(obj, sd, file, NULL, key);;
}
if (_efl_ui_image_is_remote(file))
@@ -1176,7 +1157,7 @@ _efl_ui_image_efl_layout_signal_signal_emit(Eo *obj EINA_UNUSED, Efl_Ui_Image_Da
}
EOLIAN static Eina_Size2D
-_efl_ui_image_efl_layout_group_group_size_min_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_layout_group_group_size_min_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
if (sd->edje)
return efl_layout_group_size_min_get(sd->img);
@@ -1185,7 +1166,7 @@ _efl_ui_image_efl_layout_group_group_size_min_get(Eo *obj EINA_UNUSED, Efl_Ui_Im
}
EOLIAN static Eina_Size2D
-_efl_ui_image_efl_layout_group_group_size_max_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_layout_group_group_size_max_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
if (sd->edje)
return efl_layout_group_size_max_get(sd->img);
@@ -1213,7 +1194,7 @@ _efl_ui_image_efl_layout_calc_calc_size_min(Eo *obj EINA_UNUSED, Efl_Ui_Image_Da
}
EOLIAN static void
-_efl_ui_image_efl_file_file_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, const char **file, const char **key)
+_efl_ui_image_efl_file_file_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, const char **file, const char **key)
{
if (sd->async.th)
{
@@ -1257,7 +1238,7 @@ elm_image_async_open_set(Eo *obj, Eina_Bool async)
}
EOLIAN static Eina_Size2D
-_efl_ui_image_efl_gfx_view_view_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_gfx_view_view_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
int tw, th;
@@ -1270,12 +1251,12 @@ _efl_ui_image_efl_gfx_view_view_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data
}
EOLIAN static Eina_Size2D
-_efl_ui_image_efl_image_image_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_gfx_image_image_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
if (sd->edje)
return EINA_SIZE2D(0, 0);
- return efl_image_size_get(sd->img);
+ return efl_gfx_image_size_get(sd->img);
}
EAPI void
@@ -1283,11 +1264,11 @@ elm_image_prescale_set(Evas_Object *obj,
int size)
{
EFL_UI_IMAGE_CHECK(obj);
- efl_image_load_size_set(obj, EINA_SIZE2D(size, size));
+ efl_gfx_image_load_controller_load_size_set(obj, EINA_SIZE2D(size, size));
}
EOLIAN static void
-_efl_ui_image_efl_image_load_load_size_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Size2D sz)
+_efl_ui_image_efl_gfx_image_load_controller_load_size_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Size2D sz)
{
sd->load_size = sz;
_efl_ui_image_load_size_set_internal(obj, sd);
@@ -1299,13 +1280,13 @@ elm_image_prescale_get(const Evas_Object *obj)
Eina_Size2D sz;
EFL_UI_IMAGE_CHECK(obj) 0;
- sz = efl_image_load_size_get(obj);
+ sz = efl_gfx_image_load_controller_load_size_get(obj);
return MAX(sz.w, sz.h);
}
EOLIAN static Eina_Size2D
-_efl_ui_image_efl_image_load_load_size_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_gfx_image_load_controller_load_size_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->load_size;
}
@@ -1319,30 +1300,30 @@ _efl_ui_image_efl_orientation_orientation_set(Eo *obj, Efl_Ui_Image_Data *sd, Ef
efl_orientation_set(sd->img, orient);
sd->orient = orient;
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
}
EOLIAN static Efl_Orient
-_efl_ui_image_efl_orientation_orientation_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_orientation_orientation_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->orient;
}
EOLIAN static void
-_efl_ui_image_efl_flipable_flip_set(Eo *obj, Efl_Ui_Image_Data *sd, Efl_Flip flip)
+_efl_ui_image_efl_orientation_flip_set(Eo *obj, Efl_Ui_Image_Data *sd, Efl_Flip flip)
{
if (sd->edje) return;
if (sd->flip == flip) return;
- efl_flip_set(sd->img, flip);
+ efl_orientation_flip_set(sd->img, flip);
sd->flip = flip;
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
}
EOLIAN static Efl_Flip
-_efl_ui_image_efl_flipable_flip_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_orientation_flip_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->flip;
}
@@ -1382,7 +1363,7 @@ _efl_ui_image_efl_ui_draggable_drag_target_set(Eo *obj, Efl_Ui_Image_Data *sd, E
}
EOLIAN static Eina_Bool
-_efl_ui_image_efl_ui_draggable_drag_target_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_ui_draggable_drag_target_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->edit;
}
@@ -1394,7 +1375,7 @@ elm_image_animated_available_get(const Evas_Object *obj)
}
EOLIAN static Eina_Bool
-_efl_ui_image_efl_player_playable_get(Eo *obj, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_player_playable_get(const Eo *obj, Efl_Ui_Image_Data *sd)
{
if (sd->edje) return EINA_TRUE;
@@ -1513,29 +1494,23 @@ _efl_ui_image_efl_player_play_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool play
}
EOLIAN static Eina_Bool
-_efl_ui_image_efl_player_play_get(Eo *obj, Efl_Ui_Image_Data *sd)
+_efl_ui_image_efl_player_play_get(const Eo *obj, Efl_Ui_Image_Data *sd)
{
return _efl_ui_image_animated_play_get_internal(obj, sd);
}
-static void
-_efl_ui_image_class_constructor(Efl_Class *klass)
-{
- evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
-}
-
EOLIAN static void
-_efl_ui_image_efl_image_scale_type_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd EINA_UNUSED, Efl_Image_Scale_Type scale_type)
+_efl_ui_image_efl_gfx_image_scale_type_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd EINA_UNUSED, Efl_Gfx_Image_Scale_Type scale_type)
{
if (scale_type == sd->scale_type) return;
sd->scale_type = scale_type;
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
}
-EOLIAN static Efl_Image_Scale_Type
-_efl_ui_image_efl_image_scale_type_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+EOLIAN static Efl_Gfx_Image_Scale_Type
+_efl_ui_image_efl_gfx_image_scale_type_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->scale_type;
}
@@ -1548,11 +1523,11 @@ _efl_ui_image_scalable_set(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool up, Eina_Bo
sd->scale_up = !!up;
sd->scale_down = !!down;
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
}
EOLIAN static void
-_efl_ui_image_scalable_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, Eina_Bool *scale_up, Eina_Bool *scale_down)
+_efl_ui_image_scalable_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, Eina_Bool *scale_up, Eina_Bool *scale_down)
{
if (scale_up) *scale_up = sd->scale_up;
if (scale_down) *scale_down = sd->scale_down;
@@ -1576,11 +1551,11 @@ _efl_ui_image_align_set(Eo *obj, Efl_Ui_Image_Data *sd, double align_x, double a
sd->align_x = align_x;
sd->align_y = align_y;
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
}
EOLIAN static void
-_efl_ui_image_align_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, double *align_x, double *align_y)
+_efl_ui_image_align_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, double *align_x, double *align_y)
{
if (align_x) *align_x = sd->align_x;
if (align_y) *align_y = sd->align_y;
@@ -1588,27 +1563,31 @@ _efl_ui_image_align_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, double *alig
// A11Y
-EOLIAN static void
-_efl_ui_image_efl_access_image_extents_get(Eo *obj, Efl_Ui_Image_Data *sd EINA_UNUSED, Eina_Bool screen_coords, int *x, int *y, int *w, int *h)
+EOLIAN static Eina_Rect
+_efl_ui_image_efl_access_component_extents_get(const Eo *obj, Efl_Ui_Image_Data *sd EINA_UNUSED, Eina_Bool screen_coords)
{
int ee_x, ee_y;
+ Eina_Rect r;
Evas_Object *image = elm_image_object_get(obj);
- if (!image) return;
- evas_object_geometry_get(image, x, y, NULL, NULL);
+ r.x = r.y = r.w = r.h = -1;
+ if (!image) return r;
+
+ evas_object_geometry_get(image, &r.x, &r.y, NULL, NULL);
if (screen_coords)
{
Ecore_Evas *ee = ecore_evas_ecore_evas_get(evas_object_evas_get(image));
- if (!ee) return;
+ if (!ee) return r;
ecore_evas_geometry_get(ee, &ee_x, &ee_y, NULL, NULL);
- if (x) *x += ee_x;
- if (y) *y += ee_y;
+ r.x += ee_x;
+ r.y += ee_y;
}
- elm_image_object_size_get(obj, w, h);
+ elm_image_object_size_get(obj, &r.w, &r.h);
+ return r;
}
EOLIAN const Efl_Access_Action_Data *
-_efl_ui_image_efl_access_widget_action_elm_actions_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *pd EINA_UNUSED)
+_efl_ui_image_efl_access_widget_action_elm_actions_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *pd EINA_UNUSED)
{
static Efl_Access_Action_Data atspi_actions[] = {
{ "activate", "activate", NULL, _key_action_activate },
@@ -1786,167 +1765,117 @@ _efl_ui_image_icon_set(Eo *obj, Efl_Ui_Image_Data *_pd EINA_UNUSED, const char *
}
EOLIAN static const char*
-_efl_ui_image_icon_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
+_efl_ui_image_icon_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->stdicon;
}
-static void
-_prop_future_error_cb(void* data, Efl_Event const* event EINA_UNUSED)
+void
+_update_viewmodel(Eo *obj, Efl_Ui_Image_Data *pd)
{
- Eo *obj = data;
- EFL_UI_IMAGE_DATA_GET(obj, pd);
- pd->pfuture = NULL;
-}
+ Eina_Value *vfile = NULL;
+ Eina_Value *vkey = NULL;
+ Eina_File *f = NULL;
+ char *file = NULL;
+ char *key = NULL;
-static void
-_prop_key_future_then_cb(void* data, Efl_Event const * event)
-{
- Eo *obj = data;
- Eina_Accessor *acc = (Eina_Accessor *)((Efl_Future_Event_Success*)event->info)->value;
- Eina_Value *value;
- char *filename, *key;
+ if (!pd->property.model) return ;
- EFL_UI_IMAGE_DATA_GET(obj, pd);
- pd->pfuture = NULL;
+ vfile = efl_model_property_get(pd->property.model, pd->property.file);
+ if (!vfile) return;
+ vkey = efl_model_property_get(pd->property.model, pd->property.key);
- if (eina_accessor_data_get(acc, 0, (void **)&value) && value)
- {
- filename = eina_value_to_string(value);
- }
- else return;
+ if (eina_value_type_get(vfile) == EINA_VALUE_TYPE_ERROR)
+ goto err;
- if (eina_accessor_data_get(acc, 1, (void **)&value) && value)
+ if (pd->property.icon)
{
- key = eina_value_to_string(value);
+ file = eina_value_to_string(vfile);
+
+ efl_ui_image_icon_set(obj, file);
}
else
{
- free(filename);
- return;
- }
-
- elm_image_file_set(obj, filename, key);
- free(filename);
- free(key);
-}
-
-static void
-_prop_future_then_cb(void* data, Efl_Event const * event)
-{
- Eo *obj = data;
- Eina_Value *value = (Eina_Value*)((Efl_Future_Event_Success*)event->info)->value;
- char *text;
- EFL_UI_IMAGE_DATA_GET(obj, pd);
- pd->pfuture = NULL;
+ if (vkey && eina_value_type_get(vkey) != EINA_VALUE_TYPE_ERROR)
+ key = eina_value_to_string(vkey);
+ if (eina_value_type_get(vfile) == EINA_VALUE_TYPE_FILE)
+ {
+ eina_value_get(vfile, &f);
- const Eina_Value_Type *vtype = eina_value_type_get(value);
+ efl_file_mmap_set(obj, f, key);
+ }
+ else
+ {
+ file = eina_value_to_string(vfile);
- if (vtype == EINA_VALUE_TYPE_STRING || vtype == EINA_VALUE_TYPE_STRINGSHARE)
- {
- eina_value_get(value, &text);
- if (pd->con_icon) efl_ui_image_icon_set(obj, text);
- else elm_image_file_set(obj, text, NULL);
- }
- else
- {
- text = eina_value_to_string(value);
- if (pd->con_icon) efl_ui_image_icon_set(obj, text);
- else elm_image_file_set(obj, text, NULL);
- free(text);
+ efl_file_set(obj, file, key);
+ }
}
-}
-void
-_update_viewmodel(Eo *obj, Efl_Ui_Image_Data *pd)
-{
- if (pd->model && pd->prop_con)
- {
- if (pd->pfuture) efl_future_cancel(pd->pfuture);
-
- pd->pfuture = efl_model_property_get(pd->model, pd->prop_con);
-
- if (pd->prop_key)
- {
- const Eina_Array *properties;
- Eina_Array_Iterator it;
- char *property;
- unsigned int i = 0;
-
- properties = efl_model_properties_get(pd->model);
- EINA_ARRAY_ITER_NEXT(properties, i, property, it)
- {
- if (strcmp(property, pd->prop_key) == 0)
- {
- Efl_Future *futures[2] = {NULL,};
- futures[0] = pd->pfuture;
- futures[1] = efl_model_property_get(pd->model, pd->prop_key);
- pd->pfuture = efl_future_all(futures[0], futures[1]);
- efl_future_then(pd->pfuture, &_prop_key_future_then_cb,
- &_prop_future_error_cb, NULL, obj);
- return;
- }
- }
- }
-
- efl_future_then(pd->pfuture, &_prop_future_then_cb,
- &_prop_future_error_cb, NULL, obj);
- }
+ free(file);
+ free(key);
+err:
+ eina_value_free(vfile);
+ eina_value_free(vkey);
}
static void
_efl_ui_image_model_properties_changed_cb(void *data, const Efl_Event *event)
{
Efl_Model_Property_Event *evt = event->info;
+ Eina_Array_Iterator it;
Eo *obj = data;
+ const char *prop;
+ unsigned int i;
+ Eina_Bool refresh = EINA_FALSE;
EFL_UI_IMAGE_DATA_GET(obj, pd);
if (!evt->changed_properties)
return;
- if (pd->model && pd->prop_con)
+ EINA_ARRAY_ITER_NEXT(evt->changed_properties, i, prop, it)
{
- Eina_Array_Iterator it;
- const char *prop;
- unsigned int i;
-
- EINA_ARRAY_ITER_NEXT(evt->changed_properties, i, prop, it)
- {
- if (!strcmp(pd->prop_con, prop) || (pd->prop_key && !strcmp(pd->prop_key, prop)))
- {
- _update_viewmodel(obj, pd);
- return;
- }
- }
+ if (pd->property.file &&
+ (pd->property.file == prop || !strcmp(pd->property.file, prop)))
+ {
+ refresh = EINA_TRUE;
+ break ;
+ }
+ if (pd->property.key &&
+ (pd->property.key == prop || !strcmp(pd->property.key, prop)))
+ {
+ refresh = EINA_TRUE;
+ break ;
+ }
}
+
+ if (refresh) _update_viewmodel(obj, pd);
}
EOLIAN static void
_efl_ui_image_efl_ui_view_model_set(Eo *obj, Efl_Ui_Image_Data *pd, Efl_Model *model)
{
- if (pd->model)
+ if (pd->property.model)
{
- efl_event_callback_del(pd->model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
- _efl_ui_image_model_properties_changed_cb, obj);
- efl_unref(pd->model);
- pd->model = NULL;
+ efl_event_callback_del(pd->property.model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
+ _efl_ui_image_model_properties_changed_cb, obj);
}
+ efl_replace(&pd->property.model, model);
+
if (model)
{
- pd->model = model;
- efl_ref(pd->model);
- efl_event_callback_add(pd->model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
- _efl_ui_image_model_properties_changed_cb, obj);
+ efl_event_callback_add(model, EFL_MODEL_EVENT_PROPERTIES_CHANGED,
+ _efl_ui_image_model_properties_changed_cb, obj);
}
_update_viewmodel(obj, pd);
}
EOLIAN static Efl_Model *
-_efl_ui_image_efl_ui_view_model_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *pd)
+_efl_ui_image_efl_ui_view_model_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *pd)
{
- return pd->model;
+ return pd->property.model;
}
EOLIAN static void
@@ -1954,18 +1883,18 @@ _efl_ui_image_efl_ui_model_connect_connect(Eo *obj, Efl_Ui_Image_Data *pd, const
{
if (strcmp(name, "filename") == 0)
{
- pd->con_icon = EINA_FALSE;
- eina_stringshare_replace(&pd->prop_con, property);
+ pd->property.icon = EINA_FALSE;
+ eina_stringshare_replace(&pd->property.file, property);
}
else if (strcmp(name, "icon") == 0)
{
- pd->con_icon = EINA_TRUE;
- eina_stringshare_replace(&pd->prop_con, property);
- eina_stringshare_replace(&pd->prop_key, NULL);
+ pd->property.icon = EINA_TRUE;
+ eina_stringshare_replace(&pd->property.file, property);
+ eina_stringshare_replace(&pd->property.key, NULL);
}
else if (strcmp(name, "key") == 0)
{
- eina_stringshare_replace(&pd->prop_key, property);
+ eina_stringshare_replace(&pd->property.key, property);
}
else return;
@@ -1976,7 +1905,7 @@ EAPI void
elm_image_smooth_set(Evas_Object *obj, Eina_Bool smooth)
{
EINA_SAFETY_ON_FALSE_RETURN(efl_isa(obj, MY_CLASS));
- efl_image_smooth_scale_set(obj, smooth);
+ efl_gfx_image_smooth_scale_set(obj, smooth);
_efl_ui_image_sizing_eval(obj);
}
@@ -1984,7 +1913,7 @@ EAPI Eina_Bool
elm_image_smooth_get(const Evas_Object *obj)
{
EINA_SAFETY_ON_FALSE_RETURN_VAL(efl_isa(obj, MY_CLASS), EINA_FALSE);
- return efl_image_smooth_scale_get(obj);
+ return efl_gfx_image_smooth_scale_get(obj);
}
// A11Y - END
@@ -2029,6 +1958,8 @@ elm_image_mmap_set(Evas_Object *obj, const Eina_File *file, const char *group)
EAPI Eina_Bool
elm_image_memfile_set(Evas_Object *obj, const void *img, size_t size, const char *format, const char *key)
{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(img, EINA_FALSE);
+
Evas_Load_Error err;
EFL_UI_IMAGE_CHECK(obj) EINA_FALSE;
@@ -2060,7 +1991,7 @@ elm_image_memfile_set(Evas_Object *obj, const void *img, size_t size, const char
return EINA_FALSE;
}
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
return EINA_TRUE;
}
@@ -2078,13 +2009,13 @@ elm_image_fill_outside_set(Evas_Object *obj, Eina_Bool fill_outside)
if (sd->aspect_fixed)
{
- if (sd->fill_inside) sd->scale_type = EFL_IMAGE_SCALE_TYPE_FIT_INSIDE;
- else sd->scale_type = EFL_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
+ if (sd->fill_inside) sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE;
+ else sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
}
else
- sd->scale_type = EFL_IMAGE_SCALE_TYPE_FILL;
+ sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FILL;
- _efl_ui_image_internal_sizing_eval(obj, sd);
+ _efl_ui_image_sizing_eval(obj);
}
EAPI Eina_Bool
@@ -2128,6 +2059,7 @@ elm_image_orient_set(Evas_Object *obj, Elm_Image_Orient orient)
Efl_Orient dir;
Efl_Flip flip;
+ EFL_UI_IMAGE_CHECK(obj);
EFL_UI_IMAGE_DATA_GET(obj, sd);
sd->image_orient = orient;
@@ -2172,7 +2104,7 @@ elm_image_orient_set(Evas_Object *obj, Elm_Image_Orient orient)
}
efl_orientation_set(obj, dir);
- efl_flip_set(obj, flip);
+ efl_orientation_flip_set(obj, flip);
}
EAPI Elm_Image_Orient
@@ -2251,11 +2183,11 @@ elm_image_aspect_fixed_set(Evas_Object *obj, Eina_Bool fixed)
if (sd->aspect_fixed)
{
- if (sd->fill_inside) sd->scale_type = EFL_IMAGE_SCALE_TYPE_FIT_INSIDE;
- else sd->scale_type = EFL_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
+ if (sd->fill_inside) sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE;
+ else sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
}
else
- sd->scale_type = EFL_IMAGE_SCALE_TYPE_FILL;
+ sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FILL;
_efl_ui_image_sizing_eval(obj);
}
@@ -2278,3 +2210,35 @@ ELM_WIDGET_KEY_DOWN_DEFAULT_IMPLEMENT(efl_ui_image, Efl_Ui_Image_Data)
EFL_CANVAS_GROUP_ADD_DEL_OPS(efl_ui_image)
#include "efl_ui_image.eo.c"
+
+#include "efl_ui_image_legacy.eo.h"
+
+#define MY_CLASS_NAME_LEGACY "elm_image"
+
+static void
+_efl_ui_image_legacy_class_constructor(Efl_Class *klass)
+{
+ evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
+}
+
+EOLIAN static Eo *
+_efl_ui_image_legacy_efl_object_constructor(Eo *obj, void *pd EINA_UNUSED)
+{
+ obj = efl_constructor(efl_super(obj, EFL_UI_IMAGE_LEGACY_CLASS));
+ efl_canvas_object_type_set(obj, MY_CLASS_NAME_LEGACY);
+ return obj;
+}
+
+EAPI Evas_Object *
+elm_image_add(Evas_Object *parent)
+{
+ EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
+ Evas_Object *obj = elm_legacy_add(EFL_UI_IMAGE_LEGACY_CLASS, parent);
+ EFL_UI_IMAGE_DATA_GET(obj, priv);
+
+ efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_CHANGE_SIZE_HINTS, _on_size_hints_changed, priv);
+
+ return obj;
+}
+
+#include "efl_ui_image_legacy.eo.c"