bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=ad0c8055451fcb047e505ba42505d51092a100e4

commit ad0c8055451fcb047e505ba42505d51092a100e4
Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Aug 21 15:27:53 2019 -0400

    efl/gfx: redo image scale_type enum
    
    this is ideally a bit more clear and flexible than the previous enum names
    
    Reviewed-by: Cedric BAIL <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D9691
---
 src/bin/elementary/test_bg.c                    | 21 ++++++----
 src/bin/elementary/test_image.c                 |  6 ++-
 src/bin/elementary/test_part_bg.c               |  2 +-
 src/bin/elementary/test_ui_image.c              |  6 ++-
 src/examples/elementary/efl_ui_list_example_1.c |  2 +-
 src/lib/efl/interfaces/efl_gfx_image.eo         | 26 ++++++++----
 src/lib/elementary/efl_ui_bg.c                  | 12 +++---
 src/lib/elementary/efl_ui_image.c               | 54 +++++++++++++++----------
 src/lib/elementary/efl_ui_win.c                 |  2 +-
 9 files changed, 81 insertions(+), 50 deletions(-)

diff --git a/src/bin/elementary/test_bg.c b/src/bin/elementary/test_bg.c
index 8362ab527f..45afcac021 100644
--- a/src/bin/elementary/test_bg.c
+++ b/src/bin/elementary/test_bg.c
@@ -318,7 +318,7 @@ _image_cb(void *data, const Efl_Event *ev)
      {
         efl_file_simple_get(ev->object, &f, &k);
         o = efl_add(EFL_UI_IMAGE_CLASS, win,
-                    efl_gfx_image_scale_type_set(efl_added, 
EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE),
+                    efl_gfx_image_scale_type_set(efl_added, 
EFL_GFX_IMAGE_SCALE_TYPE_EXPAND),
                     efl_file_set(efl_added, f),
                     efl_file_key_set(efl_added, k)
                     );
@@ -444,22 +444,29 @@ test_bg_scale_type(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *e
    efl_pack(hbox, rd);
 
    rd = efl_add(EFL_UI_RADIO_CLASS, hbox);
-   efl_ui_radio_state_value_set(rd, EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE);
-   efl_text_set(rd, "Fit Inside");
+   efl_ui_radio_state_value_set(rd, EFL_GFX_IMAGE_SCALE_TYPE_FIT);
+   efl_text_set(rd, "Fit");
    efl_gfx_hint_weight_set(rd, EFL_GFX_HINT_EXPAND, 0.0);
    efl_event_callback_add(rd, EFL_UI_EVENT_SELECTED_CHANGED, 
_cb_radio_changed_scale_type, o_bg);
    efl_pack(hbox, rd);
 
    rd = efl_add(EFL_UI_RADIO_CLASS, hbox);
-   efl_ui_radio_state_value_set(rd, EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE);
-   efl_text_set(rd, "Fit Outside");
+   efl_ui_radio_state_value_set(rd, EFL_GFX_IMAGE_SCALE_TYPE_FIT_WIDTH);
+   efl_text_set(rd, "Fit Horizontally");
    efl_gfx_hint_weight_set(rd, EFL_GFX_HINT_EXPAND, 0.0);
    efl_event_callback_add(rd, EFL_UI_EVENT_SELECTED_CHANGED, 
_cb_radio_changed_scale_type, o_bg);
    efl_pack(hbox, rd);
 
    rd = efl_add(EFL_UI_RADIO_CLASS, hbox);
-   efl_ui_radio_state_value_set(rd, EFL_GFX_IMAGE_SCALE_TYPE_NONE);
-   efl_text_set(rd, "None");
+   efl_ui_radio_state_value_set(rd, EFL_GFX_IMAGE_SCALE_TYPE_FIT_HEIGHT);
+   efl_text_set(rd, "Fit Verically");
+   efl_gfx_hint_weight_set(rd, EFL_GFX_HINT_EXPAND, 0.0);
+   efl_event_callback_add(rd, EFL_UI_EVENT_SELECTED_CHANGED, 
_cb_radio_changed_scale_type, o_bg);
+   efl_pack(hbox, rd);
+
+   rd = efl_add(EFL_UI_RADIO_CLASS, hbox);
+   efl_ui_radio_state_value_set(rd, EFL_GFX_IMAGE_SCALE_TYPE_EXPAND);
+   efl_text_set(rd, "Expand");
    efl_gfx_hint_weight_set(rd, EFL_GFX_HINT_EXPAND, 0.0);
    efl_event_callback_add(rd, EFL_UI_EVENT_SELECTED_CHANGED, 
_cb_radio_changed_scale_type, o_bg);
    efl_pack(hbox, rd);
diff --git a/src/bin/elementary/test_image.c b/src/bin/elementary/test_image.c
index 18ae4dbcef..cbc127e3ea 100644
--- a/src/bin/elementary/test_image.c
+++ b/src/bin/elementary/test_image.c
@@ -105,8 +105,10 @@ static const struct {
 } images_scale_type[] = {
   { EFL_GFX_IMAGE_SCALE_TYPE_NONE, "None" },
   { EFL_GFX_IMAGE_SCALE_TYPE_FILL, "Fill" },
-  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE, "Fit Inside" },
-  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE, "Fit Outside" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_FIT, "Fit" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_WIDTH, "Fit Horizontally" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_HEIGHT, "Fit Vertically" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_EXPAND, "Expand" },
   { EFL_GFX_IMAGE_SCALE_TYPE_TILE, "Tile" },
   { 0, NULL }
 };
