Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib/canvas Modified Files: evas_object_textblock.c Log Message: massive speedup in textblock... maaaaaaaaaaasive. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_textblock.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- evas_object_textblock.c 31 Jan 2005 04:58:41 -0000 1.11 +++ evas_object_textblock.c 31 Jan 2005 09:32:31 -0000 1.12 @@ -99,7 +99,7 @@ unsigned char dirty : 1; Evas_Coord w, h; } native; - + Evas_List *font_hold; void *engine_data; }; @@ -233,6 +233,7 @@ g = (g << 4) | g; b = evas_object_textblock_hex_string_get(data[3]); b = (b << 4) | b; + a = 0xff; } else if (strlen(data) == 5) /* #RGBA */ { @@ -361,6 +362,41 @@ } static void +evas_object_textblock_layout_fonts_hold(Evas_Object *obj) +{ + Evas_Object_Textblock *o; + Evas_Object_List *l; + + o = (Evas_Object_Textblock *)(obj->object_data); + for (l = (Evas_Object_List *)o->layout_nodes; l; l = l->next) + { + Layout_Node *lnode; + + lnode = (Layout_Node *)l; + if (lnode->layout.font.font) + { + o->font_hold = evas_list_append(o->font_hold, + lnode->layout.font.font); + lnode->layout.font.font = NULL; + } + } +} + +static void +evas_object_textblock_layout_fonts_hold_clean(Evas_Object *obj) +{ + Evas_Object_Textblock *o; + + o = (Evas_Object_Textblock *)(obj->object_data); + + while (o->font_hold) + { + ENFN->font_free(ENDT, o->font_hold->data); + o->font_hold = evas_list_remove_list(o->font_hold, o->font_hold); + } +} + +static void evas_object_textblock_layout_clean(Evas_Object *obj) { Evas_Object_Textblock *o; @@ -1137,8 +1173,10 @@ context); if (o->changed) { + evas_object_textblock_layout_fonts_hold(obj); evas_object_textblock_layout_clean(obj); evas_object_textblock_layout(obj); + evas_object_textblock_layout_fonts_hold_clean(obj); o->changed = 0; } /* @@ -1153,6 +1191,7 @@ obj->cur.cache.geometry.w, obj->cur.cache.geometry.h); */ +#if 1 for (l = (Evas_Object_List *)o->layout_nodes; l; l = l->next) { Layout_Node *lnode; @@ -1199,6 +1238,7 @@ lnode->text); } } +#endif /* if (o->engine_data) { @@ -1269,8 +1309,10 @@ updates = evas_list_append(updates, r); */ updates = evas_object_render_pre_prev_cur_add(updates, obj); + evas_object_textblock_layout_fonts_hold(obj); evas_object_textblock_layout_clean(obj); evas_object_textblock_layout(obj); + evas_object_textblock_layout_fonts_hold_clean(obj); o->changed = 0; } done: ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs