edje external elm_icon added
authorjh0506.yun <jh0506.yun@samsung.com>
Thu, 11 Nov 2010 05:26:19 +0000 (14:26 +0900)
committerjh0506.yun <jh0506.yun@samsung.com>
Thu, 11 Nov 2010 05:26:19 +0000 (14:26 +0900)
data/edje_externals/Makefile.am
data/edje_externals/ico_icon.png [new file with mode: 0755]
data/edje_externals/icons.edc
src/edje_externals/Makefile.am
src/edje_externals/elm_icon.c [new file with mode: 0644]
src/edje_externals/modules.inc

index d278cbf..3adc941 100644 (file)
@@ -19,6 +19,7 @@ ico_fileselector.png \
 ico_fileselector_button.png \
 ico_genlist.png \
 ico_hoversel.png \
+ico_icon.png \
 ico_list.png \
 ico_map.png \
 ico_notepad.png \
diff --git a/data/edje_externals/ico_icon.png b/data/edje_externals/ico_icon.png
new file mode 100755 (executable)
index 0000000..8ad329d
Binary files /dev/null and b/data/edje_externals/ico_icon.png differ
index e373942..0e0e468 100644 (file)
@@ -20,6 +20,7 @@ ICON("fileselector")
 ICON("fileselector_button")
 ICON("genlist")
 ICON("hoversel")
+ICON("icon")
 ICON("list")
 ICON("map")
 ICON("nocontents")
index 1d9e414..1baa249 100644 (file)
@@ -37,6 +37,7 @@ elm_fileselector.c \
 elm_fileselector_button.c \
 elm_genlist.c \
 elm_hoversel.c \
+elm_icon.c \
 elm_list.c \
 elm_map.c \
 elm_nocontents.c \
