diff options
author | Mike Blumenkrantz <zmike@samsung.com> | 2019-08-21 12:53:46 -0400 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-08-23 07:33:54 +0200 |
commit | 7442ae70920764ca27ae3b3c97d5831ded5f913e (patch) | |
tree | 52e30e5aa3aa2734dc8714edebbf85d2610a7b9f | |
parent | 28fff167393ec501e6708501980e5428e6e94baa (diff) | |
download | efl-7442ae70920764ca27ae3b3c97d5831ded5f913e.tar.gz |
efl_ui/image: remove geometry from internal struct, clean up geometry methods
these methods exist only to trigger efl_canvas_group_change on geometry
change and apply image sizing policies, there's no need to duplicate existing
functionality as well
Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D9687
-rw-r--r-- | src/lib/elementary/efl_ui_image.c | 83 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_widget_image.h | 2 | ||||
-rw-r--r-- | src/lib/elementary/elm_icon.c | 2 |
3 files changed, 36 insertions, 51 deletions
diff --git a/src/lib/elementary/efl_ui_image.c b/src/lib/elementary/efl_ui_image.c index 47d0b3a3f8..28ae1b04e7 100644 --- a/src/lib/elementary/efl_ui_image.c +++ b/src/lib/elementary/efl_ui_image.c @@ -164,16 +164,18 @@ _img_new(Evas_Object *obj) } static void -_image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) +_image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, Evas_Object *img) { Evas_Coord x = 0, y = 0, w = 1, h = 1; + int ox, oy, ow, oh; + evas_object_geometry_get(obj, &ox, &oy, &ow, &oh); if (efl_isa(img, EFL_CANVAS_LAYOUT_CLASS)) { - x = sd->img_x; - y = sd->img_y; - w = sd->img_w; - h = sd->img_h; + x = ox; + y = oy; + w = ow; + h = oh; goto done; } else @@ -185,7 +187,7 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) evas_object_image_size_get(img, &iw, &ih); //Exception Case - if ((iw == 0) || (ih == 0) || (sd->img_w == 0) || (sd->img_h == 0)) + if ((iw == 0) || (ih == 0) || (ow == 0) || (oh == 0)) { evas_object_resize(img, 0, 0); evas_object_resize(sd->hit_rect, 0, 0); @@ -199,7 +201,7 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) if (ih < 1) ih = 1; //2. Calculate internal image size (w x h) - // according to (iw x ih), (sd->img_w x sd->img_h), and scale_type + // according to (iw x ih), (ow x oh), and scale_type switch (sd->scale_type) { case EFL_GFX_IMAGE_SCALE_TYPE_NONE: @@ -207,16 +209,16 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) h = ih; break; case EFL_GFX_IMAGE_SCALE_TYPE_FILL: - w = sd->img_w; - h = sd->img_h; + w = ow; + h = oh; break; case EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE: - w = sd->img_w; + w = ow; h = ((double)ih * w) / (double)iw; - if (h > sd->img_h) + if (h > oh) { - h = sd->img_h; + h = oh; w = ((double)iw * h) / (double)ih; } @@ -228,11 +230,11 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) } break; case EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE: - w = sd->img_w; + w = ow; h = ((double)ih * w) / (double)iw; - if (h < sd->img_h) + if (h < oh) { - h = sd->img_h; + h = oh; w = ((double)iw * h) / (double)ih; } @@ -244,10 +246,7 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) } break; case EFL_GFX_IMAGE_SCALE_TYPE_TILE: - x = sd->img_x; - y = sd->img_y; - w = sd->img_w; - h = sd->img_h; + evas_object_geometry_get(obj, &x, &y, &w, &h); evas_object_image_fill_set(img, x, y, iw, ih); goto done; } @@ -255,8 +254,8 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) //3. Calculate offset according to align value if (!elm_widget_is_legacy(sd->self)) { - offset_x = ((sd->img_w - w) * sd->align_x); - offset_y = ((sd->img_h - h) * sd->align_y); + offset_x = ((ow - w) * sd->align_x); + offset_y = ((oh - h) * sd->align_y); } else { @@ -264,12 +263,12 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) 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); + offset_x = ((ow - w) * alignh); + offset_y = ((oh - h) * alignv); } - x = sd->img_x + offset_x; - y = sd->img_y + offset_y; + x = ox + offset_x; + y = oy + offset_y; //4. Fill, move, resize if (offset_x >= 0) offset_x = 0; @@ -279,13 +278,13 @@ _image_sizing_eval(Efl_Ui_Image_Data *sd, Evas_Object *img) if (offset_x < 0) { - x = sd->img_x; - w = sd->img_w; + x = ox; + w = ow; } if (offset_y < 0) { - y = sd->img_y; - h = sd->img_h; + y = oy; + h = oh; } } done: @@ -625,38 +624,26 @@ _efl_ui_image_efl_canvas_group_group_del(Eo *obj, Efl_Ui_Image_Data *sd) efl_canvas_group_del(efl_super(obj, MY_CLASS)); } +/* this function exists solely to call efl_canvas_group_change */ EOLIAN static void -_efl_ui_image_efl_gfx_entity_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_UNUSED, Eina_Position2D pos) { if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_MOVE, 0, pos.x, pos.y)) return; 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_canvas_group_change(obj); } +/* this function exists solely to call efl_canvas_group_change */ EOLIAN static void -_efl_ui_image_efl_gfx_entity_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_UNUSED, Eina_Size2D sz) { if (_evas_object_intercept_call(obj, EVAS_OBJECT_INTERCEPT_CB_RESIZE, 0, sz.w, sz.h)) return; - if ((sd->img_w == sz.w) && (sd->img_h == sz.h)) goto super; - - sd->img_w = sz.w; - sd->img_h = sz.h; - - /* takes care of resizing */ - efl_canvas_group_change(obj); - -super: efl_gfx_entity_size_set(efl_super(obj, MY_CLASS), sz); + efl_canvas_group_change(obj); } static void @@ -809,8 +796,8 @@ _efl_ui_image_efl_canvas_group_group_calculate(Eo *obj, Efl_Ui_Image_Data *sd) if (!sd->edje) efl_gfx_image_orientation_set(sd->img, sd->orient); - _image_sizing_eval(sd, sd->img); - if (sd->prev_img) _image_sizing_eval(sd, sd->prev_img); + _image_sizing_eval(obj, sd, sd->img); + if (sd->prev_img) _image_sizing_eval(obj, sd, sd->prev_img); } sd->in_calc = EINA_FALSE; } diff --git a/src/lib/elementary/efl_ui_widget_image.h b/src/lib/elementary/efl_ui_widget_image.h index 17b3dcbf79..aafb8bd81f 100644 --- a/src/lib/elementary/efl_ui_widget_image.h +++ b/src/lib/elementary/efl_ui_widget_image.h @@ -58,8 +58,6 @@ struct _Efl_Ui_Image_Data double frame_duration; double align_x, align_y; - Evas_Coord img_x, img_y, img_w, img_h; - Eina_Size2D load_size; int frame_count; int cur_frame; diff --git a/src/lib/elementary/elm_icon.c b/src/lib/elementary/elm_icon.c index ff3254cb4f..910933d22f 100644 --- a/src/lib/elementary/elm_icon.c +++ b/src/lib/elementary/elm_icon.c @@ -361,7 +361,7 @@ _elm_icon_efl_file_load(Eo *obj, Elm_Icon_Data *sd) return err; } - evas_object_geometry_set(id->img, id->img_x, id->img_y, id->img_w, id->img_h); + efl_gfx_entity_geometry_set(id->img, efl_gfx_entity_geometry_get(obj)); return 0; } |