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:


word wrap works (mostly)

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_object_textblock.c,v
retrieving revision 1.62
retrieving revision 1.63
diff -u -3 -r1.62 -r1.63
--- evas_object_textblock.c     8 Aug 2005 09:01:07 -0000       1.62
+++ evas_object_textblock.c     8 Aug 2005 10:55:35 -0000       1.63
@@ -1613,18 +1613,20 @@
        else if ((n->type == NODE_TEXT) && (n->text))
          {
             int adv, inset, tw, th, x2;
-            char *str, new_line;
+            char *str, new_line, empty_item;
             
             str = n->text;
             new_line = 0;
+            empty_item = 0;
             while (str)
               {
                  it = calloc(1, sizeof(Evas_Object_Textblock_Item));
                  fmt->ref++;
                  it->format = fmt;
+                 printf("IT: %s\n", str);
                  it->text = strdup(str);
                  inset = ENFN->font_inset_get(ENDT, fmt->font.font, it->text);
-                 //         if (ln->items == NULL) x += inset;
+//               if (ln->items == NULL) x = inset;
                  ENFN->font_string_size_get(ENDT, fmt->font.font,
                                             it->text, &tw, &th);
                  if (((fmt->wrap_word) || (fmt->wrap_char)) &&
@@ -1648,24 +1650,34 @@
                                 while ((wrap >= 0) &&
                                        (!_is_white(str[wrap])))
                                   {
+                                     printf("- %i %c\n", wrap, str[wrap]);
                                      wrap--;
                                   }
                                 wrap++;
+                                /* wrap now is the index of the word START */
                                 /* cut of pointless whitespace at end of
                                  * previous line
                                  */
-                                twrap = wrap - 1;
-                                while ((twrap > 0) &&
-                                       _is_white(it->text[twrap]))
+                                if (wrap > 0)
                                   {
-                                     twrap--;
+                                     twrap = wrap - 1;
+                                     while ((twrap > 0) &&
+                                            _is_white(str[twrap]))
+                                       {
+                                          twrap--;
+                                       }
+                                     ts = it->text;
+                                     ts[twrap] = 0;
+                                     it->text = strdup(ts);
+                                     free(ts);
                                   }
-                                ts = it->text;
-                                ts[twrap] = 0;
-                                it->text = strdup(ts);
-                                free(ts);
-                                /* back to start of word */
-                                str = str + wrap - 1;
+                                else
+                                  {
+                                     /* FIXME: last text item on line - remove 
remaining spaces and recalc size */
+                                     empty_item = 1;
+                                  }
+                                str = str + wrap;
+                                printf("WWRAP %s\n", str);
                              }
                            else if (fmt->wrap_char)
                              {
@@ -1682,16 +1694,27 @@
                    }
                  else
                    str = NULL;
-                 it->w = tw;
-                 it->h = th;
-                 it->inset = inset;
-                 it->x = x;
-                 adv = ENFN->font_h_advance_get(ENDT, fmt->font.font,
-                                                it->text);
-                 x2 = x + tw - inset;
-                 x += adv;
-                 if (x2 > ln->w) ln->w = x2;
-                 ln->items = evas_object_list_append(ln->items, it);
+                 if (empty_item)
+                   {
+                      empty_item = 0;
+                      
+                      if (it->text) free(it->text);
+                      _format_free(obj, it->format);
+                      free(it);
+                   }
+                 else
+                   {
+                      it->w = tw;
+                      it->h = th;
+                      it->inset = inset;
+                      it->x = x;
+                      adv = ENFN->font_h_advance_get(ENDT, fmt->font.font,
+                                                     it->text);
+                      x2 = x + tw;
+                      x += adv;
+                      if (x2 > ln->w) ln->w = x2;
+                      ln->items = evas_object_list_append(ln->items, it);
+                   }
                  if (new_line)
                    {
                       new_line = 0;




-------------------------------------------------------
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

Reply via email to