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;
 };
 
 /**

-- 


Reply via email to