summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-10-31 11:44:57 +0000
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2021-10-31 11:44:57 +0000
commitcf0df4872deed8af3e031cc8a6000f560c4c10e6 (patch)
tree919e8e446dd5ec10e87390a525b10c1c23e5e2b1
parent0846ce9635f19dbc73cf15ffc4d6031099aa3696 (diff)
edje + elm - add new explicit tracking of all cc's used in edj themes
edje_cc now lists all cc's used in an edj file. edje provides an api to list this. elm now uses this api to expose a list of all cc's used acorss all the theme(s) selected by the user. this will then be used by paledit to produce a nicer gui with a list of available cc's to add etc. and split between basic and extended. @feat
-rw-r--r--src/bin/edje/edje_cc.h4
-rw-r--r--src/bin/edje/edje_cc_handlers.c69
-rw-r--r--src/bin/edje/edje_cc_out.c41
-rw-r--r--src/lib/edje/Edje_Common.h31
-rw-r--r--src/lib/edje/edje_data.c7
-rw-r--r--src/lib/edje/edje_load.c56
-rw-r--r--src/lib/edje/edje_private.h10
-rw-r--r--src/lib/elementary/elm_theme.c74
-rw-r--r--src/lib/elementary/elm_theme.h25
9 files changed, 315 insertions, 2 deletions
diff --git a/src/bin/edje/edje_cc.h b/src/bin/edje/edje_cc.h
index 27338c3540..d7063ef466 100644
--- a/src/bin/edje/edje_cc.h
+++ b/src/bin/edje/edje_cc.h
@@ -270,6 +270,8 @@ int statement_handler_short_single_num(void);
270int nested_handler_num(void); 270int nested_handler_num(void);
271int nested_handler_short_num(void); 271int nested_handler_short_num(void);
272 272
273void color_class_register(const char *name);
274
273void reorder_parts(void); 275void reorder_parts(void);
274void source_edd(void); 276void source_edd(void);
275void source_fetch(void); 277void source_fetch(void);
@@ -348,6 +350,8 @@ extern Eina_List *color_tree_root;
348extern int beta; 350extern int beta;
349extern int no_warn_unused_images; 351extern int no_warn_unused_images;
350 352
353extern Eina_Hash *color_class_reg;
354
351extern int had_quote; 355extern int had_quote;
352 356
353extern unsigned int max_open_files; 357extern unsigned int max_open_files;
diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c
index 4377204b69..ac4be862a6 100644
--- a/src/bin/edje/edje_cc_handlers.c
+++ b/src/bin/edje/edje_cc_handlers.c
@@ -190,6 +190,8 @@ struct _Edje_Cc_Handlers_Hierarchy_Info /* Struct that keeps globals value to im
190}; 190};
191typedef struct _Edje_Cc_Handlers_Hierarchy_Info Edje_Cc_Handlers_Hierarchy_Info; 191typedef struct _Edje_Cc_Handlers_Hierarchy_Info Edje_Cc_Handlers_Hierarchy_Info;
192 192
193static void color_class_register_color_tag(const char *tag);
194
193static Eina_Array *part_hierarchy = NULL; /* stack parts,support nested parts */ 195static Eina_Array *part_hierarchy = NULL; /* stack parts,support nested parts */
194static void edje_cc_handlers_hierarchy_set(Edje_Part *src); 196static void edje_cc_handlers_hierarchy_set(Edje_Part *src);
195static Edje_Part *edje_cc_handlers_hierarchy_parent_get(void); 197static Edje_Part *edje_cc_handlers_hierarchy_parent_get(void);
@@ -1131,6 +1133,70 @@ New_Statement_Handler statement_handlers_short_single[] =
1131 {"collections.group.parts.part.description.inherit", st_collections_group_parts_part_description_inherit}, 1133 {"collections.group.parts.part.description.inherit", st_collections_group_parts_part_description_inherit},
1132}; 1134};
1133 1135
1136void
1137color_class_register(const char *name)
1138{
1139 if (!color_class_reg) color_class_reg = eina_hash_string_superfast_new(NULL);
1140 if (!color_class_reg)
1141 {
1142 ERR("Out of memory");
1143 exit(-1);
1144 }
1145 if (eina_hash_find(color_class_reg, name)) return;
1146 eina_hash_add(color_class_reg, name, color_class_reg);
1147}
1148
1149static void
1150color_class_register_color_tag_span(const char *start, const char *end)
1151{
1152 const char *s;
1153 char *ts;
1154
1155 if (!start) return;
1156 char *tmps = malloc(end - start + 1);
1157 if (!tmps)
1158 {
1159 ERR("out of memory");
1160 exit(-1);
1161 }
1162 for (ts = tmps, s = start; s < end; s++, ts++) *ts = *s;
1163 *ts = 0;
1164 color_class_register(tmps);
1165 free(tmps);
1166}
1167
1168static void
1169color_class_register_color_tag(const char *tag)
1170{
1171 // find in tag string "xxx=cc:yyy and pass to color_class_register()
1172 const char *s, *cc_start = NULL, *cc_end = NULL;
1173
1174 for (s = tag; *s; s++)
1175 {
1176 if (!cc_start)
1177 {
1178 if ((s[0] == '=') && (s[1] == 'c') && (s[2] == 'c') && (s[3] == ':'))
1179 {
1180 cc_end = NULL;
1181 cc_start = s + 4;
1182 s += 3;
1183 }
1184 }
1185 else
1186 {
1187 if (isblank(s[0]))
1188 {
1189 cc_end = s;
1190 color_class_register_color_tag_span(cc_start, cc_end);
1191 cc_start = NULL;
1192 cc_end = NULL;
1193 }
1194 }
1195 }
1196 if (cc_start && !cc_end) cc_end = s;
1197 color_class_register_color_tag_span(cc_start, cc_end);
1198}
1199
1134/** @edcsubsection{lazedc_external_params, 1200/** @edcsubsection{lazedc_external_params,
1135 * LazEDC Group.Parts.External.Desc.Params} */ 1201 * LazEDC Group.Parts.External.Desc.Params} */
1136 1202
@@ -3202,6 +3268,7 @@ st_styles_style_base(void)
3202 tag->key = mem_strdup("DEFAULT"); 3268 tag->key = mem_strdup("DEFAULT");
3203 tag->value = parse_str(0); 3269 tag->value = parse_str(0);
3204 stl->tags = eina_list_append(stl->tags, tag); 3270 stl->tags = eina_list_append(stl->tags, tag);
3271 color_class_register_color_tag(tag->value);
3205} 3272}
3206 3273
3207/** 3274/**
@@ -3228,6 +3295,7 @@ st_styles_style_tag(void)
3228 tag->key = parse_str(0); 3295 tag->key = parse_str(0);
3229 tag->value = parse_str(1); 3296 tag->value = parse_str(1);
3230 stl->tags = eina_list_append(stl->tags, tag); 3297 stl->tags = eina_list_append(stl->tags, tag);
3298 color_class_register_color_tag(tag->value);
3231} 3299}
3232 3300
3233/** @edcsubsection{toplevel_text_classes, 3301/** @edcsubsection{toplevel_text_classes,
@@ -9084,6 +9152,7 @@ st_collections_group_parts_part_description_color_class(void)
9084 } 9152 }
9085 9153
9086 current_desc->color_class = parse_str(0); 9154 current_desc->color_class = parse_str(0);
9155 color_class_register(current_desc->color_class);
9087} 9156}
9088 9157
9089/** 9158/**
diff --git a/src/bin/edje/edje_cc_out.c b/src/bin/edje/edje_cc_out.c
index e97a8ec005..5f53fa76b9 100644
--- a/src/bin/edje/edje_cc_out.c
+++ b/src/bin/edje/edje_cc_out.c
@@ -224,6 +224,7 @@ Eina_List *codes = NULL;
224Eina_List *code_lookups = NULL; 224Eina_List *code_lookups = NULL;
225Eina_List *aliases = NULL; 225Eina_List *aliases = NULL;
226Eina_List *color_tree_root = NULL; 226Eina_List *color_tree_root = NULL;
227Eina_Hash *color_class_reg = NULL;
227 228
228static Eet_Data_Descriptor *edd_edje_file = NULL; 229static Eet_Data_Descriptor *edd_edje_file = NULL;
229static Eet_Data_Descriptor *edd_edje_part_collection = NULL; 230static Eet_Data_Descriptor *edd_edje_part_collection = NULL;
@@ -2781,6 +2782,44 @@ data_thread_fontmap_end(void *data EINA_UNUSED, Ecore_Thread *thread EINA_UNUSED
2781 thread_end(0); 2782 thread_end(0);
2782} 2783}
2783 2784
2785static Eina_Bool
2786data_write_color_class_register_each_cb(const Eina_Hash *hash EINA_UNUSED,
2787 const void *key,
2788 void *data EINA_UNUSED,
2789 void *fdata)
2790{
2791 Edje_Color_Class_Info *cc_info = fdata;
2792 cc_info->colors = eina_list_append(cc_info->colors,
2793 eina_stringshare_add(key));
2794 return EINA_TRUE;
2795}
2796
2797static void
2798data_write_color_class_register(Eet_File *ef)
2799{
2800 Edje_Color_Class_Info *cc_info;
2801 const char *s;
2802
2803 if (!color_class_reg) return;
2804 cc_info = calloc(1, sizeof(Edje_Color_Class_Info));
2805 if (!cc_info)
2806 {
2807 ERR("Out of Memory");
2808 exit(-1);
2809 }
2810 eina_hash_foreach(color_class_reg,
2811 data_write_color_class_register_each_cb,
2812 cc_info);
2813
2814 eet_data_write(ef, _edje_edd_edje_color_class_info,
2815 "edje/color_class_info", cc_info, compress_mode);
2816
2817 eina_hash_free(color_class_reg);
2818 color_class_reg = NULL;
2819 EINA_LIST_FREE(cc_info->colors, s) eina_stringshare_del(s);
2820 free(cc_info);
2821}
2822
2784void 2823void
2785data_write(void) 2824data_write(void)
2786{ 2825{
@@ -2893,6 +2932,7 @@ data_write(void)
2893 data_thread_authors_end(ef, NULL); 2932 data_thread_authors_end(ef, NULL);
2894 } 2933 }
2895 } 2934 }
2935 data_write_color_class_register(ef);
2896 data_write_images(); 2936 data_write_images();
2897 data_image_sets_init(); 2937 data_image_sets_init();
2898 INF("images: %3.5f", ecore_time_get() - t); t = ecore_time_get(); 2938 INF("images: %3.5f", ecore_time_get() - t); t = ecore_time_get();
@@ -4458,6 +4498,7 @@ process_color_tree(char *s, const char *f_in, int ln)
4458 4498
4459 ctn = mem_alloc(SZ(Edje_Color_Tree_Node)); 4499 ctn = mem_alloc(SZ(Edje_Color_Tree_Node));
4460 ctn->name = strdup(token[!id]); 4500 ctn->name = strdup(token[!id]);
4501 color_class_register(ctn->name);
4461 ctn->color_classes = NULL; 4502 ctn->color_classes = NULL;
4462 4503
4463 edje_file->color_tree = eina_list_append(edje_file->color_tree, ctn); 4504 edje_file->color_tree = eina_list_append(edje_file->color_tree, ctn);
diff --git a/src/lib/edje/Edje_Common.h b/src/lib/edje/Edje_Common.h
index c94a2ff9ac..e03154e6ec 100644
--- a/src/lib/edje/Edje_Common.h
+++ b/src/lib/edje/Edje_Common.h
@@ -1808,6 +1808,37 @@ EAPI Eina_List *edje_mmap_collection_list(Eina_File *f);
1808EAPI void edje_mmap_collection_list_free(Eina_List *lst); 1808EAPI void edje_mmap_collection_list_free(Eina_List *lst);
1809 1809
1810/** 1810/**
1811 * @brief Returns a list of colorclasses used in this edje file
1812 * @param f The mapped file
1813 *
1814 * @return A list of strings freed by edje_file_color_class_used_free()
1815 *
1816 * @since 1.26
1817 */
1818EAPI Eina_List *edje_mmap_color_class_used_list(Eina_File *f);
1819
1820/**
1821 * @brief Returns a list of colorclasses used in this edje file
1822 * @param file The file path
1823 *
1824 * @return A list of strings freed by edje_file_color_class_used_free()
1825 *
1826 * @since 1.26
1827 */
1828EAPI Eina_List *edje_file_color_class_used_list(const char *file);
1829
1830/**
1831 * @brief Frees a list of color classes used
1832 * @param The list
1833 *
1834 * This frees the list returned by edje_mmap_color_class_used_list() or
1835 * edje_file_color_class_used_list() when you no longer need it.
1836 *
1837 * @since 1.26
1838 */
1839EAPI void edje_file_color_class_used_free(Eina_List *lst);
1840
1841/**
1811 * @brief Determines whether a group matching glob exists in an edje mapped file. 1842 * @brief Determines whether a group matching glob exists in an edje mapped file.
1812 * @param f The mapped file 1843 * @param f The mapped file
1813 * @param glob A glob to match on 1844 * @param glob A glob to match on
diff --git a/src/lib/edje/edje_data.c b/src/lib/edje/edje_data.c
index 6a89fd9ca9..1ce628075f 100644
--- a/src/lib/edje/edje_data.c
+++ b/src/lib/edje/edje_data.c
@@ -2,6 +2,7 @@
2 2
3EAPI Eet_Data_Descriptor * _edje_edd_edje_file = NULL; 3EAPI Eet_Data_Descriptor * _edje_edd_edje_file = NULL;
4EAPI Eet_Data_Descriptor * _edje_edd_edje_part_collection = NULL; 4EAPI Eet_Data_Descriptor * _edje_edd_edje_part_collection = NULL;
5EAPI Eet_Data_Descriptor * _edje_edd_edje_color_class_info = NULL;
5 6
6Eet_Data_Descriptor *_edje_edd_edje_string = NULL; 7Eet_Data_Descriptor *_edje_edd_edje_string = NULL;
7Eet_Data_Descriptor *_edje_edd_edje_style = NULL; 8Eet_Data_Descriptor *_edje_edd_edje_style = NULL;
@@ -310,6 +311,7 @@ _edje_edd_shutdown(void)
310 311
311 FREED(_edje_edd_edje_file); 312 FREED(_edje_edd_edje_file);
312 FREED(_edje_edd_edje_part_collection); 313 FREED(_edje_edd_edje_part_collection);
314 FREED(_edje_edd_edje_color_class_info);
313} 315}
314 316
315#define EDJE_DEFINE_POINTER_TYPE(Type, Name) \ 317#define EDJE_DEFINE_POINTER_TYPE(Type, Name) \
@@ -410,6 +412,11 @@ _edje_edd_init(void)
410 EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_image_directory, Edje_Image_Directory, "sets", sets, _edje_edd_edje_image_directory_set); 412 EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_image_directory, Edje_Image_Directory, "sets", sets, _edje_edd_edje_image_directory_set);
411 EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_image_directory, Edje_Image_Directory, "vectors", vectors, _edje_edd_edje_vector_directory_entry); 413 EET_DATA_DESCRIPTOR_ADD_VAR_ARRAY(_edje_edd_edje_image_directory, Edje_Image_Directory, "vectors", vectors, _edje_edd_edje_vector_directory_entry);
412 414
415 /* collection directory */
416 EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Color_Class_Info);
417 _edje_edd_edje_color_class_info = eet_data_descriptor_file_new(&eddc);
418 EET_DATA_DESCRIPTOR_ADD_LIST_STRING(_edje_edd_edje_color_class_info, Edje_Color_Class_Info, "colors", colors);
419
413 /*MO*/ 420 /*MO*/
414 421
415 EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Mo); 422 EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Edje_Mo);
diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index acf0826b1d..1b9f025ebf 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -207,6 +207,62 @@ edje_mmap_collection_list_free(Eina_List *lst)
207 edje_file_collection_list_free(lst); 207 edje_file_collection_list_free(lst);
208} 208}
209 209
210EAPI Eina_List *
211edje_mmap_color_class_used_list(Eina_File *f)
212{
213 Eina_List *lst = NULL, *l;
214 Edje_File *edf;
215 int error_ret = 0;
216 const char *s;
217
218 if (!f) return NULL;
219 edf = _edje_cache_file_coll_open(f, NULL, &error_ret, NULL, NULL);
220 if (edf)
221 {
222 Edje_Color_Class_Info *cc_info;
223
224 cc_info = eet_data_read(edf->ef, _edje_edd_edje_color_class_info,
225 "edje/color_class_info");
226 if (cc_info)
227 {
228 EINA_LIST_FOREACH(cc_info->colors, l, s)
229 lst = eina_list_append(lst, eina_stringshare_add(s));
230 eina_list_free(cc_info->colors);
231 free(cc_info);
232 }
233 _edje_cache_file_unref(edf);
234 }
235
236 return lst;
237}
238
239EAPI Eina_List *
240edje_file_color_class_used_list(const char *file)
241{
242 Eina_File *f;
243 Eina_List *lst = NULL;
244 char *tmp;
245
246 if ((!file) || (!*file)) return NULL;
247 tmp = eina_vpath_resolve(file);
248 f = eina_file_open(tmp, EINA_FALSE);
249 if (!f) goto err;
250
251 lst = edje_mmap_collection_list(f);
252
253 eina_file_close(f); // close matching open OK
254err:
255 free(tmp);
256 return lst;
257}
258
259EAPI void
260edje_file_color_class_used_free(Eina_List *lst)
261{
262 eina_list_free(lst);
263}
264
265
210EAPI Eina_Bool 266EAPI Eina_Bool
211edje_mmap_group_exists(Eina_File *f, const char *glob) 267edje_mmap_group_exists(Eina_File *f, const char *glob)
212{ 268{
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index 1d289123a7..d7f8ff6a3e 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -327,7 +327,7 @@ typedef struct _Edje_Gfx_Filter Edje_Gfx_Filter;
327typedef struct _Edje_Gfx_Filter_Directory Edje_Gfx_Filter_Directory; 327typedef struct _Edje_Gfx_Filter_Directory Edje_Gfx_Filter_Directory;
328typedef struct _Edje_Color_Tree_Node Edje_Color_Tree_Node; 328typedef struct _Edje_Color_Tree_Node Edje_Color_Tree_Node;
329typedef struct _Edje_Vector_Directory_Entry Edje_Vector_Directory_Entry; 329typedef struct _Edje_Vector_Directory_Entry Edje_Vector_Directory_Entry;
330 330typedef struct _Edje_Color_Class_Info Edje_Color_Class_Info;
331 331
332typedef struct _Edje_Vibration_Sample Edje_Vibration_Sample; 332typedef struct _Edje_Vibration_Sample Edje_Vibration_Sample;
333typedef struct _Edje_Vibration_Directory Edje_Vibration_Directory; 333typedef struct _Edje_Vibration_Directory Edje_Vibration_Directory;
@@ -656,7 +656,12 @@ struct _Edje_External_Directory_Entry
656 656
657/*----------*/ 657/*----------*/
658 658
659 659/*----------*/
660struct _Edje_Color_Class_Info
661{
662 Eina_List *colors;
663};
664/*----------*/
660 665
661/*----------*/ 666/*----------*/
662 667
@@ -2334,6 +2339,7 @@ EAPI void _edje_edd_shutdown(void);
2334 2339
2335EAPI extern Eet_Data_Descriptor *_edje_edd_edje_file; 2340EAPI extern Eet_Data_Descriptor *_edje_edd_edje_file;
2336EAPI extern Eet_Data_Descriptor *_edje_edd_edje_part_collection; 2341EAPI extern Eet_Data_Descriptor *_edje_edd_edje_part_collection;
2342EAPI extern Eet_Data_Descriptor *_edje_edd_edje_color_class_info;
2337 2343
2338extern Eina_Inlist *_edje_edjes; 2344extern Eina_Inlist *_edje_edjes;
2339 2345
diff --git a/src/lib/elementary/elm_theme.c b/src/lib/elementary/elm_theme.c
index 7a40a4d7e9..123bc0f14e 100644
--- a/src/lib/elementary/elm_theme.c
+++ b/src/lib/elementary/elm_theme.c
@@ -521,6 +521,80 @@ _elm_theme_shutdown(void)
521 } 521 }
522} 522}
523 523
524
525
526
527
528static Eina_List *
529_elm_theme_file_color_class_list(Eina_List *list,
530 Eina_Inlist *handles)
531{
532 Eina_Stringshare *c;
533 Eina_List *ccl;
534 Eina_List *ll;
535 Elm_Theme_File *etf;
536
537 EINA_INLIST_FOREACH(handles, etf)
538 {
539 ccl = edje_mmap_color_class_used_list(etf->handle);
540 EINA_LIST_FOREACH(ccl, ll, c)
541 {
542 list = eina_list_append(list, eina_stringshare_add(c));
543 }
544 edje_file_color_class_used_free(ccl);
545 }
546 return list;
547}
548
549static Eina_Bool
550_elm_theme_color_class_list_hash_cb(const Eina_Hash *hash EINA_UNUSED,
551 const void *key,
552 void *data EINA_UNUSED,
553 void *fdata)
554{
555 Eina_List **list = fdata;
556
557 *list = eina_list_append(*list, eina_stringshare_add(key));
558 return EINA_TRUE;
559}
560
561EAPI Eina_List *
562elm_theme_color_class_list(Elm_Theme *th)
563{
564 Eina_List *list;
565 Eina_Hash *hash;
566 const char *s;
567
568 if (!th) th = theme_default;
569 if (!th) return NULL;
570
571 // go through all possible theme files and find collections that match
572 list = _elm_theme_file_color_class_list(NULL, th->overlay);
573 list = _elm_theme_file_color_class_list(list, th->themes);
574 list = _elm_theme_file_color_class_list(list, th->extension);
575
576 hash = eina_hash_string_superfast_new(NULL);
577 EINA_LIST_FREE(list, s)
578 {
579 if (!eina_hash_find(hash, s)) eina_hash_add(hash, s, hash);
580 eina_stringshare_del(s);
581 }
582 eina_hash_foreach(hash, _elm_theme_color_class_list_hash_cb, &list);
583 eina_hash_free(hash);
584
585 // sort the list nicely at the end
586 list = eina_list_sort(list, 0, EINA_COMPARE_CB(strcmp));
587 return list;
588}
589
590EAPI void
591elm_theme_color_class_list_free(Eina_List *list)
592{
593 const char *s;
594
595 EINA_LIST_FREE(list, s) eina_stringshare_del(s);
596}
597
524EAPI Elm_Theme * 598EAPI Elm_Theme *
525elm_theme_new(void) 599elm_theme_new(void)
526{ 600{
diff --git a/src/lib/elementary/elm_theme.h b/src/lib/elementary/elm_theme.h
index 7bf51d5b28..a5c55295da 100644
--- a/src/lib/elementary/elm_theme.h
+++ b/src/lib/elementary/elm_theme.h
@@ -79,6 +79,31 @@
79typedef struct _Elm_Theme Elm_Theme; 79typedef struct _Elm_Theme Elm_Theme;
80 80
81/** 81/**
82 * Return a list of strings of color classes used in the given theme
83 *
84 * @param th The theme to get the reference from (NULL will be default)
85 * @return The list of color classes
86 *
87 * Free the returned list using elm_theme_color_class_list_free() when done.
88 *
89 * @ingroup Elm_Theme
90 * @sizne 1.26
91 */
92EAPI Eina_List *elm_theme_color_class_list(Elm_Theme *th);
93
94/**
95 * Free list of color classes used in the themes
96 *
97 * @param list The list to free
98 *
99 * Free the returned list returned from elm_theme_color_class_list()
100 *
101 * @ingroup Elm_Theme
102 * @sizne 1.26
103 */
104EAPI void elm_theme_color_class_list_free(Eina_List *list);
105
106/**
82 * Create a new specific theme 107 * Create a new specific theme
83 * 108 *
84 * This creates an empty specific theme that only uses the default theme. A 109 * This creates an empty specific theme that only uses the default theme. A