diff --git a/src/bin/elementary/test_part_bg.c 
b/src/bin/elementary/test_part_bg.c
index c192cdef36..cb9dd4dbd3 100644
--- a/src/bin/elementary/test_part_bg.c
+++ b/src/bin/elementary/test_part_bg.c
@@ -49,7 +49,7 @@ _scale_type_cb(void *data, const Efl_Event *ev EINA_UNUSED)
    snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", 
elm_app_data_dir_get());
    efl_file_simple_load(efl_part(target, "background"), buf, NULL);
    type = efl_gfx_image_scale_type_get(efl_part(target, "background"));
-   type = (type + 1) % 5;
+   type = (type + 1) % 6;
    efl_gfx_image_scale_type_set(efl_part(target, "background"), type);
 }
 
diff --git a/src/bin/elementary/test_ui_image.c 
b/src/bin/elementary/test_ui_image.c
index be5f26a9b7..e3f1bd5b52 100644
--- a/src/bin/elementary/test_ui_image.c
+++ b/src/bin/elementary/test_ui_image.c
@@ -112,8 +112,10 @@ static const struct {
 } images_scale_type[] = {
   { EFL_GFX_IMAGE_SCALE_TYPE_NONE, "None" },
   { EFL_GFX_IMAGE_SCALE_TYPE_FILL, "Fill" },
-  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE, "Fit Inside" },
-  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE, "Fit Outside" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_FIT, "Fit" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_WIDTH, "Fit Horizontally" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_FIT_HEIGHT, "Fit Vertically" },
+  { EFL_GFX_IMAGE_SCALE_TYPE_EXPAND, "Expand" },
   { EFL_GFX_IMAGE_SCALE_TYPE_TILE, "Tile" },
   { 0, NULL }
 };
diff --git a/src/examples/elementary/efl_ui_list_example_1.c 
b/src/examples/elementary/efl_ui_list_example_1.c
index efac2de088..81d378b9c9 100644
--- a/src/examples/elementary/efl_ui_list_example_1.c
+++ b/src/examples/elementary/efl_ui_list_example_1.c
@@ -200,7 +200,7 @@ elm_main(int argc EINA_UNUSED, char **argv)
 
            case 40:
              efl_file_simple_load(efl_part(item, "background"), 
"./sky_01.jpg", NULL);
-             efl_gfx_image_scale_type_set(efl_part(item, "background"), 
EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE);
+             efl_gfx_image_scale_type_set(efl_part(item, "background"), 
EFL_GFX_IMAGE_SCALE_TYPE_EXPAND);
              efl_pack_at(list, item, 39);
              break;
 
