ami pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=2faeffde718525685f5a270164a0c1ff2c65343a
commit 2faeffde718525685f5a270164a0c1ff2c65343a Author: Amitesh Singh <[email protected]> Date: Thu Jul 6 16:14:06 2017 +0900 efl.ui.image: fix the old align behaviour in img. After ab23a5309490d726fe, evas_object_size_hint_align_set() has stopped working on elm img and that patch was perfectly right to do so but we don't change the old behaviour. This patch is an effort to make evas_object_size_hint_align_set() to work with elm img again. make sure not to mix both eo apis and legacy apis. Thanks to dave for reporting and jpeg to show the right fix. fixes T4635 --- src/lib/elementary/efl_ui_image.c | 36 ++++++++++++++++++++++++++++---- src/lib/elementary/efl_ui_widget_image.h | 1 + 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c index b4e4a0a695..a9f07bb8bf 100644 --- a/src/lib/elementary/efl_ui_image.c +++ b/src/lib/elementary/efl_ui_image.c @@ -49,6 +49,7 @@ static Eina_Bool _efl_ui_image_smart_internal_file_set(Eo *obj, Efl_Ui_Image_Dat static void _efl_ui_image_remote_copier_cancel(Eo *obj, Efl_Ui_Image_Data *sd); void _efl_ui_image_sizing_eval(Evas_Object *obj); static void _efl_ui_image_model_properties_changed_cb(void *data, const Efl_Event *event); +static void _on_size_hints_changed(void *data, const Efl_Event *e); static const Elm_Action key_actions[] = { {"activate", _key_action_activate}, @@ -149,7 +150,7 @@ _img_new(Evas_Object *obj) } static void -_efl_ui_image_internal_sizing_eval(Evas_Object *obj EINA_UNUSED, Efl_Ui_Image_Data *sd) +_efl_ui_image_internal_sizing_eval(Evas_Object *obj, Efl_Ui_Image_Data *sd) { if (!sd->img) return; @@ -164,7 +165,7 @@ _efl_ui_image_internal_sizing_eval(Evas_Object *obj EINA_UNUSED, Efl_Ui_Image_Da else { Evas_Coord x = 0, y = 0, w = 1, h = 1; - + double alignh = 0.5, alignv = 0.5; int iw = 0, ih = 0, offset_x = 0, offset_y = 0; //1. Get the original image size (iw x ih) @@ -224,8 +225,20 @@ _efl_ui_image_internal_sizing_eval(Evas_Object *obj EINA_UNUSED, Efl_Ui_Image_Da } //3. Calculate offset according to align value - offset_x = ((sd->img_w - w) * sd->align_x); - offset_y = ((sd->img_h - h) * sd->align_y); + if (!sd->legacy_align) + { + offset_x = ((sd->img_w - w) * sd->align_x); + offset_y = ((sd->img_h - h) * sd->align_y); + } + else + { + evas_object_size_hint_align_get(obj, &alignh, &alignv); + if (EINA_DBL_EQ(alignh, EVAS_HINT_FILL)) alignh = 0.5; + if (EINA_DBL_EQ(alignv, EVAS_HINT_FILL)) alignv = 0.5; + + offset_x = ((sd->img_w - w) * alignh); + offset_y = ((sd->img_h - h) * alignv); + } x = sd->img_x + offset_x; y = sd->img_y + offset_y; @@ -564,6 +577,9 @@ _efl_ui_image_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Data *priv) EOLIAN static void _efl_ui_image_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Image_Data *sd) { + if (sd->legacy_align) + efl_event_callback_del(obj, EFL_GFX_EVENT_CHANGE_SIZE_HINTS, + _on_size_hints_changed, sd); ecore_timer_del(sd->anim_timer); evas_object_del(sd->img); _prev_img_del(sd); @@ -825,11 +841,22 @@ _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) { EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL); Evas_Object *obj = efl_add(MY_CLASS, parent); + EFL_UI_IMAGE_DATA_GET(obj, priv); + + priv->legacy_align = EINA_TRUE; + efl_event_callback_add(obj, EFL_GFX_EVENT_CHANGE_SIZE_HINTS, _on_size_hints_changed, priv); + return obj; } @@ -1531,6 +1558,7 @@ _efl_ui_image_scalable_get(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, Eina_Bool EOLIAN static void _efl_ui_image_align_set(Eo *obj, Efl_Ui_Image_Data *sd, double align_x, double align_y) { + sd->legacy_align = EINA_FALSE; if (align_x > 1.0) align_x = 1.0; else if (align_x < 0.0) diff --git a/src/lib/elementary/efl_ui_widget_image.h b/src/lib/elementary/efl_ui_widget_image.h index 92cf185ab3..4c91f8faa3 100644 --- a/src/lib/elementary/efl_ui_widget_image.h +++ b/src/lib/elementary/efl_ui_widget_image.h @@ -103,6 +103,7 @@ struct _Efl_Ui_Image_Data Eina_Bool scale_up : 1; Eina_Bool scale_down : 1; Eina_Bool con_icon : 1; + Eina_Bool legacy_align : 1; }; /** --
