Enlightenment CVS committal Author : leviathan Project : e17 Module : libs/engrave
Dir : e17/libs/engrave/src/lib Modified Files: .cvsignore Engrave.h Makefile.am engrave.l engrave.y engrave_file.c engrave_file.h engrave_out.c engrave_parse.c engrave_parse.h engrave_spectrum.c Added Files: engrave_color_class.c engrave_color_class.h Log Message: Add color classes support Only catch is wherever color_class definitions appear in the source file, they will end up in the main color_classes block =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/.cvsignore,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- .cvsignore 29 Dec 2006 18:27:30 -0000 1.4 +++ .cvsignore 29 Jul 2007 14:48:30 -0000 1.5 @@ -19,6 +19,7 @@ libengrave_la-engrave_program.lo libengrave_la-engrave_style.lo libengrave_la-engrave_spectrum.lo +libengrave_la-engrave_color_class.lo libengrave_la-libengrave_la-engrave.lo .deps .libs =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/Engrave.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- Engrave.h 27 Mar 2007 02:10:36 -0000 1.16 +++ Engrave.h 29 Jul 2007 14:48:30 -0000 1.17 @@ -100,6 +100,7 @@ #include <engrave_image.h> #include <engrave_font.h> #include <engrave_spectrum.h> +#include <engrave_color_class.h> #include <engrave_program.h> #include <engrave_part_state.h> #include <engrave_part.h> =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/Makefile.am,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- Makefile.am 28 Dec 2006 18:22:56 -0000 1.13 +++ Makefile.am 29 Jul 2007 14:48:30 -0000 1.14 @@ -24,6 +24,7 @@ engrave_file.h \ engrave_font.h \ engrave_spectrum.h \ + engrave_color_class.h \ engrave_style.h \ engrave_group.h \ engrave_image.h \ @@ -44,6 +45,7 @@ engrave_file.c \ engrave_font.c \ engrave_spectrum.c \ + engrave_color_class.c \ engrave_style.c \ engrave_group.c \ engrave_image.c \ =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave.l,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- engrave.l 24 Jul 2007 20:01:07 -0000 1.17 +++ engrave.l 29 Jul 2007 14:48:30 -0000 1.18 @@ -102,6 +102,7 @@ color2 { KEYWORD_RETURN(COLOR2); } color3 { KEYWORD_RETURN(COLOR3); } color_class { KEYWORD_RETURN(COLOR_CLASS); } +color_classes { KEYWORD_RETURN(COLOR_CLASSES); } COMP { KEYWORD_RETURN(COMP); } confine { KEYWORD_RETURN(CONFINE); } data { KEYWORD_RETURN(DATA); } =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave.y,v retrieving revision 1.26 retrieving revision 1.27 diff -u -3 -r1.26 -r1.27 --- engrave.y 24 Jul 2007 20:01:07 -0000 1.26 +++ engrave.y 29 Jul 2007 14:48:30 -0000 1.27 @@ -34,7 +34,7 @@ %token BASE %token STRING FLOAT %token ACTION AFTER ALIGN ASPECT ASPECT_PREFERENCE BORDER MIDDLE -%token CLIP_TO COLLECTIONS COLOR COLOR2 COLOR3 COLOR_CLASS +%token CLIP_TO COLLECTIONS COLOR COLOR2 COLOR3 COLOR_CLASS COLOR_CLASSES %token CONFINE DATA DESCRIPTION DRAGABLE EFFECT FILL FIT TILE SCALE %token FONT FONTS GROUP GROUPS IMAGE TEXTBLOCK IMAGES IN ITEM MAX MIN FIXED MOUSE_EVENTS %token NAME NORMAL OFFSET ORIGIN PART PARTS PROGRAM PROGRAMS ALIAS @@ -78,6 +78,7 @@ | spectra edjes | styles edjes | collections edjes + | color_classes {section = BASE; } edjes | data edjes | error { parse_error(); @@ -89,6 +90,26 @@ collections: COLLECTIONS OPEN_BRACE {section = GROUPS; } collection_statement CLOSE_BRACE semicolon_maybe { section = BASE; } ; +color_classes: COLOR_CLASSES OPEN_BRACE color_classes_entry CLOSE_BRACE semicolon_maybe + ; + +color_classes_entry: /* empty */ + | color_class_block color_classes_entry + ; + +color_class_block: COLOR_CLASS OPEN_BRACE { + engrave_parse_file_color_class(); + section = COLOR_CLASS; + } color_class_statement CLOSE_BRACE semicolon_maybe /* don't reset section here, it should be set from calling block */ + ; + +color_class_statement: /* empty */ + | name color_class_statement + | color color_class_statement + | color2 color_class_statement + | color3 color_class_statement + ; + spectra: SPECTRA OPEN_BRACE { section = SPECTRA; } spectra_statement CLOSE_BRACE semicolon_maybe { section = BASE; } ; @@ -259,6 +280,8 @@ break; case STYLE: engrave_parse_style_name($3); + case COLOR_CLASS: + engrave_parse_color_class_name($3); default: break; } @@ -334,12 +357,10 @@ ; collection_statement: /* empty */ - | styles | collection_statement styles - | images | collection_statement images - | group | collection_statement group + | collection_statement color_classes { section = GROUPS; } ; group: GROUP OPEN_BRACE { engrave_parse_group(); section = GROUP; } group_foo CLOSE_BRACE semicolon_maybe { section = GROUPS; } @@ -354,6 +375,7 @@ | script | parts | programs + | color_classes { section = GROUP; } ; script: SCRIPT { @@ -439,6 +461,7 @@ | parts_statement part | parts_statement program_statement | parts_statement programs + | parts_statement color_classes { section = PARTS; } ; part: PART OPEN_BRACE { engrave_parse_part(); section = PART; } part_foo CLOSE_BRACE semicolon_maybe { section = PARTS; } @@ -463,6 +486,7 @@ | pointer_mode | clip_to | color_class + | color_classes { section = PART; } | text_class ; @@ -617,6 +641,7 @@ | step | aspect | aspect_preference + | color_classes { section = STATE; } ; state: STATE COLON STRING exp SEMICOLON { @@ -922,17 +947,38 @@ ; color: COLOR COLON exp exp exp exp SEMICOLON { - engrave_parse_state_color((int)$3, (int)$4, (int)$5, (int)$6); + switch(section) + { + case COLOR_CLASS: + engrave_parse_color_class_color(1, (int)$3, (int)$4, (int)$5, (int)$6); + break; + default: + engrave_parse_state_color((int)$3, (int)$4, (int)$5, (int)$6); + } } ; color2: COLOR2 COLON exp exp exp exp SEMICOLON { - engrave_parse_state_color2((int)$3, (int)$4, (int)$5, (int)$6); + switch(section) + { + case COLOR_CLASS: + engrave_parse_color_class_color(2, (int)$3, (int)$4, (int)$5, (int)$6); + break; + default: + engrave_parse_state_color2((int)$3, (int)$4, (int)$5, (int)$6); + } } ; color3: COLOR3 COLON exp exp exp exp SEMICOLON { - engrave_parse_state_color3((int)$3, (int)$4, (int)$5, (int)$6); + switch(section) + { + case COLOR_CLASS: + engrave_parse_color_class_color(3, (int)$3, (int)$4, (int)$5, (int)$6); + break; + default: + engrave_parse_state_color3((int)$3, (int)$4, (int)$5, (int)$6); + } } ; =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_file.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- engrave_file.c 27 Mar 2007 02:10:36 -0000 1.22 +++ engrave_file.c 29 Jul 2007 14:48:30 -0000 1.23 @@ -55,6 +55,18 @@ } ef->groups = evas_list_free(ef->groups); + for (l = ef->spectra; l; l = l->next) { + Engrave_Spectrum *es = l->data; + engrave_spectrum_free(es); + } + ef->spectra = evas_list_free(ef->spectra); + + for (l = ef->color_classes; l; l = l->next) { + Engrave_Color_Class *ecc = l->data; + engrave_color_class_free(ecc); + } + ef->color_classes = evas_list_free(ef->color_classes); + FREE(ef); } @@ -129,7 +141,7 @@ /** * engrave_file_spectrum_add - add the spectrum to the engrave file. - * @param e: The Engrave_File to add the font too. + * @param e: The Engrave_File to add the spectrum too. * @param es: The Engrave_Spectrum to add to the file. * * @return Returns no value. @@ -142,6 +154,20 @@ engrave_spectrum_parent_set(es, e); } +/** + * engrave_file_color_class_add - add the color_class to the engrave file. + * @param e: The Engrave_File to add the color_class too. + * @param ecc: The Engrave_Color_Class to add to the file. + * + * @return Returns no value. + */ +EAPI void +engrave_file_color_class_add(Engrave_File *e, Engrave_Color_Class *ecc) +{ + if (!e || !ecc) return; + e->color_classes = evas_list_append(e->color_classes, ecc); + engrave_color_class_parent_set(ecc, e); +} /** * engrave_file_style_add - add the style to the engrave file. @@ -216,6 +242,19 @@ return evas_list_data(evas_list_last(ef->spectra)); } +/** + * engrave_file_color_class_last_get - returns the last color_class in the file + * @param ef: The Engrave_File from which to retrieve the color_class + * + * @return Returns the last Engrave_Color_Class in the engrave file @a ef or NULL + */ +EAPI Engrave_Color_Class * +engrave_file_color_class_last_get(Engrave_File *ef) +{ + if (!ef) return NULL; + return evas_list_data(evas_list_last(ef->color_classes)); +} + /** * engrave_file_style_last_get - returns the last style in the file @@ -366,6 +405,20 @@ } /** + * engrave_file_color_classes_count - count the color_classes in the file + * @param ef: The Engrave_File to check for color_classes + * + * @return Returns the number of color_classes in the file, 0 otherwise + */ +EAPI int +engrave_file_color_classes_count(Engrave_File *ef) +{ + if (!ef) return 0; + return evas_list_count(ef->color_classes); +} + + +/** * engrave_file_image_foreach - call the given function for each image object * @param ef: The Engrave_File for which the images should be iterated over * @param func: The function to call for each image @@ -495,6 +548,29 @@ for (l = ef->spectra; l; l = l->next) { Engrave_Spectrum *es = l->data; if (es) func(es, data); + } +} + +/** + * engrave_file_color_class_foreach - call the given function for each color_class object + * @param ef: The Engrave_File for which the color_classes should be iterated over + * @param func: The function to call for each color_class + * @param data: Any user data to pass to the given function. + * + * @return Returns no value. + */ +EAPI void +engrave_file_color_class_foreach(Engrave_File *ef, + void (*func)(Engrave_Color_Class *, void *data), + void *data) +{ + Evas_List *l; + + if (!engrave_file_color_classes_count(ef)) return; + + for (l = ef->color_classes; l; l = l->next) { + Engrave_Color_Class *ecc = l->data; + if (ecc) func(ecc, data); } } =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_file.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -3 -r1.15 -r1.16 --- engrave_file.h 27 Mar 2007 02:10:36 -0000 1.15 +++ engrave_file.h 29 Jul 2007 14:48:30 -0000 1.16 @@ -28,6 +28,7 @@ Evas_List *images; /**< The list of images in the file */ Evas_List *fonts; /**< The list of fonts in the file */ Evas_List *spectra; /**< The list of spectra in the file */ + Evas_List *color_classes; /**< The list of color_classes in the file */ Evas_List *styles; /**< The list of styles in the file */ Evas_List *data; /**< The list of data items in the file */ Evas_List *groups; /**< The list of groups in the file */ @@ -44,6 +45,7 @@ EAPI void engrave_file_font_add(Engrave_File *e, Engrave_Font *ef); EAPI void engrave_file_spectrum_add(Engrave_File *e, Engrave_Spectrum *es); +EAPI void engrave_file_color_class_add(Engrave_File *e, Engrave_Color_Class *ecc); EAPI void engrave_file_style_add(Engrave_File *e, Engrave_Style *es); EAPI void engrave_file_image_add(Engrave_File *ef, Engrave_Image *ei); EAPI void engrave_file_data_add(Engrave_File *ef, Engrave_Data *ed); @@ -51,6 +53,7 @@ EAPI Engrave_Style *engrave_file_style_last_get(Engrave_File *ef); EAPI Engrave_Spectrum *engrave_file_spectrum_last_get(Engrave_File *ef); +EAPI Engrave_Color_Class *engrave_file_color_class_last_get(Engrave_File *ef); EAPI Engrave_Group *engrave_file_group_last_get(Engrave_File *ef); EAPI Engrave_Group *engrave_file_group_by_name_find(Engrave_File *ef, @@ -67,6 +70,7 @@ EAPI int engrave_file_fonts_count(Engrave_File *ef); EAPI int engrave_file_spectra_count(Engrave_File *ef); EAPI int engrave_file_styles_count(Engrave_File *ef); +EAPI int engrave_file_color_classes_count(Engrave_File *ef); EAPI void engrave_file_image_foreach(Engrave_File *ef, void (*func)(Engrave_Image *, void *), @@ -86,6 +90,9 @@ EAPI void engrave_file_style_foreach(Engrave_File *ef, void (*func)(Engrave_Style *, void *), void *data); +EAPI void engrave_file_color_class_foreach(Engrave_File *ef, + void (*func)(Engrave_Color_Class *, void *), + void *data); EAPI Engrave_Data *engrave_file_data_by_key_find(Engrave_File *ef, const char *key); =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_out.c,v retrieving revision 1.41 retrieving revision 1.42 diff -u -3 -r1.41 -r1.42 --- engrave_out.c 24 Jul 2007 20:01:07 -0000 1.41 +++ engrave_out.c 29 Jul 2007 14:48:30 -0000 1.42 @@ -13,6 +13,7 @@ static void _engrave_output_image(Engrave_Image *image, void *data); static void _engrave_output_font(Engrave_Font *font, void *data); static void _engrave_output_spectrum(Engrave_Spectrum *es, void *data); +static void _engrave_output_color_class(Engrave_Color_Class *ecc, void *data); static void _engrave_output_style(Engrave_Style *style, void *data); static void _engrave_output_data(Engrave_Data *data, void *udata); static void _engrave_output_group(Engrave_Group *group, void *data); @@ -207,6 +208,11 @@ engrave_file_spectrum_foreach(engrave_file, _engrave_output_spectrum, out); engrave_out_end(out); + /* color_classes */ + engrave_out_start(out, "color_classes"); + engrave_file_color_class_foreach(engrave_file, _engrave_output_color_class, out); + engrave_out_end(out); + /* images */ engrave_out_start(out, "images"); engrave_file_image_foreach(engrave_file, _engrave_output_image, out); @@ -707,6 +713,32 @@ } + +static void +_engrave_output_color_class(Engrave_Color_Class *ecc, void *data) +{ + FILE *out; + + out = data; + engrave_out_start(out, "color_class"); + engrave_out_data(out, "name", "\"%s\"", engrave_color_class_name_get(ecc)); + + if (ecc->color) + engrave_out_data(out, "color", "%d %d %d %d", + ecc->color->r, ecc->color->g, ecc->color->b, ecc->color->a); + + if (ecc->color2) + engrave_out_data(out, "color2", "%d %d %d %d", + ecc->color2->r, ecc->color2->g, ecc->color2->b, ecc->color2->a); + + if (ecc->color3) + engrave_out_data(out, "color3", "%d %d %d %d", + ecc->color3->r, ecc->color3->g, ecc->color3->b, ecc->color3->a); + + engrave_out_end(out); + +} + static void =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_parse.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- engrave_parse.c 24 Jul 2007 20:01:07 -0000 1.22 +++ engrave_parse.c 29 Jul 2007 14:48:30 -0000 1.23 @@ -85,12 +85,38 @@ engrave_group_name_set(group, name); } +void +engrave_parse_color_class_name(char *name) +{ + if (!name) return; + Engrave_Color_Class * ecc = engrave_file_color_class_last_get(engrave_file); + engrave_color_class_name_set(ecc, name); +} + +void +engrave_parse_color_class_color(int num, int r, int g, int b, int a) +{ + Engrave_Color_Class * ecc = engrave_file_color_class_last_get(engrave_file); + Engrave_Color_Class_Color * ec = engrave_color_class_color_new(r, g, b, a); + engrave_color_class_color_set(ecc, ec, num); +} + void engrave_parse_group_alias(char *alias) { Engrave_Group *group; group = engrave_file_group_last_get(engrave_file); engrave_group_alias_set(group, alias); +} + +Engrave_Color_Class * +engrave_parse_file_color_class() +{ + Engrave_Color_Class *ecc; + ecc = engrave_color_class_new(); + engrave_file_color_class_add(engrave_file, ecc); + engrave_color_class_parent_set(ecc, engrave_file); + return ecc; } void =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_parse.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -3 -r1.16 -r1.17 --- engrave_parse.h 24 Jul 2007 20:01:07 -0000 1.16 +++ engrave_parse.h 29 Jul 2007 14:48:30 -0000 1.17 @@ -22,6 +22,10 @@ void engrave_parse_style_base(char * base); void engrave_parse_style_tag(char * key, char * val); +Engrave_Color_Class * engrave_parse_file_color_class(); +void engrave_parse_color_class_name(char *name); +void engrave_parse_color_class_color(int num, int r, int g, int b, int a); + void engrave_parse_spectrum(); void engrave_parse_spectrum_name(char * name); void engrave_parse_spectrum_color(int r, int g, int b, int a, int d); =================================================================== RCS file: /cvs/e/e17/libs/engrave/src/lib/engrave_spectrum.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- engrave_spectrum.c 30 Dec 2006 08:10:46 -0000 1.3 +++ engrave_spectrum.c 29 Jul 2007 14:48:30 -0000 1.4 @@ -135,7 +135,11 @@ engrave_spectrum_name_set(Engrave_Spectrum *es, const char * name) { if (!es) return; - if (name) es->name = strdup(name); + if (name) + { + IF_FREE(es->name); + es->name = strdup(name); + } } /** ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs