+elm_icon_memfile_set
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 22 Jul 2011 23:03:46 +0000 (23:03 +0000)
committerMike McCormack <mj.mccormack@samsung.com>
Fri, 11 Nov 2011 05:28:33 +0000 (14:28 +0900)
git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@61603 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/elm_icon.c
src/lib/els_icon.c
src/lib/els_icon.h

index 72abbb8..be911a5 100644 (file)
@@ -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;
index 2c9d5f3..259fe8b 100755 (executable)
@@ -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
index dccbccd..641aa3d 100644 (file)
@@ -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);