Enlightenment CVS committal Author : raster Project : e17 Module : libs/edje
Dir : e17/libs/edje/src/lib Modified Files: edje_calc.c edje_data.c edje_load.c edje_private.h edje_util.c Log Message: and edje started supporting.... TEXTBLOCK2!!!!! see e_logo.edc for an example. :) =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_calc.c,v retrieving revision 1.66 retrieving revision 1.67 diff -u -3 -r1.66 -r1.67 --- edje_calc.c 25 Aug 2005 13:16:21 -0000 1.66 +++ edje_calc.c 12 Sep 2005 09:43:49 -0000 1.67 @@ -429,7 +429,76 @@ if (ep->swallow_params.min.h > desc->min.h) minh = ep->swallow_params.min.h; } /* if we have text that wants to make the min size the text size... */ - if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXT)) + if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK)) + { + Evas_Coord tw, th, ins_l, ins_r, ins_t, ins_b; + char *text = ""; + char *style = ""; + Edje_Style *stl = NULL; + Evas_List *l; + + if (chosen_desc->text.id_source >= 0) + { + ep->text.source = ed->table_parts[chosen_desc->text.id_source % ed->table_parts_size]; + style = ep->text.source->chosen_description->text.style; + } + else + { + ep->text.source = NULL; + style = chosen_desc->text.style; + } + + if (chosen_desc->text.id_text_source >= 0) + { + ep->text.text_source = ed->table_parts[chosen_desc->text.id_text_source % ed->table_parts_size]; + text = ep->text.text_source->chosen_description->text.text; + if (ep->text.text_source->text.text) text = ep->text.text_source->text.text; + } + else + { + ep->text.text_source = NULL; + text = chosen_desc->text.text; + if (ep->text.text) text = ep->text.text; + } + + for (l = ed->file->styles; l; l = l->next) + { + stl = l->data; + if (!strcmp(stl->name, style)) break; + stl = NULL; + } + + if (stl) + { + char *ptxt; + + if (evas_object_textblock2_style_get(ep->object) != stl->style) + evas_object_textblock2_style_set(ep->object, stl->style); + ptxt = evas_object_textblock2_text_markup_get(ep->object); + if (((!ptxt) && (text)) || + ((ptxt) && (text) && (strcmp(ptxt, text))) || + ((ptxt) && (!text))) + evas_object_textblock2_text_markup_set(ep->object, text); + if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y)) + { + int mw = 0, mh = 0; + + if (!chosen_desc->text.min_x) + { + evas_object_resize(ep->object, params->w, params->h); + evas_object_textblock2_size_formatted_get(ep->object, &tw, &th); + } + else + evas_object_textblock2_size_native_get(ep->object, &tw, &th); + evas_object_textblock2_style_insets_get(ep->object, &ins_l, &ins_r, &ins_t, &ins_b); + mw = ins_l + tw + ins_r; + mh = ins_t + th + ins_b; + if (mw > minw) minw = mw; + if (mh > minh) minh = mh; + } + } + } + else if ((chosen_desc) && (ep->part->type == EDJE_PART_TYPE_TEXT)) { char *text; char *font; @@ -1040,6 +1109,11 @@ evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); evas_object_resize(ep->object, p3.w, p3.h); } + else if (ep->part->type == EDJE_PART_TYPE_TEXTBLOCK) + { + evas_object_move(ep->object, ed->x + p3.x, ed->y + p3.y); + evas_object_resize(ep->object, p3.w, p3.h); + } if (ep->swallowed_object) { =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -3 -r1.23 -r1.24 --- edje_data.c 26 Jul 2005 13:59:02 -0000 1.23 +++ edje_data.c 12 Sep 2005 09:43:49 -0000 1.24 @@ -2,6 +2,8 @@ #include "edje_private.h" Eet_Data_Descriptor *_edje_edd_edje_file = NULL; +Eet_Data_Descriptor *_edje_edd_edje_style = NULL; +Eet_Data_Descriptor *_edje_edd_edje_style_tag = NULL; Eet_Data_Descriptor *_edje_edd_edje_data = NULL; Eet_Data_Descriptor *_edje_edd_edje_font_directory = NULL; Eet_Data_Descriptor *_edje_edd_edje_font_directory_entry = NULL; @@ -38,6 +40,8 @@ _edje_edd_free(void) { FREED(_edje_edd_edje_file); + FREED(_edje_edd_edje_style); + FREED(_edje_edd_edje_style_tag); FREED(_edje_edd_edje_data); FREED(_edje_edd_edje_font_directory); FREED(_edje_edd_edje_font_directory_entry); @@ -101,6 +105,18 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "key", key, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_data, Edje_Data, "value", value, EET_T_STRING); + _edje_edd_edje_style_tag = + NEWD("Edje_Style_Tag", + Edje_Style_Tag); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, "key", key, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_style_tag, Edje_Style_Tag, "value", value, EET_T_STRING); + + _edje_edd_edje_style = + NEWD("Edje_Style", + Edje_Style); + 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); + /* the main file directory */ _edje_edd_edje_file = NEWD("Edje_File", @@ -112,6 +128,7 @@ EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", image_dir, _edje_edd_edje_image_directory); 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); /* parts & programs - loaded induvidually */ _edje_edd_edje_program_target = @@ -208,6 +225,7 @@ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "color3.a", color3.a, EET_T_UCHAR); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.text", text.text, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.text_class", text.text_class, EET_T_STRING); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.style", text.style, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.font", text.font, EET_T_STRING); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.size", text.size, EET_T_INT); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_part_description, Edje_Part_Description, "text.fit_x", text.fit_x, EET_T_UCHAR); =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v retrieving revision 1.66 retrieving revision 1.67 diff -u -3 -r1.66 -r1.67 --- edje_load.c 26 Jul 2005 13:59:03 -0000 1.66 +++ edje_load.c 12 Sep 2005 09:43:49 -0000 1.67 @@ -176,6 +176,8 @@ evas_object_color_set(rp->object, 0, 0, 0, 0); evas_object_pass_events_set(rp->object, 1); } + else if (ep->type == EDJE_PART_TYPE_TEXTBLOCK) + rp->object = evas_object_textblock2_add(ed->evas); else { printf("EDJE ERROR: wrong part type %i!\n", ep->type); @@ -719,7 +721,7 @@ _edje_file_add(Edje *ed) { Eet_File *ef = NULL; - Evas_List *l; + Evas_List *l, *ll; int id = -1; if (_edje_edd_edje_file == NULL) @@ -733,7 +735,6 @@ ed->file = _edje_file_cache_find(ed->path); if (!ed->file) { -// printf("OPEN EDJE %s\n", ed->path); ef = eet_open(ed->path, EET_FILE_MODE_READ); if (!ef) { @@ -769,6 +770,59 @@ } } + for (l = ed->file->styles; l; l = l->next) + { + Edje_Style *stl; + Edje_Style_Tag *tag; + char *buf = NULL; + int len = 0; + int def_done; + + stl = l->data; + if (stl->style) break; + stl->style = evas_textblock2_style_new(); + evas_textblock2_style_set(stl->style, (const char *)buf); + for (ll = stl->tags; ll; ll = ll->next) + { + tag = ll->data; + len += strlen(tag->key); + len += 1; + len += 1; + len += strlen(tag->value); + len += 1; + } + if (_edje_fontset_append) + { + len += 1 + strlen("font_fallbacks=") + strlen(_edje_fontset_append); + } + len += 1 + strlen("font_source=") + strlen(ed->path); + buf = malloc(len + 1); + buf[0] = 0; + for (ll = stl->tags; ll; ll = ll->next) + { + tag = ll->data; + strcat(buf, tag->key); + strcat(buf, "='"); + strcat(buf, tag->value); + if ((!def_done) && (!strcmp(tag->key, "DEFAULT"))) + { + if (_edje_fontset_append) + { + strcat(buf, " "); + strcat(buf, "font_fallbacks="); + strcat(buf, _edje_fontset_append); + } + strcat(buf, " "); + strcat(buf, "font_source="); + strcat(buf, ed->path); + def_done = 1; + } + strcat(buf, "'"); + } + evas_textblock2_style_set(stl->style, buf); + free(buf); + } + ed->collection = _edje_collection_find(ed->file, ed->part); if (!ed->collection) { @@ -1027,6 +1081,26 @@ if (edf->compiler) free(edf->compiler); if (edf->collection_cache) _edje_collection_cleanup(edf); + while (edf->styles) + { + Edje_Style *stl; + + stl == edf->styles->data; + edf->styles = evas_list_remove_list(edf->styles, edf->styles); + while (stl->tags) + { + Edje_Style_Tag *tag; + + tag = stl->tags->data; + stl->tags = evas_list_remove_list(stl->tags, stl->tags); + if (tag->key) free(tag->key); + if (tag->value) free(tag->value); + free(tag); + } + if (stl->name) free(stl->name); + if (stl->style) evas_textblock2_style_free(stl->style); + free(stl); + } free(edf); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v retrieving revision 1.88 retrieving revision 1.89 diff -u -3 -r1.88 -r1.89 --- edje_private.h 5 Sep 2005 10:46:04 -0000 1.88 +++ edje_private.h 12 Sep 2005 09:43:49 -0000 1.89 @@ -68,9 +68,11 @@ */ typedef struct _Edje_File Edje_File; +typedef struct _Edje_Style Edje_Style; +typedef struct _Edje_Style_Tag Edje_Style_Tag; typedef struct _Edje_Data Edje_Data; -typedef struct _Edje_Font_Directory Edje_Font_Directory; -typedef struct _Edje_Font_Directory_Entry Edje_Font_Directory_Entry; +typedef struct _Edje_Font_Directory Edje_Font_Directory; +typedef struct _Edje_Font_Directory_Entry Edje_Font_Directory_Entry; typedef struct _Edje_Image_Directory Edje_Image_Directory; typedef struct _Edje_Image_Directory_Entry Edje_Image_Directory_Entry; typedef struct _Edje_Program Edje_Program; @@ -96,7 +98,8 @@ #define EDJE_PART_TYPE_TEXT 2 #define EDJE_PART_TYPE_IMAGE 3 #define EDJE_PART_TYPE_SWALLOW 4 -#define EDJE_PART_TYPE_LAST 5 +#define EDJE_PART_TYPE_TEXTBLOCK 5 +#define EDJE_PART_TYPE_LAST 6 #define EDJE_TEXT_EFFECT_NONE 0 #define EDJE_TEXT_EFFECT_PLAIN 1 @@ -160,6 +163,7 @@ Edje_Image_Directory *image_dir; Edje_Part_Collection_Directory *collection_dir; Evas_List *data; + Evas_List *styles; int references; char *compiler; @@ -170,6 +174,19 @@ Evas_List *collection_cache; }; +struct _Edje_Style +{ + char *name; + Evas_List *tags; + Evas_Textblock_Style *style; +}; + +struct _Edje_Style_Tag +{ + char *key; + char *value; +}; + /*----------*/ struct _Edje_Data @@ -390,6 +407,7 @@ struct { char *text; /* if "" or NULL, then leave text unchanged */ char *text_class; /* how to apply/modify the font */ + char *style; /* the text style if a tectblock */ char *font; /* if a specific font is asked for */ int size; /* 0 = use user set size */ @@ -528,6 +546,7 @@ struct { char *text; char *font; + char *style; int size; struct { double in_w, in_h; @@ -732,6 +751,8 @@ }; extern Eet_Data_Descriptor *_edje_edd_edje_file; +extern Eet_Data_Descriptor *_edje_edd_edje_style; +extern Eet_Data_Descriptor *_edje_edd_edje_style_tag; extern Eet_Data_Descriptor *_edje_edd_edje_data; extern Eet_Data_Descriptor *_edje_edd_edje_font_directory; extern Eet_Data_Descriptor *_edje_edd_edje_font_directory_entry; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_util.c,v retrieving revision 1.57 retrieving revision 1.58 diff -u -3 -r1.57 -r1.58 --- edje_util.c 31 May 2005 23:02:29 -0000 1.57 +++ edje_util.c 12 Sep 2005 09:43:49 -0000 1.58 @@ -501,7 +501,8 @@ if ((!ed) || (!part)) return; rp = _edje_real_part_get(ed, (char *)part); if (!rp) return; - if (rp->part->type != EDJE_PART_TYPE_TEXT) return; + if ((rp->part->type != EDJE_PART_TYPE_TEXT) && + (rp->part->type != EDJE_PART_TYPE_TEXTBLOCK)) return; if ((!rp->text.text) && (!text)) return; if ((rp->text.text) && (text) && ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs