4 typedef struct _Elm_Params_Icon
7 Eina_Bool scale_up_exists;
8 Eina_Bool scale_up : 1;
9 Eina_Bool scale_down_exists;
10 Eina_Bool scale_down : 1;
11 Eina_Bool smooth_exists;
13 Eina_Bool fill_outside_exists;
14 Eina_Bool fill_outside : 1;
15 Eina_Bool no_scale_exists;
16 Eina_Bool no_scale : 1;
17 Eina_Bool prescale_size_exists;
23 static Elm_Params_Icon *param_icon;
26 external_icon_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__)
28 const Elm_Params_Icon *p;
32 if (to_params) p = to_params;
33 else if (from_params) p = from_params;
38 elm_icon_file_set(obj, p->file, NULL);
39 param_icon->file = p->file;
43 elm_icon_smooth_set(obj, p->smooth);
44 param_icon->smooth = p->smooth;
46 if (p->no_scale_exists)
48 elm_icon_no_scale_set(obj, p->no_scale);
49 param_icon->no_scale = p->no_scale;
51 if (p->scale_up_exists && p->scale_down_exists)
53 elm_icon_scale_set(obj, p->scale_up, p->scale_down);
54 param_icon->scale_up = p->scale_up;
55 param_icon->scale_down = p->scale_down;
57 else if (p->scale_up_exists || p->scale_down_exists)
59 if (p->scale_up_exists)
61 elm_icon_scale_set(obj, p->scale_up, param_icon->scale_down);
62 param_icon->scale_up = p->scale_up;
66 elm_icon_scale_set(obj, param_icon->scale_up, p->scale_down);
67 param_icon->scale_down = p->scale_down;
70 if (p->fill_outside_exists)
72 elm_icon_fill_outside_set(obj, p->fill_outside);
73 param_icon->fill_outside = p->fill_outside;
75 if (p->prescale_size_exists)
77 elm_icon_prescale_set(obj, p->prescale_size);
78 param_icon->prescale_size = p->prescale_size;
82 edje = evas_object_smart_parent_get(obj);
83 edje_object_file_get(edje, &file, NULL);
85 if (!elm_icon_file_set(obj, file, p->icon))
86 elm_icon_standard_set(obj, p->icon);
91 external_icon_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param)
96 if (!strcmp(param->name, "file")
97 && param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
99 Eina_Bool ret = elm_icon_file_set(obj, param->s, NULL);
101 param_icon->file = param->s;
104 else if (!strcmp(param->name, "smooth")
105 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
107 elm_icon_smooth_set(obj, param->i);
108 param_icon->smooth = param->i;
111 else if (!strcmp(param->name, "no scale")
112 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
114 elm_icon_no_scale_set(obj, param->i);
115 param_icon->no_scale = param->i;
118 else if (!strcmp(param->name, "scale up")
119 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
121 elm_icon_scale_set(obj, param->i, param_icon->scale_down);
122 param_icon->scale_up = param->i;
125 else if (!strcmp(param->name, "scale down")
126 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
128 elm_icon_scale_set(obj, param_icon->scale_up, param->i);
129 param_icon->scale_down = param->i;
132 else if (!strcmp(param->name, "fill outside")
133 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
135 elm_icon_fill_outside_set(obj, param->i);
136 param_icon->fill_outside = param->i;
139 else if (!strcmp(param->name, "prescale")
140 && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
142 elm_icon_prescale_set(obj, param->i);
143 param_icon->prescale_size = param->i;
146 else if (!strcmp(param->name, "icon"))
148 if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
150 edje = evas_object_smart_parent_get(obj);
151 edje_object_file_get(edje, &file, NULL);
153 if (!elm_icon_file_set(obj, file, param->s))
154 elm_icon_standard_set(obj, param->s);
159 ERR("unknown parameter '%s' of type '%s'",
160 param->name, edje_external_param_type_str(param->type));
166 external_icon_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param)
168 if (!strcmp(param->name, "file")
169 && param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING)
171 param->s = param_icon->file;
174 else if (!strcmp(param->name, "smooth")
175 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
177 param->i = param_icon->smooth;
180 else if (!strcmp(param->name, "no scale")
181 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
183 param->i = param_icon->no_scale;
186 else if (!strcmp(param->name, "scale up")
187 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
189 param->i = param_icon->scale_up;
192 else if (!strcmp(param->name, "scale down")
193 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
195 param->i = param_icon->scale_down;
198 else if (!strcmp(param->name, "fill outside")
199 && param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL)
201 param->i = param_icon->fill_outside;
204 else if (!strcmp(param->name, "prescale")
205 && param->type == EDJE_EXTERNAL_PARAM_TYPE_INT)
207 param->i = param_icon->prescale_size;
210 else if (!strcmp(param->name, "icon"))
212 /* not easy to get icon name back from live object */
216 ERR("unknown parameter '%s' of type '%s'",
217 param->name, edje_external_param_type_str(param->type));
223 external_icon_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params)
225 Elm_Params_Icon *mem;
226 Edje_External_Param *param;
228 param_icon = calloc(1, sizeof(Elm_Params_Icon));
229 mem = ELM_NEW(Elm_Params_Icon);
233 EINA_LIST_FOREACH(params, l, param)
235 if (!strcmp(param->name, "file"))
236 mem->file = eina_stringshare_add(param->s);
237 else if (!strcmp(param->name, "smooth"))
239 mem->smooth = param->i;
240 mem->smooth_exists = EINA_TRUE;
242 else if (!strcmp(param->name, "no scale"))
244 mem->no_scale = param->i;
245 mem->no_scale_exists = EINA_TRUE;
247 else if (!strcmp(param->name, "scale up"))
249 mem->scale_up = param->i;
250 mem->scale_up_exists = EINA_TRUE;
252 else if (!strcmp(param->name, "scale down"))
254 mem->scale_down = param->i;
255 mem->scale_down_exists = EINA_TRUE;
257 else if (!strcmp(param->name, "fill outside"))
259 mem->fill_outside = param->i;
260 mem->fill_outside_exists = EINA_TRUE;
262 else if (!strcmp(param->name, "prescale"))
264 mem->prescale_size = param->i;
265 mem->prescale_size_exists = EINA_TRUE;
267 else if (!strcmp(param->name, "icon"))
269 mem->icon = eina_stringshare_add(param->s);
276 static Evas_Object *external_icon_content_get(void *data __UNUSED__,
277 const Evas_Object *obj __UNUSED__, const char *content __UNUSED__)
284 external_icon_params_free(void *params)
286 Elm_Params_Icon *mem = params;
289 eina_stringshare_del(mem->file);
292 if (param_icon->file)
293 eina_stringshare_del(param_icon->file);
297 eina_stringshare_del(mem->icon);
298 external_common_params_free(params);
301 static Edje_External_Param_Info external_icon_params[] = {
302 DEFINE_EXTERNAL_COMMON_PARAMS,
303 EDJE_EXTERNAL_PARAM_INFO_STRING("icon"),
304 EDJE_EXTERNAL_PARAM_INFO_STRING("file"),
305 EDJE_EXTERNAL_PARAM_INFO_BOOL("smooth"),
306 EDJE_EXTERNAL_PARAM_INFO_BOOL("no scale"),
307 EDJE_EXTERNAL_PARAM_INFO_BOOL("scale up"),
308 EDJE_EXTERNAL_PARAM_INFO_BOOL("scale down"),
309 EDJE_EXTERNAL_PARAM_INFO_BOOL("fill outside"),
310 EDJE_EXTERNAL_PARAM_INFO_INT("prescale"),
311 EDJE_EXTERNAL_PARAM_INFO_SENTINEL
314 DEFINE_EXTERNAL_ICON_ADD(icon, "icon");
315 DEFINE_EXTERNAL_TYPE_SIMPLE(icon, "Icon");