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

Reply via email to