From 0b56671b3ea1e7bb1b27c58934b97816e2824f3f Mon Sep 17 00:00:00 2001 From: rephorm Date: Wed, 11 Jan 2006 03:19:45 +0000 Subject: [PATCH] color class blocks in edje. this allows you to specify the default color for any parts using color_classes in a given file. this color will be overridden by edje_color_class_set() which will in turn be overridden by edje_object_color_class_set() note. if you specify a color (color: ...) in a part description that also has a color_class, the cc will be multiplied against the color -- generally not what you want. also, as a tip, the gimp's 'multiply' blend mode is almost exactly the same as evas/edje's coloring. example: ... part { name: "colored"; type: RECT; description { state: "default" 0.0; color_class: "bg_color"; /* note: no color: set here */ } } ... color_classes { color_class { name: "bg_color"; color: 229 239 255 255; } } SVN revision: 19707 --- legacy/edje/src/bin/edje_cc_handlers.c | 129 +++++++++++++++++++++++++ legacy/edje/src/lib/edje_data.c | 22 ++++- legacy/edje/src/lib/edje_private.h | 1 + legacy/edje/src/lib/edje_util.c | 19 +++- 4 files changed, 167 insertions(+), 4 deletions(-) diff --git a/legacy/edje/src/bin/edje_cc_handlers.c b/legacy/edje/src/bin/edje_cc_handlers.c index 6676a94cc9..49a98603ab 100644 --- a/legacy/edje/src/bin/edje_cc_handlers.c +++ b/legacy/edje/src/bin/edje_cc_handlers.c @@ -15,6 +15,12 @@ static void st_styles_style_name(void); static void st_styles_style_base(void); static void st_styles_style_tag(void); +static void ob_color_class(void); +static void st_color_class_name(void); +static void st_color_class_color(void); +static void st_color_class_color2(void); +static void st_color_class_color3(void); + static void ob_collections(void); static void ob_collections_group(void); @@ -105,6 +111,10 @@ New_Statement_Handler statement_handlers[] = {"styles.style.name", st_styles_style_name}, {"styles.style.base", st_styles_style_base}, {"styles.style.tag", st_styles_style_tag}, + {"color_classes.color_class.name", st_color_class_name}, + {"color_classes.color_class.color", st_color_class_color}, + {"color_classes.color_class.color2", st_color_class_color2}, + {"color_classes.color_class.color3", st_color_class_color3}, {"collections.image", st_images_image}, /* dup */ {"collections.images.image", st_images_image}, /* dup */ {"collections.font", st_fonts_font}, /* dup */ @@ -112,6 +122,10 @@ New_Statement_Handler statement_handlers[] = {"collections.styles.style.name", st_styles_style_name}, /* dup */ {"collections.styles.style.base", st_styles_style_base}, /* dup */ {"collections.styles.style.tag", st_styles_style_tag}, /* dup */ + {"collections.color_classes.color_class.name", st_color_class_name}, /* dup */ + {"collections.color_classes.color_class.color", st_color_class_color}, /* dup */ + {"collections.color_classes.color_class.color2", st_color_class_color2}, /* dup */ + {"collections.color_classes.color_class.color3", st_color_class_color3}, /* dup */ {"collections.group.name", st_collections_group_name}, {"collections.group.min", st_collections_group_min}, {"collections.group.max", st_collections_group_max}, @@ -123,6 +137,10 @@ New_Statement_Handler statement_handlers[] = {"collections.group.styles.style.name", st_styles_style_name}, /* dup */ {"collections.group.styles.style.base", st_styles_style_base}, /* dup */ {"collections.group.styles.style.tag", st_styles_style_tag}, /* dup */ + {"collections.group.color_classes.color_class.name", st_color_class_name}, /* dup */ + {"collections.group.color_classes.color_class.color", st_color_class_color}, /* dup */ + {"collections.group.color_classes.color_class.color2", st_color_class_color2}, /* dup */ + {"collections.group.color_classes.color_class.color3", st_color_class_color3}, /* dup */ {"collections.group.parts.image", st_images_image}, /* dup */ {"collections.group.parts.images.image", st_images_image}, /* dup */ {"collections.group.parts.font", st_fonts_font}, /* dup */ @@ -130,6 +148,10 @@ New_Statement_Handler statement_handlers[] = {"collections.group.parts.styles.style.name", st_styles_style_name}, /* dup */ {"collections.group.parts.styles.style.base", st_styles_style_base}, /* dup */ {"collections.group.parts.styles.style.tag", st_styles_style_tag}, /* dup */ + {"collections.group.parts.color_classes.color_class.name", st_color_class_name}, /* dup */ + {"collections.group.parts.color_classes.color_class.color", st_color_class_color}, /* dup */ + {"collections.group.parts.color_classes.color_class.color2", st_color_class_color2}, /* dup */ + {"collections.group.parts.color_classes.color_class.color3", st_color_class_color3}, /* dup */ {"collections.group.parts.part.name", st_collections_group_parts_part_name}, {"collections.group.parts.part.type", st_collections_group_parts_part_type}, {"collections.group.parts.part.effect", st_collections_group_parts_part_effect}, @@ -147,6 +169,10 @@ New_Statement_Handler statement_handlers[] = {"collections.group.parts.part.styles.style.name", st_styles_style_name}, /* dup */ {"collections.group.parts.part.styles.style.base", st_styles_style_base}, /* dup */ {"collections.group.parts.part.styles.style.tag", st_styles_style_tag}, /* dup */ + {"collections.group.parts.part.color_classes.color_class.name", st_color_class_name}, /* dup */ + {"collections.group.parts.part.color_classes.color_class.color", st_color_class_color}, /* dup */ + {"collections.group.parts.part.color_classes.color_class.color2", st_color_class_color2}, /* dup */ + {"collections.group.parts.part.color_classes.color_class.color3", st_color_class_color3}, /* dup */ {"collections.group.parts.part.description.inherit", st_collections_group_parts_part_description_inherit}, {"collections.group.parts.part.description.state", st_collections_group_parts_part_description_state}, {"collections.group.parts.part.description.visible", st_collections_group_parts_part_description_visible}, @@ -201,6 +227,10 @@ New_Statement_Handler statement_handlers[] = {"collections.group.parts.part.description.styles.style.name", st_styles_style_name}, /* dup */ {"collections.group.parts.part.description.styles.style.base", st_styles_style_base}, /* dup */ {"collections.group.parts.part.description.styles.style.tag", st_styles_style_tag}, /* dup */ + {"collections.group.parts.part.description.color_classes.color_class.name", st_color_class_name}, /* dup */ + {"collections.group.parts.part.description.color_classes.color_class.color", st_color_class_color}, /* dup */ + {"collections.group.parts.part.description.color_classes.color_class.color2", st_color_class_color2}, /* dup */ + {"collections.group.parts.part.description.color_classes.color_class.color3", st_color_class_color3}, /* dup */ {"collections.group.parts.part.description.programs.image", st_images_image}, /* dup */ {"collections.group.parts.part.description.programs.images.image", st_images_image}, /* dup */ {"collections.group.parts.part.description.programs.font", st_fonts_font}, /* dup */ @@ -290,11 +320,15 @@ New_Object_Handler object_handlers[] = {"data", NULL}, {"styles", NULL}, {"styles.style", ob_styles_style}, + {"color_classes", NULL}, + {"color_classes.color_class", ob_color_class}, {"collections", ob_collections}, {"collections.images", NULL}, /* dup */ {"collections.fonts", NULL}, /* dup */ {"collections.styles", NULL}, /* dup */ {"collections.styles.style", ob_styles_style}, /* dup */ + {"collections.color_classes", NULL}, /* dup */ + {"collections.color_classes.color_class", ob_color_class}, /* dup */ {"collections.group", ob_collections_group}, {"collections.group.data", NULL}, {"collections.group.script", ob_collections_group_script}, @@ -302,17 +336,23 @@ New_Object_Handler object_handlers[] = {"collections.group.fonts", NULL}, /* dup */ {"collections.group.styles", NULL}, /* dup */ {"collections.group.styles.style", ob_styles_style}, /* dup */ + {"collections.group.color_classes", NULL}, /* dup */ + {"collections.group.color_classes.color_class", ob_color_class}, /* dup */ {"collections.group.parts", NULL}, {"collections.group.parts.images", NULL}, /* dup */ {"collections.group.parts.fonts", NULL}, /* dup */ {"collections.group.parts.styles", NULL}, /* dup */ {"collections.group.parts.styles.style", ob_styles_style}, /* dup */ + {"collections.group.parts.color_classes", NULL}, /* dup */ + {"collections.group.parts.color_classes.color_class", ob_color_class}, /* dup */ {"collections.group.parts.part", ob_collections_group_parts_part}, {"collections.group.parts.part.dragable", NULL}, {"collections.group.parts.part.images", NULL}, /* dup */ {"collections.group.parts.part.fonts", NULL}, /* dup */ {"collections.group.parts.part.styles", NULL}, /* dup */ {"collections.group.parts.part.styles.style", ob_styles_style}, /* dup */ + {"collections.group.parts.part.color_classes", NULL}, /* dup */ + {"collections.group.parts.part.color_classes.color_class", ob_color_class}, /* dup */ {"collections.group.parts.part.description", ob_collections_group_parts_part_description}, {"collections.group.parts.part.description.rel1", NULL}, {"collections.group.parts.part.description.rel2", NULL}, @@ -327,6 +367,8 @@ New_Object_Handler object_handlers[] = {"collections.group.parts.part.description.fonts", NULL}, /* dup */ {"collections.group.parts.part.description.styles", NULL}, /* dup */ {"collections.group.parts.part.description.styles.style", ob_styles_style}, /* dup */ + {"collections.group.parts.part.description.color_classes", NULL}, /* dup */ + {"collections.group.parts.part.description.color_classes.color_class", ob_color_class}, /* dup */ {"collections.group.parts.part.description.program", ob_collections_group_programs_program}, /* dup */ {"collections.group.parts.part.description.program.script", ob_collections_group_programs_program_script}, /* dup */ {"collections.group.parts.part.description.programs", NULL}, /* dup */ @@ -494,6 +536,92 @@ st_data_item(void) edje_file->data = evas_list_append(edje_file->data, di); } + +static void +ob_color_class(void) +{ + Edje_Color_Class *cc; + + cc = mem_alloc(SZ(Edje_Color_Class)); + edje_file->color_classes = evas_list_append(edje_file->color_classes, cc); + + cc->r = 0; + cc->g = 0; + cc->b = 0; + cc->a = 0; + cc->r2 = 0; + cc->g2 = 0; + cc->b2 = 0; + cc->a2 = 0; + cc->r3 = 0; + cc->g3 = 0; + cc->b3 = 0; + cc->a3 = 0; +} + +static void +st_color_class_name(void) +{ + Edje_Color_Class *cc, *tcc; + Evas_List *l; + + cc = evas_list_data(evas_list_last(edje_file->color_classes)); + cc->name = parse_str(0); + for (l = edje_file->color_classes; l; l = l->next) + { + tcc = l->data; + if ((cc != tcc) && (!strcmp(cc->name, tcc->name))) + { + fprintf(stderr, "%s: Error. parse error %s:%i. There is already a color class named \"%s\"\n", + progname, file_in, line - 1, cc->name); + exit(-1); + } + } +} + +static void +st_color_class_color(void) +{ + Edje_Color_Class *cc; + + check_arg_count(4); + + cc = evas_list_data(evas_list_last(edje_file->color_classes)); + cc->r = parse_int_range(0, 0, 255); + cc->g = parse_int_range(1, 0, 255); + cc->b = parse_int_range(2, 0, 255); + cc->a = parse_int_range(3, 0, 255); +} + +static void +st_color_class_color2(void) +{ + Edje_Color_Class *cc; + + check_arg_count(4); + + cc = evas_list_data(evas_list_last(edje_file->color_classes)); + cc->r2 = parse_int_range(0, 0, 255); + cc->g2 = parse_int_range(1, 0, 255); + cc->b2 = parse_int_range(2, 0, 255); + cc->a2 = parse_int_range(3, 0, 255); +} + + +static void +st_color_class_color3(void) +{ + Edje_Color_Class *cc; + + check_arg_count(4); + + cc = evas_list_data(evas_list_last(edje_file->color_classes)); + cc->r3 = parse_int_range(0, 0, 255); + cc->g3 = parse_int_range(1, 0, 255); + cc->b3 = parse_int_range(2, 0, 255); + cc->a3 = parse_int_range(3, 0, 255); +} + static void ob_styles_style(void) { @@ -523,6 +651,7 @@ st_styles_style_name(void) } } + static void st_styles_style_base(void) { diff --git a/legacy/edje/src/lib/edje_data.c b/legacy/edje/src/lib/edje_data.c index 704f8b7d59..eea79cefe6 100644 --- a/legacy/edje/src/lib/edje_data.c +++ b/legacy/edje/src/lib/edje_data.c @@ -4,6 +4,7 @@ EAPI Eet_Data_Descriptor *_edje_edd_edje_file = NULL; EAPI Eet_Data_Descriptor *_edje_edd_edje_style = NULL; EAPI Eet_Data_Descriptor *_edje_edd_edje_style_tag = NULL; +EAPI Eet_Data_Descriptor *_edje_edd_edje_color_class = NULL; EAPI Eet_Data_Descriptor *_edje_edd_edje_data = NULL; EAPI Eet_Data_Descriptor *_edje_edd_edje_font_directory = NULL; EAPI Eet_Data_Descriptor *_edje_edd_edje_font_directory_entry = NULL; @@ -133,7 +134,25 @@ _edje_edd_setup(void) eet_data_descriptor2_new(&eddc); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style, Edje_Style, "name", name, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_style, Edje_Style, "tags", tags, _edje_edd_edje_style_tag); - + + NEWD("Edje_Color_Class", + Edje_Color_Class); + _edje_edd_edje_color_class = + eet_data_descriptor2_new(&eddc); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "name", name, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "r", r, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "g", g, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "b", b, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "a", a, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "r2", r2, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "g2", g2, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "b2", b2, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "a2", a2, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "r3", r3, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "g3", g3, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "b3", b3, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_color_class, Edje_Color_Class, "a3", a3, EET_T_INT); + /* the main file directory */ NEWD("Edje_File", Edje_File); @@ -147,6 +166,7 @@ _edje_edd_setup(void) EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "collection_dir", collection_dir, _edje_edd_edje_part_collection_directory); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "data", data, _edje_edd_edje_data); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "styles", styles, _edje_edd_edje_style); + EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "color_classes", color_classes, _edje_edd_edje_color_class); /* parts & programs - loaded induvidually */ NEWD("Edje_Program_Target", diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index dd34b06b88..5b935ef160 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -193,6 +193,7 @@ struct _Edje_File Edje_Part_Collection_Directory *collection_dir; Evas_List *data; Evas_List *styles; + Evas_List *color_classes; int references; char *compiler; diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 113e269d7b..c66da6e4b1 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -1389,16 +1389,29 @@ Edje_Color_Class * _edje_color_class_find(Edje *ed, char *color_class) { Evas_List *l; + Edje_Color_Class *cc = NULL; if ((!ed) || (!color_class)) return NULL; + + /* first look through the object scope */ for (l = ed->color_classes; l; l = l->next) { - Edje_Color_Class *cc; - cc = l->data; if ((cc->name) && (!strcmp(color_class, cc->name))) return cc; } - return evas_hash_find(_edje_color_class_hash, color_class); + + /* next look through the global scope */ + cc = evas_hash_find(_edje_color_class_hash, color_class); + if (cc) return cc; + + /* finally, look through the file scope */ + for (l = ed->file->color_classes; l; l = l->next) + { + cc = l->data; + if ((cc->name) && (!strcmp(color_class, cc->name))) return cc; + } + + return NULL; } void