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.