Enlightenment CVS committal

Author  : rbdpngn
Project : e17
Module  : libs/etox

Dir     : e17/libs/etox/src


Modified Files:
        Etox.h etox.c etox_line.c etox_line.h etox_selection.c 


Log Message:
Support for more comprehensive merging of lines internally. Fix
etox_prepend_text. Start of wrapping test in etox_selections.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -3 -r1.34 -r1.35
--- Etox.h      26 Jul 2003 06:35:21 -0000      1.34
+++ Etox.h      28 Jul 2003 22:04:31 -0000      1.35
@@ -129,6 +129,11 @@
        int x, y, w, h;
 
        /*
+        * Geometry the text prefers w/o wraps.
+        */
+       int tw, th;
+
+       /*
         * The length text in the etox
         */
        int length;
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -3 -r1.46 -r1.47
--- etox.c      27 Jul 2003 05:27:09 -0000      1.46
+++ etox.c      28 Jul 2003 22:04:31 -0000      1.47
@@ -221,11 +221,12 @@
                 */
                et->length -= end->length;
                et->h -= end->h;
-               etox_line_merge(end, start);
+               etox_line_merge_append(end, start);
+               etox_line_free(start);
                et->length += end->length;
                et->h += end->h;
-               if (end->w > et->w)
-                       et->w = end->w;
+               if (end->w > et->tw)
+                       et->tw = end->w;
        }
 
        /*
@@ -234,8 +235,8 @@
        while (lines) {
                start = lines->data;
 
-               if (start->w > et->w)
-                       et->w = start->w;
+               if (start->w > et->tw)
+                       et->tw = start->w;
 
                et->h += start->h;
                et->length += start->length;
@@ -286,9 +287,9 @@
                Evas_List *l;
 
                l = evas_list_last(lines);
-               end = l->data;
-               start = et->lines->data;
-               et->lines = evas_list_remove(et->lines, start);
+               start = l->data;
+               lines = evas_list_remove(lines, start);
+               end = et->lines->data;
 
                /*
                 * Need to adjust the height and length of the line to reflect
@@ -296,30 +297,32 @@
                 */
                et->length -= end->length;
                et->h -= end->h;
-               etox_line_merge(end, start);
+               etox_line_merge_prepend(start, end);
+               etox_line_free(start);
                et->length += end->length;
                et->h += end->h;
-               if (end->w > et->w)
-                       et->w = end->w;
+               if (end->w > et->tw)
+                       et->tw = end->w;
        }
 
        /*
         * Now add the remaining lines to the end of the line list.
         */
-       while (et->lines) {
-               end = et->lines->data;
+       while (lines) {
+               Evas_List *l;
 
-               if (end->w > et->w)
-                       et->w = end->w;
+               l = evas_list_last(lines);
+               end = l->data;
+
+               if (end->w > et->tw)
+                       et->tw = end->w;
 
                et->h += end->h;
                et->length += end->length;
-               lines = evas_list_append(lines, end);
-               et->lines = evas_list_remove(et->lines, end);
+               et->lines = evas_list_prepend(et->lines, end);
+               lines = evas_list_remove(lines, end);
        }
 
-       et->lines = lines;
-
        /*
         * Layout the lines on the etox.
         */
@@ -384,8 +387,8 @@
                /*
                   * Grab the largest line width for the width of the etox.
                 */
-               if (line->w > et->w)
-                       et->w = line->w;
+               if (line->w > et->tw)
+                       et->tw = line->w;
 
                et->h += line->h;
                et->length += line->length;
@@ -984,6 +987,8 @@
                        /*
                         * Create a new line for the next text
                         */
+                       if (line->w > et->tw)
+                               et->tw = line->w;
                        line = etox_line_new(line->flags);
                        ret = evas_list_append(ret, line);
                        line->et = et;
@@ -1140,7 +1145,8 @@
                        et->lines = evas_list_remove(et->lines, line);
 
                        /* merge the two lines */
-                       etox_line_merge(prevline, line);
+                       etox_line_merge_append(prevline, line);
+                       etox_line_free(line);
 
                        /* skip the line we just merged */
                        l = l->next;
@@ -1200,7 +1206,10 @@
         */
        et->h = y - et->y;
 
-       evas_object_resize(et->clip, et->w, et->h);
+       if (et->context->flags & ETOX_SOFT_WRAP)
+               evas_object_resize(et->clip, et->w, et->h);
+       else
+               evas_object_resize(et->clip, et->tw, et->h);
 }
 
 Etox_Line *
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -3 -r1.13 -r1.14
--- etox_line.c 26 Jul 2003 06:35:21 -0000      1.13
+++ etox_line.c 28 Jul 2003 22:04:31 -0000      1.14
@@ -255,13 +255,13 @@
 }
 
 /*
- * etox_line_merge - merge two lines into the first line, free the second
+ * etox_line_merge_append - merge lines into the first line, empty the second
  * @line1: the destination of the merged lines
  * @line2: the line that will be merged with line1
  *
  * Returns no value. Moves the bits from line2 into line 1.
  */