diff --git a/src/lib/efl/interfaces/efl_gfx_image.eo 
b/src/lib/efl/interfaces/efl_gfx_image.eo
index db71b17ab5..10073266ec 100644
--- a/src/lib/efl/interfaces/efl_gfx_image.eo
+++ b/src/lib/efl/interfaces/efl_gfx_image.eo
@@ -21,23 +21,33 @@ enum @beta Efl.Gfx.Image_Scale_Hint
 enum @beta Efl.Gfx.Image_Scale_Type
 {
    [[Enumeration that defines scale types of an image.]]
+   none,     [[Use the image's natural size.]]
    fill,        [[Scale the image so that it matches
                   the object's area exactly.
                   The image's aspect ratio might be changed.]]
-   fit_inside,  [[Scale the image
-                  so that it fits inside the object's area
+   fit,      [[Scale the image
+                  so that it fits completely inside the object's area
                   while maintaining the aspect ratio.
                   At least one of the dimensions of the image
                   should be equal to the corresponding dimension
                   of the object.]]
-   fit_outside, [[Scale the image
-                  so that it covers the entire object area
+   fit_width, [[Scale the image
+                  so that it covers the entire object area horizontally
                   while maintaining the aspect ratio.
-                  At least one of the dimensions of the image
-                  should be equal to the corresponding
-                  dimension of the object.]]
+                  The image may become larger than the object.
+                  ]]
+   fit_height, [[Scale the image
+                  so that it covers the entire object area vertically
+                  while maintaining the aspect ratio.
+                  The image may become larger than the object.
+                  ]]
+   expand,     [[Scale the image
+                  so that it covers the entire object area on one axis
+                  while maintaining the aspect ratio, preferring whichever
+                  axis is largest.
+                  The image may become larger than the object.
+                  ]]
    tile,        [[Tile image at its original size.]]
-   none         [[Not scale the image]]
 }
 
 struct Efl.Gfx.Image_Stretch_Region
diff --git a/src/lib/elementary/efl_ui_bg.c b/src/lib/elementary/efl_ui_bg.c
index 88d5ef7eb1..61dbebdceb 100644
--- a/src/lib/elementary/efl_ui_bg.c
+++ b/src/lib/elementary/efl_ui_bg.c
@@ -44,7 +44,7 @@ _efl_ui_bg_efl_object_constructor(Eo *obj, Efl_Ui_Bg_Data *pd)
                            efl_content_set(efl_part(obj, 
"elm.swallow.rectangle"), efl_added));
 
         pd->img = efl_add(EFL_UI_IMAGE_CLASS, obj,
-                          efl_gfx_image_scale_type_set(efl_added, 
EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE),
+                          efl_gfx_image_scale_type_set(efl_added, 
EFL_GFX_IMAGE_SCALE_TYPE_EXPAND),
                           efl_content_set(efl_part(obj, 
"elm.swallow.background"), efl_added));
      }
    else
@@ -54,7 +54,7 @@ _efl_ui_bg_efl_object_constructor(Eo *obj, Efl_Ui_Bg_Data *pd)
                            efl_content_set(efl_part(obj, "efl.rectangle"), 
efl_added));
 
         pd->img = efl_add(EFL_UI_IMAGE_CLASS, obj,
-                          efl_gfx_image_scale_type_set(efl_added, 
EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE),
+                          efl_gfx_image_scale_type_set(efl_added, 
EFL_GFX_IMAGE_SCALE_TYPE_EXPAND),
                           efl_content_set(efl_part(obj, "efl.background"), 
efl_added));
      }
    pd->file = NULL;
@@ -87,7 +87,7 @@ elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option)
          type = EFL_GFX_IMAGE_SCALE_TYPE_NONE;
          break;
        case ELM_BG_OPTION_SCALE:
-         type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
+         type = EFL_GFX_IMAGE_SCALE_TYPE_EXPAND;
          break;
        case ELM_BG_OPTION_TILE:
          type = EFL_GFX_IMAGE_SCALE_TYPE_TILE;
@@ -97,7 +97,7 @@ elm_bg_option_set(Evas_Object *obj, Elm_Bg_Option option)
          break;
        case ELM_BG_OPTION_LAST:
        default:
-         type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE;
+         type = EFL_GFX_IMAGE_SCALE_TYPE_EXPAND;
      }
    efl_gfx_image_scale_type_set(obj, type);
 }
@@ -114,7 +114,7 @@ elm_bg_option_get(const Evas_Object *obj)
        case EFL_GFX_IMAGE_SCALE_TYPE_NONE:
          option = ELM_BG_OPTION_CENTER;
         break;
-       case EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE:
+       case EFL_GFX_IMAGE_SCALE_TYPE_EXPAND:
          option = ELM_BG_OPTION_SCALE;
         break;
        case EFL_GFX_IMAGE_SCALE_TYPE_TILE:
@@ -123,7 +123,7 @@ elm_bg_option_get(const Evas_Object *obj)
        case EFL_GFX_IMAGE_SCALE_TYPE_FILL:
          option = ELM_BG_OPTION_STRETCH;
          break;
-       case EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE:
+       case EFL_GFX_IMAGE_SCALE_TYPE_FIT:
        default:
          ERR("Scale type %d cannot be converted to Elm_Bg_Option", type);
          break;
