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:


working more on it...

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_textblock.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- evas_object_textblock.c     13 Feb 2005 07:11:50 -0000      1.33
+++ evas_object_textblock.c     13 Feb 2005 11:38:38 -0000      1.34
@@ -1635,8 +1635,6 @@
    if (len <= 0) return;
    if (o->pos >= o->len) return;
 
-   /* FIXME: need to delete formatting info too */
-   
    /* deleting everything */
    if ((o->pos == 0) && (len >= o->len))
      {
@@ -1685,8 +1683,10 @@
          }
        else
          {
-            Evas_List *freenodes = NULL;
-            Node *node_start = NULL, *node_end = NULL;
+            Evas_List *freenodes = NULL, *formatnodes = NULL;
+            Evas_List *ll;
+            Node *node_start = NULL, *node_end = NULL, *format_start = NULL;
+            Evas_Object_List *l;
             
             node_start = node_end = node;
             tmp = node->text;
@@ -1703,7 +1703,7 @@
             ps += node->text_len;
             
              if (node->text_len <= 0)
-              freenodes = evas_list_append(freenodes, node);
+              node->text = NULL;
             
             while (remaining > 0)
               {
@@ -1729,20 +1729,65 @@
                  else
                    {
                       node_end = node;
-                      freenodes = evas_list_append(freenodes, node);
+                      o->len -= node->text_len;
+                      free(node->text);
+                      node->text = NULL;
+                      node->text_len = 0;
                    }
               }
-            /* FIXME: fix up format nodes inbetween node_start and node_end */
+            /* we need to remove all nodes between node_start (and including
+             * node_start is its text is NULL) and end_node (including
+             * node_end if its text is NULL)
+             */
+            for (l = (Evas_Object_List *)node_start; l; l = l->next)
+              {
+                 node = (Node *)l;
+                 /* if its a format node add it to our list of format nodes */
+                 if (node->format)
+                   {
+                      if (!formatnodes)
+                        format_start = node;
+                      formatnodes = evas_list_append(formatnodes, node);
+                   }
+                 /* if the node is empty text add it to our list of nodes 
+                  * to free
+                  */
+                 else if (!node->text)
+                   freenodes = evas_list_append(freenodes, node);
+                 if (node == node_end) break;
+              }
              while (freenodes)
               {
                  node = freenodes->data;
-                 o->len -= node->text_len;
                  freenodes = evas_list_remove_list(freenodes, freenodes);
                  o->nodes = evas_object_list_remove(o->nodes, node);
                  if (node->format) free(node->format);
-                 if (node->text) free(node->text);
                  free(node);
               }
+            /* remove formatnodes for now... */
+            /* FIXME: remove */
+             while (formatnodes)
+              formatnodes = evas_list_remove_list(formatnodes, formatnodes);
+#if 0       
+            /* find all format nodes leading up to the deleted set of
+             * format nodes
+             */
+            for (l = (Evas_Object_List *)format_node_start; l; l = l->prev)
+              {
+                 node = (Node *)l;               
+                 if (node->format)
+                   formatnodes = evas_list_prepend(formatnodes, node);
+                 else
+                   break;
+              }
+            /* go from last to start and once we have seen a format node
+             * for a ceretain key, mark it as seen then remove occurances
+             * earlier on in the list as we go to the start
+             */
+            for (ll = evas_list_last(formatnodes); ll; ll = ll->prev)
+              {
+              }
+#endif      
          }
      }
    o->native.dirty = 1;




-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to