This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository efm2.

View the commit online.

commit 4988ef3ce3f6d98e01105a40d785367e2243cf9f
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
AuthorDate: Fri Sep 12 18:37:35 2025 +0100

    improve over/badge icon handling
---
 src/efm/efm_util.c | 76 ++++++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 56 insertions(+), 20 deletions(-)

diff --git a/src/efm/efm_util.c b/src/efm/efm_util.c
index 27fc823..02a38dc 100644
--- a/src/efm/efm_util.c
+++ b/src/efm/efm_util.c
@@ -2108,6 +2108,56 @@ _icon_detail_add(Icon *icon, Smart_Data *sd, Evas *e,
             icon->info.file, col, format);
 }
 
+static void
+_icon_over_badge_resized(Icon *icon, Evas_Object *o, const char *swallow)
+{
+  int w, h;
+
+  // get the icon size and if it has alpha
+  efm_icon_size_get(o, &w, &h);
+  // set the aspect ratio hint based on the above and re-swallow
+  evas_object_size_hint_aspect_set(o, EVAS_ASPECT_CONTROL_BOTH,
+                                   w, h);
+  edje_object_part_swallow(icon->o_base, swallow, o);
+}
+
+static void
+_cb_icon_over_resized(void *data, Evas_Object *obj EINA_UNUSED,
+                      void *info EINA_UNUSED)
+{ // the icon over image has been loaded so update the icon base
+  Icon *icon = data;
+
+  _icon_over_badge_resized(icon, icon->o_icon_over, "e.swallow.icon_over");
+}
+
+static void
+_cb_icon_badge_resized(void *data, Evas_Object *obj EINA_UNUSED,
+                       void *info EINA_UNUSED)
+{ // the icon over image has been loaded so update the icon base
+  Icon *icon = data;
+
+  _icon_over_badge_resized(icon, icon->o_icon_badge, "e.swallow.icon_badge");
+}
+
+static Evas_Object *
+_icon_object_over_add(Icon *icon, const char *file, const char *swallow,
+                      void (*cb_resized) (void *data, Evas_Object *obj,
+                                          void *info))
+{
+  Evas_Object *o;
+
+  if (!file) return NULL;
+  // file already resolved to abs path by backend open
+  o = efm_icon_add(icon->o_base);
+  efm_icon_keep_aspect_set(o, EINA_TRUE);
+  if (_file_video_is(file)) efm_icon_video_set(o, file);
+  else efm_icon_file_set(o, file);
+  evas_object_smart_callback_add(o, "resized", cb_resized, icon);
+  edje_object_part_swallow(icon->o_base, swallow, o);
+  evas_object_show(o);
+  return o;
+}
+
 void
 _icon_object_add(Icon *icon, Smart_Data *sd, Evas *e,
                  const char *theme_edj_file, Eina_Bool clip_set, int num)
@@ -2353,26 +2403,12 @@ _icon_object_add(Icon *icon, Smart_Data *sd, Evas *e,
   edje_object_part_swallow(icon->o_base, "e.swallow.icon", o);
   evas_object_show(o);
 
-  if (icon->info.icon_over)
-    { // overlay icon file
-      icon->o_icon_over = o = efm_icon_add(o);
-      if (_file_video_is(icon->info.icon_over))
-        efm_icon_video_set(o, icon->info.icon_over);
-      else
-        efm_icon_file_set(o, icon->info.icon_over);
-      edje_object_part_swallow(icon->o_base, "e.swallow.icon_over", o);
-      evas_object_show(o);
-    }
-  if (icon->info.icon_badge)
-    { // badge icon file
-      icon->o_icon_badge = o = efm_icon_add(o);
-      if (_file_video_is(icon->info.icon_badge))
-        efm_icon_video_set(o, icon->info.icon_badge);
-      else
-        efm_icon_file_set(o, icon->info.icon_badge);
-      edje_object_part_swallow(icon->o_base, "e.swallow.icon_badge", o);
-      evas_object_show(o);
-    }
+  icon->o_icon_over = _icon_object_over_add(icon, icon->info.icon_over,
+                                            "e.swallow.icon_over",
+                                            _cb_icon_over_resized);
+  icon->o_icon_badge = _icon_object_over_add(icon, icon->info.icon_badge,
+                                             "e.swallow.icon_badge",
+                                             _cb_icon_badge_resized);
 
   if (clip_set)
     {

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to