From: cedric Date: Thu, 23 Jun 2011 14:54:29 +0000 (+0000) Subject: elementary: try to find the best icon size to display. X-Git-Tag: REL_F_I9500_20120323_1~17^2~2506 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=349d8ed54d6f9b50b198838f3e9b97fb7986cf83;p=framework%2Fuifw%2Felementary.git elementary: try to find the best icon size to display. This patch need review. The goal is to always find the best quality for the output. Sadly in our theme we don't provide multiple size for icon (we could, as edje provide this feature). So to test it, better switch to FreeDesktop first before trying the theme. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/elementary@60636 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/elm_icon.c b/src/lib/elm_icon.c index ef62875..f4173fa 100644 --- a/src/lib/elm_icon.c +++ b/src/lib/elm_icon.c @@ -654,16 +654,12 @@ _icon_size_min_get(Evas_Object *icon) * * @ingroup Icon */ -EAPI Eina_Bool -elm_icon_standard_set(Evas_Object *obj, const char *name) +static Eina_Bool +_elm_icon_standard_set(Widget_Data *wd, Evas_Object *obj, const char *name) { - ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; - Widget_Data *wd = elm_widget_data_get(obj); char *tmp; Eina_Bool ret; - if ((!wd) || (!name)) return EINA_FALSE; - /* try locating the icon using the specified lookup order */ switch (wd->lookup_order) { @@ -699,11 +695,39 @@ elm_icon_standard_set(Evas_Object *obj, const char *name) if (!(tmp = strchr(name, '/'))) return EINA_FALSE; ++tmp; if (*tmp) return elm_icon_standard_set(obj, tmp); - /* give up */ return EINA_FALSE; } +static void +_elm_icon_standard_resize(void *data, + Evas *e __UNUSED__, + Evas_Object *obj, + void *event_info __UNUSED__) +{ + Widget_Data *wd = data; + + if (!_elm_icon_standard_set(wd, obj, wd->stdicon)) + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, + _elm_icon_standard_resize, wd); +} + +EAPI Eina_Bool +elm_icon_standard_set(Evas_Object *obj, const char *name) +{ + ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; + Widget_Data *wd = elm_widget_data_get(obj); + + if ((!wd) || (!name)) return EINA_FALSE; + + evas_object_event_callback_del_full(obj, EVAS_CALLBACK_RESIZE, + _elm_icon_standard_resize, wd); + evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, + _elm_icon_standard_resize, wd); + + return _elm_icon_standard_set(wd, obj, name); +} + /** * Get the theme, as standard, for an icon * diff --git a/src/lib/els_icon.c b/src/lib/els_icon.c index 0bbfc38..cf7a848 100644 --- a/src/lib/els_icon.c +++ b/src/lib/els_icon.c @@ -161,6 +161,7 @@ _els_smart_icon_size_get(const Evas_Object *obj, int *w, int *h) { Smart_Data *sd; int tw, th; + int cw, ch; sd = evas_object_smart_data_get(obj); if (!sd) return; @@ -168,6 +169,9 @@ _els_smart_icon_size_get(const Evas_Object *obj, int *w, int *h) edje_object_size_min_get(sd->obj, &tw, &th); else evas_object_image_size_get(sd->obj, &tw, &th); + evas_object_geometry_get(sd->obj, NULL, NULL, &cw, &ch); + tw = tw > cw ? tw : cw; + th = th > ch ? th : ch; tw = ((double)tw) * sd->scale; th = ((double)th) * sd->scale; if (w) *w = tw;