-void etox_line_merge(Etox_Line * line1, Etox_Line * line2)
+void etox_line_merge_append(Etox_Line * line1, Etox_Line * line2)
 {
        Estyle *bit;
 
@@ -283,11 +283,37 @@
        if (line2->h > line1->h)
                line1->h = line2->h;
        line1->length += line2->length;
+}
 
+/*
+ * etox_line_merge_prepend - merge lines into the second line, empty the first
+ * @line1: the destination of the merged lines
+ * @line2: the line that will be merged with line1
+ *
+ * Returns no value. Moves the bits from line2 into line 1.
+ */
+void etox_line_merge_prepend(Etox_Line * line1, Etox_Line * line2)
+{
+       Estyle *bit;
+
+       CHECK_PARAM_POINTER("line1", line1);
+       CHECK_PARAM_POINTER("line2", line2);
+
+       /*
+        * Move the bits from line2 to line1.
+        */
+       while (line1->bits) {
+               bit = line1->bits->data;
+               line2->bits = evas_list_prepend(line2->bits, bit);
+               line1->bits = evas_list_remove(line1->bits, bit);
+       }
        /*
-        * Destroy the line that was merged.
+        * Adjust the height, width and length of the merged line.
         */
-       etox_line_free(line2);
+       line2->w += line1->w;
+       if (line1->h > line2->h)
+               line2->h = line1->h;
+       line2->length += line1->length;
 }
 
 /*
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- etox_line.h 23 Jul 2003 06:46:17 -0000      1.5
+++ etox_line.h 28 Jul 2003 22:04:31 -0000      1.6
@@ -9,7 +9,8 @@
 void etox_line_prepend(Etox_Line * line, Estyle * bit);
 void etox_line_layout(Etox_Line * line);
 void etox_line_remove(Etox_Line * line, Estyle * bit);
-void etox_line_merge(Etox_Line * line1, Etox_Line * line2);
+void etox_line_merge_append(Etox_Line * line1, Etox_Line * line2);
+void etox_line_merge_prepend(Etox_Line * line1, Etox_Line * line2);
 void etox_line_minimize(Etox_Line * line);
 void etox_line_get_text(Etox_Line * line, char *buf);
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_selection.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- etox_selection.c    23 Jul 2003 20:04:39 -0000      1.3
+++ etox_selection.c    28 Jul 2003 22:04:31 -0000      1.4
@@ -7,13 +7,20 @@
        Estyle *bit = NULL; \
        Etox_Line *line; \
        Evas_List *l, *bl; \
+       int w, h; \
        line = selected->start.line; \
        l = evas_list_find_list(selected->etox->lines, selected->start.line); \
        bl = evas_list_find_list(line->bits, selected->start.bit); \
        while (bl && bit != selected->end.bit) { \
-               bit = bl->data
+               bit = bl->data; \
+               estyle_geometry(bit, NULL, NULL, &w, NULL); \
+               line->w -= w
 
 #define SELECTION_LOOP_END \
+               estyle_geometry(bit, NULL, NULL, &w, &h); \
+               line->w += w; \
+               if (h > line->h) \
+                       line->h = h; \
                bl = bl->next; \
                if (!bl) { \
                        l = l->next; \




-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to