From f706ee7002210eba9c4ee4dde9f9f430388a1a7d Mon Sep 17 00:00:00 2001 From: discomfitor Date: Fri, 22 Jul 2011 23:03:46 +0000 Subject: [PATCH] +elm_icon_memfile_set git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@61603 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/elm_icon.c | 17 +++++++++++++++++ src/lib/els_icon.c | 39 ++++++++++++++++++++++++++++++++++++--- src/lib/els_icon.h | 1 + 3 files changed, 54 insertions(+), 3 deletions(-) diff --git a/src/lib/elm_icon.c b/src/lib/elm_icon.c index 72abbb8..be911a5 100644 --- a/src/lib/elm_icon.c +++ b/src/lib/elm_icon.c @@ -507,6 +507,23 @@ elm_icon_add(Evas_Object *parent) } EAPI Eina_Bool +elm_icon_memfile_set(Evas_Object *obj, const void *img, size_t size, const char *format, const char *key) +{ + ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; + Widget_Data *wd = elm_widget_data_get(obj); + Eina_Bool ret; + + if (!wd) return EINA_FALSE; + EINA_SAFETY_ON_NULL_RETURN_VAL(img, EINA_FALSE); + EINA_SAFETY_ON_TRUE_RETURN_VAL(!size, EINA_FALSE); + eina_stringshare_del(wd->stdicon); + wd->stdicon = NULL; + ret = _els_smart_icon_memfile_set(wd->img, img, size, format, key); + _sizing_eval(obj); + return ret; +} + +EAPI Eina_Bool elm_icon_file_set(Evas_Object *obj, const char *file, const char *group) { ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; diff --git a/src/lib/els_icon.c b/src/lib/els_icon.c index 2c9d5f3..259fe8b 100755 --- a/src/lib/els_icon.c +++ b/src/lib/els_icon.c @@ -66,14 +66,13 @@ _preloaded(void *data, Evas *e __UNUSED__, Evas_Object *obj, void *event __UNUSE sd->prev = NULL; } -Eina_Bool -_els_smart_icon_file_key_set(Evas_Object *obj, const char *file, const char *key) +static void +_els_smart_icon_file_helper(Evas_Object *obj) { Smart_Data *sd; Evas_Object *pclip; sd = evas_object_smart_data_get(obj); - if (!sd) return EINA_FALSE; /* smart code here */ /* NOTE: Do not merge upstream for the if (sd->edje) { } statements But wonder whether the edje resource icons have no problem. */ @@ -97,6 +96,40 @@ _els_smart_icon_file_key_set(Evas_Object *obj, const char *file, const char *key if (!sd->size) evas_object_image_load_size_set(sd->obj, sd->size, sd->size); +} + +Eina_Bool +_els_smart_icon_memfile_set(Evas_Object *obj, const void *img, size_t size, const char *format, const char *key) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return EINA_FALSE; + _els_smart_icon_file_helper(obj); + + evas_object_image_memfile_set(sd->obj, (void*)img, size, (char*)format, (char*)key); + sd->preloading = EINA_TRUE; + sd->show = EINA_TRUE; + evas_object_hide(sd->obj); + evas_object_image_preload(sd->obj, EINA_FALSE); + if (evas_object_image_load_error_get(sd->obj) != EVAS_LOAD_ERROR_NONE) + { + ERR("Things are going bad for some random %zu byte chunk of memory (%p)", size, sd->obj); + return EINA_FALSE; + } + _smart_reconfigure(sd); + return EINA_TRUE; +} + +Eina_Bool +_els_smart_icon_file_key_set(Evas_Object *obj, const char *file, const char *key) +{ + Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return EINA_FALSE; + _els_smart_icon_file_helper(obj); + evas_object_image_file_set(sd->obj, file, key); // NOTE: Do not merge upstream for sd->preloading. sd->preloading = EINA_FALSE; // by default preload off by seok.j.jeong diff --git a/src/lib/els_icon.h b/src/lib/els_icon.h index dccbccd..641aa3d 100644 --- a/src/lib/els_icon.h +++ b/src/lib/els_icon.h @@ -1,4 +1,5 @@ Evas_Object *_els_smart_icon_add (Evas *evas); +Eina_Bool _els_smart_icon_memfile_set (Evas_Object *obj, const void *file, size_t size, const char *format, const char *key); Eina_Bool _els_smart_icon_file_key_set (Evas_Object *obj, const char *file, const char *key); Eina_Bool _els_smart_icon_file_edje_set (Evas_Object *obj, const char *file, const char *part); void _els_smart_icon_file_get (const Evas_Object *obj, const char **file, const char **key); -- 2.7.4