summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2019-08-21 12:53:46 -0400
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2019-08-23 07:33:54 +0200
commit7442ae70920764ca27ae3b3c97d5831ded5f913e (patch)
tree52e30e5aa3aa2734dc8714edebbf85d2610a7b9f
parent28fff167393ec501e6708501980e5428e6e94baa (diff)
downloadefl-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.c83
-rw-r--r--src/lib/elementary/efl_ui_widget_image.h2
-rw-r--r--src/lib/elementary/elm_icon.c2
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;
}