diff --git a/src/edje_externals/elm_icon.c b/src/edje_externals/elm_icon.c
new file mode 100644 (file)
index 0000000..e7b0f6a
--- /dev/null
@@ -0,0 +1,277 @@
+#include <assert.h>
+
+#include "private.h"
+
+typedef struct _Elm_Params_Icon
+{
+   const char *file;
+   Eina_Bool scale_up_exists;
+   Eina_Bool scale_up : 1;
+   Eina_Bool scale_down_exists;
+   Eina_Bool scale_down : 1;
+   Eina_Bool smooth_exists;
+   Eina_Bool smooth : 1;
+   Eina_Bool fill_outside_exists;
+   Eina_Bool fill_outside : 1;
+   Eina_Bool no_scale_exists;
+   Eina_Bool no_scale : 1;
+   Eina_Bool prescale_size_exists;
+   int prescale_size;
+} Elm_Params_Icon;
+
+static Elm_Params_Icon *param_icon;
+
+static void
+external_icon_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
+{
+   const Elm_Params_Icon *p;
+
+   if (to_params) p = to_params;
+   else if (from_params) p = from_params;
+   else return;
+
+   if (p->file)
+     {
+        elm_icon_file_set(obj, p->file, NULL);
+       param_icon->file = p->file;
+     }
+   if (p->smooth_exists)
+    {
+        elm_icon_smooth_set(obj, p->smooth);
+       param_icon->smooth = p->smooth;
+    }
+   if (p->no_scale_exists)
+    {
+        elm_icon_no_scale_set(obj, p->no_scale);
+       param_icon->no_scale = p->no_scale;
+    }
+   if (p->scale_up_exists && p->scale_down_exists)
+     {
+        elm_icon_scale_set(obj, p->scale_up, p->scale_down);
+       param_icon->scale_up = p->scale_up;
+       param_icon->scale_down = p->scale_down;
+     }
+   else if (p->scale_up_exists || p->scale_down_exists)
+     {
+       if (p->scale_up_exists)
+         {
+            elm_icon_scale_set(obj, p->scale_up, param_icon->scale_down);
+            param_icon->scale_up = p->scale_up;
+         }
+       else
+         {
+            elm_icon_scale_set(obj, param_icon->scale_up, p->scale_down);
+            param_icon->scale_down = p->scale_down;
+         }
+     }
+   if (p->fill_outside_exists)
+     {
+        elm_icon_fill_outside_set(obj, p->fill_outside);
+       param_icon->fill_outside = p->fill_outside;
+     }
+   if (p->prescale_size_exists)
+     {
+        elm_icon_prescale_set(obj, p->prescale_size);
+       param_icon->prescale_size = p->prescale_size;
+     }
+}
+
+static Eina_Bool
+external_icon_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
+{
+   if (!strcmp(param->name, "file") 
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
+     {
+        Eina_Bool ret = elm_icon_file_set(obj, param->s, NULL);
+       if (ret)
+         param_icon->file = param->s;
+       return ret;
+     }
+   else if (!strcmp(param->name, "smooth")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+       elm_icon_smooth_set(obj, param->i);
+       param_icon->smooth = param->i;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "no scale")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+       elm_icon_no_scale_set(obj, param->i);
+       param_icon->no_scale = param->i;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "scale up")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+       elm_icon_scale_set(obj, param->i, param_icon->scale_down);
+       param_icon->scale_up = param->i;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "scale down")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+       elm_icon_scale_set(obj, param_icon->scale_up, param->i);
+       param_icon->scale_down = param->i;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "fill outside")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+       elm_icon_fill_outside_set(obj, param->i);
+       param_icon->fill_outside = param->i;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "prescale")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
+     {
+       elm_icon_prescale_set(obj, param->d);
+       param_icon->prescale_size = param->d;
+       return EINA_TRUE;
+     }
+
+   ERR("unknown parameter '%s' of type '%s'",
+       param->name, edje_external_param_type_str(param->type));
+
+   return EINA_FALSE;
+}
+
+static Eina_Bool
+external_icon_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
+{
+   if (!strcmp(param->name, "file")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
+     {
+        param->s = param_icon->file;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "smooth")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+        param->i = param_icon->smooth;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "no scale")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+        param->i = param_icon->no_scale;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "scale up")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+        param->i = param_icon->scale_up;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "scale down")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+       param->i = param_icon->scale_down;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "fill outside")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
+     {
+        param->i = param_icon->fill_outside;
+       return EINA_TRUE;
+     }
+   else if (!strcmp(param->name, "prescale")
+                  && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
+     {
+        param->d = param_icon->prescale_size;
+       return EINA_TRUE;
+     }
+
+   ERR("unknown parameter '%s' of type '%s'",
+                  param->name, edje_external_param_type_str(param->type));
+
+   return EINA_FALSE;
+}
+
+static void *
+external_icon_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
+{
+   Elm_Params_Icon *mem;
+   Edje_External_Param *param;
+   const Eina_List *l;
+  
+   param_icon = calloc(1, sizeof(Elm_Params_Icon));
+   
+   mem = calloc(1, sizeof(Elm_Params_Icon));
+   if (!mem)
+     return NULL;
+
+   EINA_LIST_FOREACH(params, l, param)
+     {
+        if (!strcmp(param->name, "file"))
+         mem->file = eina_stringshare_add(param->s);
+       else if (!strcmp(param->name, "smooth"))
+         {
+            mem->smooth = param->i;
+            mem->smooth_exists = EINA_TRUE;
+         }
+       else if (!strcmp(param->name, "no scale"))
+         {
+            mem->no_scale = param->i;
+            mem->no_scale_exists = EINA_TRUE;
+         }
+       else if (!strcmp(param->name, "scale up"))
+         {
+            mem->scale_up = param->i;
+            mem->scale_up_exists = EINA_TRUE;
+         }
+       else if (!strcmp(param->name, "scale down"))
+         {
+            mem->scale_down = param->i;
+            mem->scale_down_exists = EINA_TRUE;
+         }
+       else if (!strcmp(param->name, "fill outside"))
+         {
+            mem->fill_outside = param->i;
+            mem->fill_outside_exists = EINA_TRUE;
+         }
+       else if (!strcmp(param->name, "prescale"))
+         {
+            mem->prescale_size = param->d;
+            mem->prescale_size_exists = EINA_TRUE;
+         }
+     }
+   
+   return mem;
+}
+
+static Evas_Object *external_icon_content_get(void *data __UNUSED__,
+               const Evas_Object *obj, const char *content)
+{
+   ERR("so content");
+   return NULL;
+}
+
+static void
+external_icon_params_free(void *params)
+{
+   Elm_Params_Icon *mem = params;
+
+   if (mem->file)
+     eina_stringshare_del(mem->file);
+   free(mem);
+
+   if (param_icon->file)
+     eina_stringshare_del(param_icon->file);
+   free(param_icon);
+}
+
+static Edje_External_Param_Info external_icon_params[] = {
+    EDJE_EXTERNAL_PARAM_INFO_STRING("file"),
+    EDJE_EXTERNAL_PARAM_INFO_BOOL("smooth"),
+    EDJE_EXTERNAL_PARAM_INFO_BOOL("no scale"),
+    EDJE_EXTERNAL_PARAM_INFO_BOOL("scale up"),
+    EDJE_EXTERNAL_PARAM_INFO_BOOL("scale down"),
+    EDJE_EXTERNAL_PARAM_INFO_BOOL("fill outside"),
+    EDJE_EXTERNAL_PARAM_INFO_INT("prescale"),
+    EDJE_EXTERNAL_PARAM_INFO_SENTINEL
+};
+
+DEFINE_EXTERNAL_ICON_ADD(icon, "icon");
+DEFINE_EXTERNAL_TYPE_SIMPLE(icon, "Icon");
+
index c5945fb..4542132 100644 (file)
@@ -8,6 +8,7 @@ DEFINE_TYPE(fileselector)
 DEFINE_TYPE(fileselector_button)
 DEFINE_TYPE(genlist)
 DEFINE_TYPE(hoversel)
+DEFINE_TYPE(icon)
 DEFINE_TYPE(list)
 DEFINE_TYPE(map)
 DEFINE_TYPE(nocontents)