diff --git a/src/lib/elementary/efl_ui_image.c 
b/src/lib/elementary/efl_ui_image.c
index a09f07a987..aa4d18c610 100644
--- a/src/lib/elementary/efl_ui_image.c
+++ b/src/lib/elementary/efl_ui_image.c
@@ -212,7 +212,7 @@ _image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, 
Evas_Object *img)
               w = ow;
               h = oh;
               break;
-           case EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE:
+           case EFL_GFX_IMAGE_SCALE_TYPE_FIT:
               w = ow;
               h = ((double)ih * w) / (double)iw;
 
@@ -222,27 +222,28 @@ _image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, 
Evas_Object *img)
                    w = ((double)iw * h) / (double)ih;
                 }
 
-              if (((!sd->scale_up) && (w > iw))
-                  || ((!sd->scale_down) && (w < iw)))
-                {
-                   w = iw;
-                   h = ih;
-                }
+
               break;
-           case EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE:
+           case EFL_GFX_IMAGE_SCALE_TYPE_FIT_WIDTH:
               w = ow;
               h = ((double)ih * w) / (double)iw;
-              if (h < oh)
+
+              break;
+           case EFL_GFX_IMAGE_SCALE_TYPE_FIT_HEIGHT:
+              h = oh;
+              w = ((double)iw * h) / (double)ih;
+
+              break;
+           case EFL_GFX_IMAGE_SCALE_TYPE_EXPAND:
+              if (ow > oh)
                 {
-                   h = oh;
-                   w = ((double)iw * h) / (double)ih;
+                   w = ow;
+                   h = ((double)ih * w) / (double)iw;
                 }
-
-              if (((!sd->scale_up) && (w > iw))
-                  || ((!sd->scale_down) && (w < iw)))
+              else
                 {
-                   w = iw;
-                   h = ih;
+                   h = oh;
+                   w = ((double)iw * h) / (double)ih;
                 }
               break;
            case EFL_GFX_IMAGE_SCALE_TYPE_TILE:
@@ -250,7 +251,16 @@ _image_sizing_eval(Eo *obj, Efl_Ui_Image_Data *sd, 
Evas_Object *img)
               evas_object_image_fill_set(img, x, y, iw, ih);
               goto done;
           }
-
+        if (((!sd->scale_up) && (w > iw))
+            || ((!sd->scale_down) && (w < iw)))
+          {
+             w = iw;
+          }
+        if (((!sd->scale_up) && (h > ih))
+            || ((!sd->scale_down) && (h < ih)))
+          {
+             h = ih;
+          }
         //3. Calculate offset according to align value
         if (!elm_widget_is_legacy(sd->self))
           {
@@ -859,7 +869,7 @@ _efl_ui_image_efl_object_constructor(Eo *obj, 
Efl_Ui_Image_Data *pd)
    evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
    efl_access_object_role_set(obj, EFL_ACCESS_ROLE_IMAGE);
 
-   pd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT_INSIDE;
+   pd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT;
    pd->self = obj;
 
    return obj;
@@ -2077,8 +2087,8 @@ elm_image_fill_outside_set(Evas_Object *obj, Eina_Bool 
fill_outside)
 
    if (sd->aspect_fixed)
      {
-        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;
+        if (sd->fill_inside) sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT;
+        else sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_EXPAND;
      }
    else
      sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FILL;
@@ -2222,8 +2232,8 @@ elm_image_aspect_fixed_set(Evas_Object *obj, Eina_Bool 
fixed)
 
    if (sd->aspect_fixed)
      {
-        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;
+        if (sd->fill_inside) sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FIT;
+        else sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_EXPAND;
      }
    else
      sd->scale_type = EFL_GFX_IMAGE_SCALE_TYPE_FILL;
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index ffd806998c..72020778af 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -7723,7 +7723,7 @@ _efl_ui_win_part_file_load(Eo *obj, Efl_Ui_Win_Data *sd, 
Eo *part_obj, const cha
         if (file)
           {
              bg = efl_add(EFL_UI_IMAGE_CLASS, obj);
-             efl_gfx_image_scale_type_set(bg, 
EFL_GFX_IMAGE_SCALE_TYPE_FIT_OUTSIDE);
+             efl_gfx_image_scale_type_set(bg, EFL_GFX_IMAGE_SCALE_TYPE_EXPAND);
              ok = efl_file_simple_load(bg, file, key);
              if (!ok) ELM_SAFE_DEL(bg);
              _elm_win_bg_set(sd, bg);

-- 


Reply via email to