From: <enl...@li...> - 2002-04-21 06:27:25
|
Enlightenment CVS committal Author : rbdpngn Project : e17 Module : libs/etox Dir : e17/libs/etox/src Modified Files: Tag: SPLIT Etox.h Etox_private.h etox.c etox_context.c etox_line.c etox_line.h etox_obstacle.c etox_obstacle.h etox_selection.h Log Message: Conversion to use Evas_List's by fukui-san, also readded the line wrapping code which I accidentally removed yesterday. =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox.h,v retrieving revision 1.25.2.2 retrieving revision 1.25.2.3 diff -u -3 -r1.25.2.2 -r1.25.2.3 --- Etox.h 14 Apr 2002 23:13:29 -0000 1.25.2.2 +++ Etox.h 21 Apr 2002 06:27:24 -0000 1.25.2.3 @@ -1,7 +1,6 @@ #ifndef _ETOX_H #define _ETOX_H -#include <Ewd.h> #include <Edb.h> #include <Evas.h> #include <Estyle.h> @@ -54,7 +53,6 @@ struct _etox_style_info { char *name; E_DB_File *style_db; - Ewd_Sheap *layers; int references; }; @@ -138,12 +136,12 @@ /* * List of lines in the etox */ - Ewd_List *lines; + Evas_List lines; /* * List of obstacles in the etox */ - Ewd_List *obstacles; + Evas_List obstacles; /* * Determine if the etox has been displayed yet. @@ -234,9 +232,9 @@ void etox_get_geometry(Etox * et, int *x, int *y, int *w, int *h); int etox_coord_to_index(Etox * et, int x, int y); void etox_index_to_geometry(Etox * et, int index, int *x, int *y, - int *w, int *h); + int *w, int *h); int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, - int *w, int *h); + int *w, int *h); /* * Appearance altering functions @@ -248,16 +246,16 @@ /* * Region selection and release */ -Ewd_List *etox_region_select(Etox * et, int start, int end); -Ewd_List *etox_region_select_str(Etox * et, char *search, char *last); -void etox_region_release(Ewd_List * region); +Evas_List etox_region_select(Etox * et, int start, int end); +Evas_List etox_region_select_str(Etox * et, char *search, char *last); +void etox_region_release(Evas_List region); /* * Region altering appearance modifiers */ -void etox_region_set_font(Ewd_List * region, char *name, int size); -void etox_region_set_color(Ewd_List * region, int r, int g, int b, int a); -void etox_region_set_style(Ewd_List * region, char *stylename); +void etox_region_set_font(Evas_List region, char *name, int size); +void etox_region_set_color(Evas_List region, int r, int g, int b, int a); +void etox_region_set_style(Evas_List region, char *stylename); /* * Obstacle manipulation functions =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/Etox_private.h,v retrieving revision 1.10.2.1 retrieving revision 1.10.2.2 diff -u -3 -r1.10.2.1 -r1.10.2.2 --- Etox_private.h 2 Apr 2002 11:41:37 -0000 1.10.2.1 +++ Etox_private.h 21 Apr 2002 06:27:24 -0000 1.10.2.2 @@ -28,7 +28,7 @@ /* * This is a pointer to a list of bits */ - Ewd_List *bits; + Evas_List bits; /* * The dimensions of this line. @@ -57,12 +57,12 @@ /* * This is the estyle that displays the bit. */ - Ewd_List *estyles; + Evas_List estyles; /* * Regions that reference this bit. */ - Ewd_List *regions; + Evas_List regions; }; #include "etox_line.h" =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox.c,v retrieving revision 1.24.2.3 retrieving revision 1.24.2.4 diff -u -3 -r1.24.2.3 -r1.24.2.4 --- etox.c 19 Apr 2002 21:26:17 -0000 1.24.2.3 +++ etox.c 21 Apr 2002 06:27:24 -0000 1.24.2.4 @@ -1,7 +1,8 @@ #include "etox-config.h" #include "Etox_private.h" -static Ewd_List *_etox_break_text(Etox * et, char *text); +static Evas_List _etox_break_text(Etox * et, char *text); +static void _etox_wrap_lines(Etox * et); static void _etox_layout(Etox * et, int y); /** @@ -79,7 +80,7 @@ * Returns a pointer to a newly allocated etox on success, NULL on failure. */ Etox *etox_new_all(Evas evas, int x, int y, int w, int h, int alpha, - Etox_Alignment align) + Etox_Alignment align) { Etox *et; @@ -111,14 +112,20 @@ void etox_free(Etox * et) { Etox_Obstacle *obst; + Evas_List l; CHECK_PARAM_POINTER("et", et); etox_clear(et); FREE(et->context->style); - while (et->obstacles && (obst = ewd_list_remove_last(et->obstacles))) + //FIXME could this be replaced by evas_list_free ? + for (l = et->obstacles; l; l = l->next) { + obst = l->data; + FREE(obst); + } + } /** @@ -130,23 +137,26 @@ void etox_show(Etox * et) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); et->visible = TRUE; - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { - printf("Etox showing line %d\n", ewd_list_index(et->lines)); - etox_line_show(line); + for (l = et->lines; l; l = l->next) { + if (l->data) { + line = l->data; + etox_line_show(line); + } } /* * Display and position the clip box with the correct size. */ evas_show(et->evas, et->clip); - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -174,8 +184,10 @@ */ void etox_append_text(Etox * et, char *text) { - Ewd_List *lines; - Etox_Line *end, *start; + Evas_List lines, l, ll, lll, llll; + Etox_Line *end = NULL, *start; + int index; + int i, j; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("text", text); @@ -185,33 +197,49 @@ * new text with the last line of the old text. */ lines = _etox_break_text(et, text); - start = ewd_list_remove_first(lines); - end = ewd_list_remove_last(et->lines); + for (l = et->lines; l; l = l->next) + end = l->data; + et->lines = evas_list_remove(et->lines, end); + + for (i = 0, ll = lines; ll; ll = ll->next, i++) { + if (i == 0) { + start = ll->data; - /* - * Need to adjust the height and length of the line to reflect the - * text that was added. - */ - et->length -= start->length; - et->h -= start->h; - etox_line_merge(start, end); - et->length += start->length; - et->h += start->h; + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= start->length; + et->h -= start->h; + etox_line_merge(start, end); + et->length += start->length; + et->h += start->h; + lines = evas_list_append(lines, start); + } else { + start = ll->data; - ewd_list_append(lines, start); + /* + * Now add the remaining lines to the end of the line list. + */ + if (start->w > et->w) + et->w = start->w; + + et->h += start->h; + et->length += start->length; + lines = evas_list_append(lines, start); + } + } /* - * Now add the remaining lines to the end of the line list. + * wrap the lines, but return the list to the original position */ - ewd_list_goto_first(et->lines); - while ((start = ewd_list_remove_first(lines))) { - if (start->w > et->w) - et->w = start->w; - - et->h += start->h; - et->length += start->length; - ewd_list_append(lines, start); - } + /* + * FIXME there has to be a more elegant way to do this + */ + for (index = 0, lll = et->lines; lll; lll = lll->next, index++); + _etox_wrap_lines(et); + for (j = 0, llll = et->lines; j <= index && llll; + llll = llll->next, j++); /* * Layout the lines on the etox starting at the newly added text. @@ -221,7 +249,7 @@ /* * Destroy the temporary list of lines now that it is empty. */ - ewd_list_destroy(lines); + evas_list_free(lines); } /** @@ -234,8 +262,9 @@ */ void etox_prepend_text(Etox * et, char *text) { - Ewd_List *lines; - Etox_Line *end, *start; + Evas_List lines, l, ll, lll; + Etox_Line *end = NULL, *start; + int i; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("text", text); @@ -245,50 +274,58 @@ * new text with the last line of the old text. */ lines = _etox_break_text(et, text); - start = ewd_list_remove_first(et->lines); - end = ewd_list_remove_last(lines); + for (l = lines; l; l = l->next) + end = l->data; + lines = evas_list_remove(lines, end); + + for (i = 0, ll = et->lines; ll; ll = ll->next, i++) { + if (i == 0) { + start = ll->data; - /* - * Need to adjust the height and length of the line to reflect the - * text that was added. - */ - et->length -= end->length; - et->h -= end->h; - etox_line_merge(end, start); - et->length += end->length; - et->h += end->h; + } else { + start = ll->data; + /* + * Need to adjust the height and length of the line to reflect the + * text that was added. + */ + et->length -= end->length; + et->h -= end->h; + etox_line_merge(end, start); + et->length += end->length; + et->h += end->h; - ewd_list_append(lines, end); + et->lines = evas_list_append(lines, end); - /* - * Now add the remaining lines to the end of the line list. - */ - ewd_list_goto_first(et->lines); - while ((start = ewd_list_remove_first(et->lines))) { - if (start->w > et->w) - et->w = start->w; + /* + * Now add the remaining lines to the end of the line list. + */ + if (start->w > et->w) + et->w = start->w; - et->h += start->h; - et->length += start->length; - ewd_list_prepend(lines, start); + et->h += start->h; + et->length += start->length; + lines = evas_list_prepend(lines, start); + } } /* * Add the newly created lines to the end of the list of lines. */ - while ((start = ewd_list_remove_first(lines))) - ewd_list_append(et->lines, start); + for (lll = lines; lll; lll = lll->next) { + start = lll->data; + et->lines = evas_list_append(et->lines, start); + } /* * Layout the lines on the etox. */ - ewd_list_goto_first(et->lines); + _etox_wrap_lines(et); _etox_layout(et, et->y); /* * Destroy the temporary list of lines now that it is empty. */ - ewd_list_destroy(lines); + evas_list_free(lines); } /** @@ -316,6 +353,7 @@ void etox_set_text(Etox * et, char *text) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -331,7 +369,7 @@ */ et->lines = _etox_break_text(et, text); - ewd_list_goto_first(et->lines); + _etox_wrap_lines(et); _etox_layout(et, et->y); /* @@ -339,10 +377,10 @@ */ et->h = 0; et->length = 0; - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; /* - * Grab the largest line width for the width of the etox. + * Grab the largest line width for the width of the etox. */ if (line->w > et->w) et->w = line->w; @@ -364,6 +402,7 @@ { char *ret, *temp; Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER_RETURN("et", et, NULL); @@ -373,16 +412,16 @@ if (!et->lines) return NULL; - ret = (char *)malloc((et->length + 1) * sizeof(char)); + ret = (char *) malloc((et->length + 1) * sizeof(char)); memset(ret, 0, (et->length + 1) * sizeof(char)); temp = ret; - ewd_list_goto_first(et->lines); /* * Concatenate the text into the newly allocated buffer. */ - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; etox_line_get_text(line, temp); temp += line->length; } @@ -399,6 +438,7 @@ void etox_clear(Etox * et) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -409,8 +449,10 @@ if (!et->lines) return; - while ((line = ewd_list_remove_last(et->lines))) + for (l = et->lines; l; l = l->next) { + line = l->data; etox_line_free(line); + } } /** @@ -425,6 +467,7 @@ { Estyle *bit; Etox_Line *line; + Evas_List l, ll; CHECK_PARAM_POINTER("et", et); @@ -436,16 +479,18 @@ /* * Set the layer for every line */ - ewd_list_goto_first(et->lines); - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->bits) { /* * Set the layer for each bit in the line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; estyle_set_layer(bit, layer); + } } } } @@ -457,7 +502,7 @@ * * Returns no value. Sets the alpha value of the etox @et to @alpha. */ -void etox_set_alpha(Etox *et, int alpha) +void etox_set_alpha(Etox * et, int alpha) { int r, g, b, a; @@ -493,7 +538,6 @@ * Layout lines if appropriate. */ if (et->lines) { - ewd_list_goto_first(et->lines); _etox_layout(et, et->y); } @@ -502,8 +546,9 @@ * do both a move and a resize in case the size has been adjusted * during layout. */ - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -526,7 +571,6 @@ * Layout lines if appropriate. */ if (et->lines) { - ewd_list_goto_first(et->lines); _etox_layout(et, et->y); } @@ -535,8 +579,9 @@ * do both a move and a resize in case the size has been adjusted * during layout. */ - evas_move(et->evas, et->clip, (double)(et->x), (double)(et->y)); - evas_resize(et->evas, et->clip, (double)(et->w), (double)(et->h)); + evas_move(et->evas, et->clip, (double) (et->x), (double) (et->y)); + evas_resize(et->evas, et->clip, (double) (et->w), + (double) (et->h)); } /** @@ -579,41 +624,45 @@ * in @et into the integers pointed to by @x, @y, @w, and @h. */ void etox_index_to_geometry(Etox * et, int index, int *x, int *y, - int *w, int *h) + int *w, int *h) { int sum; - Estyle *bit; - Etox_Line *line; + Estyle *bit = NULL; + Etox_Line *line = NULL; + Evas_List l, ll, lll; CHECK_PARAM_POINTER("et", et); if (index > et->length) { sum = et->length; - line = ewd_list_goto_last(et->lines); + for (lll = et->lines; lll; lll = lll->next) + line = lll->data; *h = line->h; *w = line->w / line->length; *y = line->y; *x = line->x + line->w; - } - else { + } else { /* * Find the line that contains the character */ sum = 0; - ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *)ewd_list_next(et->lines)) && - sum + line->length < index) + for (l = et->lines; l; l = l->next) { + line = l->data; + if (sum + line->length < index) + break; sum += line->length; - + } /* * Find the bit that contains the character */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits)) && - sum + estyle_length(bit) < index) + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + if (sum + estyle_length(bit) < index) + break; sum += estyle_length(bit); + } /* * No bit intersects, so set the geometry to the start of the @@ -635,7 +684,7 @@ } /** - * etox_get_coord_geometry - retrieve information about a letters geometry + * etox_coord_to_geometry - retrieve information about a letters geometry * @et: the etox to inquire the geometry * @x: a pointer to an int to store the x coordinate of the etox * @y: a pointer to an int to store the y coordinate of the etox @@ -646,12 +695,13 @@ * in @et into the integers pointed to by @x, @y, @w, and @h. */ int etox_coord_to_geometry(Etox * et, int xc, int yc, int *x, int *y, - int *w, int *h) + int *w, int *h) { int sum; Estyle *bit; - Etox_Line *line; + Etox_Line *line = NULL; int tx, ty, tw, th; + Evas_List l; CHECK_PARAM_POINTER_RETURN("et", et, 0); @@ -671,17 +721,20 @@ * Find the line that contains the character */ sum = 0; - line = ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *)ewd_list_next(et->lines)) && - line->y + line->h < yc) { - sum += line->length; + + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->y + line->h < yc) + sum += line->length; + else + break; } /* * Bring the coordinate into the line if it falls outside, this may * happen with centered or right alignment. */ - bit = ewd_list_goto_first(line->bits); + bit = line->bits->data; estyle_geometry(bit, &tx, &ty, &tw, &th); if (xc < tx) xc = tx; @@ -691,8 +744,8 @@ * it's not above this line, which means the click happened above the * etox, and should be placed over the first character. */ - while ((bit = ewd_list_next(line->bits))) { - + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_geometry(bit, &tx, &ty, &tw, &th); if (xc >= tx && xc <= tx + tw) break; @@ -703,8 +756,8 @@ * Click occurred outside this line, return the end of line * character's index. */ - if (!bit) { - bit = ewd_list_goto_first(line->bits); + if (!l) { + bit = line->bits->data; /* * Estimate the average width and height of the line. @@ -719,8 +772,7 @@ estyle_geometry(bit, &tx, &ty, &tw, &th); *x = tx + line->w; *y = line->y; - } - else { + } else { /* * Now get the actual geometry from the bit @@ -766,12 +818,9 @@ CHECK_PARAM_POINTER_RETURN("et", et, NULL); - if (!et->obstacles) - et->obstacles = ewd_list_new(); - obst = etox_obstacle_new(et, x, y, w, h); - ewd_list_append(et->obstacles, obst); + evas_list_append(et->obstacles, obst); etox_obstacle_place(et, obst); @@ -791,8 +840,7 @@ CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obstacle", obstacle); - ewd_list_goto(et->obstacles, obstacle); - ewd_list_remove(et->obstacles); + evas_list_remove(et->obstacles, obstacle); etox_obstacle_free(et, obstacle); } @@ -841,9 +889,9 @@ * Returns no value. Separates the text into lines and bits if specific * characters are contained in the text. */ -static Ewd_List *_etox_break_text(Etox * et, char *text) +static Evas_List _etox_break_text(Etox * et, char *text) { - Ewd_List *ret; + Evas_List ret = NULL; Estyle *bit; Etox_Line *line = NULL; char *walk = text; @@ -856,9 +904,8 @@ * Setup the list for adding lines that will be returned to the * calling function */ - ret = ewd_list_new(); line = etox_line_new(et->context->align); - ewd_list_append(ret, line); + ret = evas_list_append(ret, line); line->et = et; while (*walk) { @@ -876,10 +923,12 @@ /* * Make a bit for the preceding text */ - bit = estyle_new(et->evas , text, et->context->style); + bit = + estyle_new(et->evas, text, et->context->style); estyle_set_clip(bit, et->clip); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); etox_line_append(line, bit); estyle_show(bit); @@ -891,9 +940,11 @@ * Make a bit for the tab character */ *text = '\0'; - bit = estyle_new(et->evas, walk, et->context->style); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + bit = + estyle_new(et->evas, walk, et->context->style); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); @@ -912,9 +963,11 @@ /* * Create a bit for the text preceding \n */ - bit = estyle_new(et->evas, text, et->context->style); - estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + bit = + estyle_new(et->evas, text, et->context->style); + estyle_set_color(bit, et->context->r, + et->context->g, et->context->b, + et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); @@ -926,7 +979,7 @@ * Create a new line for the next text */ line = etox_line_new(line->flags); - ewd_list_append(ret, line); + ret = evas_list_append(ret, line); line->et = et; break; @@ -934,22 +987,96 @@ walk++; } + /* + * Add any remaining text after the last line break or tab. + */ if (*text) { bit = estyle_new(et->evas, text, et->context->style); estyle_set_color(bit, et->context->r, et->context->g, - et->context->b, et->context->a); + et->context->b, et->context->a); estyle_set_clip(bit, et->clip); etox_line_append(line, bit); estyle_show(bit); - } - else if (line->bits == NULL) { - etox_line_free(line); - ewd_list_remove_last(ret); + } else if (line->bits == NULL) { + evas_list_remove(ret, line); + etox_line_free(line); } return ret; } +static void _etox_wrap_lines(Etox * et) +{ + Etox_Line *line; + Etox_Line *newline; + Evas_List l, ll; + + CHECK_PARAM_POINTER("et", et); + + /* if soft flag is not set, don't do anything */ + if (!(et->context->align & ETOX_LINE_SOFT)) + return; + + /* go through all the lines */ + for (l = et->lines; l; l = l->next) { + Estyle *bit, *split; + int index; + + line = l->data; + if (line->w > et->w) { + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + index = + estyle_text_at_position(bit, + line->x + + et->w, line->y, + NULL, NULL, + NULL, NULL); + if (index >= 0) { + /* split the bit that is on the edge */ + split = estyle_split(bit, index); + + /* if split doesn't exist don't do the following */ + if (!split) + break; + + /* set up the split style and show it */ + estyle_set_clip(bit, et->clip); + estyle_set_color(split, + et->context->r, + et->context->g, + et->context->b, + et->context->a); + estyle_show(split); + + /* create the new line */ + newline = + etox_line_new(line->flags); + l = evas_list_prepend_relative(l, + newline, + l-> + next); + newline->et = et; + + /* add the 'split' bit do the new line */ + etox_line_append(newline, split); + + /* move all remaining bits from line to newline */ + for (ll = line->bits; ll; + ll = ll->next) { + bit = ll->data; + etox_line_append(newline, + bit); + ll = evas_list_remove(ll, + bit); + } + break; + } + } + } + } +} + /* * _etox_layout - deals with the actual laying out of lines within the etox * @et: the etox to be laid out @@ -962,6 +1089,7 @@ static void _etox_layout(Etox * et, int y) { Etox_Line *line; + Evas_List l; CHECK_PARAM_POINTER("et", et); @@ -969,7 +1097,8 @@ * Traverse the list displaying each line, moving down the screen after * each line. */ - while ((line = ewd_list_next(et->lines))) { + for (l = et->lines; l; l = l->next) { + line = l->data; line->x = et->x; line->y = y; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_context.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -3 -r1.1.2.2 -r1.1.2.3 --- etox_context.c 14 Apr 2002 23:13:29 -0000 1.1.2.2 +++ etox_context.c 21 Apr 2002 06:27:24 -0000 1.1.2.3 @@ -2,6 +2,25 @@ #include "Etox_private.h" /** + * etox_context_new - create a new context for loading values to an etox + * + * Returns a newly allocated and zeroed out Etox_Context on success, NULL on + * failure. + */ +Etox_Context *etox_context_new() +{ + Etox_Context *ret; + + ret = (Etox_Context *) malloc(sizeof(Etox_Context)); + if (!ret) + return NULL; + + memset(ret, 0, sizeof(Etox_Context)); + + return ret; +} + +/** * etox_context_save - save a copy of the current context for restoring later * @et: the etox to retrieve a copy of the current context * @@ -84,10 +103,10 @@ { CHECK_PARAM_POINTER("et", et); - *a = et->context->a; - *r = et->context->r; - *b = et->context->b; - *g = et->context->g; + *a = et->context->a; + *r = et->context->r; + *b = et->context->b; + *g = et->context->g; } /** @@ -124,7 +143,7 @@ CHECK_PARAM_POINTER("et", et); estyle_lookup_color_db(name, &et->context->r, &et->context->g, - &et->context->b, &et->context->a); + &et->context->b, &et->context->a); } /** @@ -243,29 +262,5 @@ { CHECK_PARAM_POINTER("et", et); - /* make sure we retain the soft wrap setting if it is set */ - if (et->context->align & ETOX_LINE_SOFT) - et->context->align = align | ETOX_LINE_SOFT; - else - et->context->align = align; -} - -/* - * etox_context_set_soft_wrap - turns on soft wrapping of lines that are - * longer than the etox is wide - * @et: the etox to set for - * @boolean: 0 is off, anything else is on - * - * Returns no value. changes current context alignment value. - */ -void etox_context_set_soft_wrap(Etox *et, int boolean) -{ - CHECK_PARAM_POINTER("et", et); - - if (boolean) - et->context->align = et->context->align | ETOX_LINE_SOFT; - else - { - et->context->align = et->context->align & ~ETOX_LINE_SOFT; - } + et->context->align = align; } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.c,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -3 -r1.1.2.2 -r1.1.2.3 --- etox_line.c 19 Apr 2002 18:29:35 -0000 1.1.2.2 +++ etox_line.c 21 Apr 2002 06:27:24 -0000 1.1.2.3 @@ -32,6 +32,7 @@ void etox_line_free(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); @@ -43,13 +44,15 @@ /* * Free all of the bits on the line. */ - while ((bit = ewd_list_remove_last(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_free(bit); + } /* * Clean up the remaining list */ - ewd_list_destroy(line->bits); + evas_list_free(line->bits); } FREE(line); @@ -64,15 +67,17 @@ void etox_line_show(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); /* * Display all of the bits in the line. */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_show(bit); + } } @@ -85,15 +90,17 @@ void etox_line_hide(Etox_Line * line) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line", line); /* * Hide all the bits in this line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) + for (l = line->bits; l; l = l->next) { + bit = l->data; estyle_hide(bit); + } } @@ -113,15 +120,9 @@ CHECK_PARAM_POINTER("bit", bit); /* - * Create the list for the bits if none is present - */ - if (!line->bits) - line->bits = ewd_list_new(); - - /* * Append the text and update necessary fields */ - ewd_list_append(line->bits, bit); + line->bits = evas_list_append(line->bits, bit); estyle_geometry(bit, &x, &y, &w, &h); line->w += w; @@ -146,15 +147,9 @@ CHECK_PARAM_POINTER("bit", bit); /* - * Create the list for the bits if none is present - */ - if (!line->bits) - line->bits = ewd_list_new(); - - /* * Prepend the text and update necessary fields */ - ewd_list_prepend(line->bits, bit); + line->bits = evas_list_prepend(line->bits, bit); estyle_geometry(bit, &x, &y, &w, &h); line->w += w; @@ -174,8 +169,7 @@ CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("bit", bit); - ewd_list_goto(line->bits, bit); - ewd_list_remove(line->bits); + line->bits = evas_list_remove(line->bits, bit); line->length -= estyle_length(bit); etox_line_minimize(line); } @@ -192,14 +186,13 @@ int x; Estyle *bit; int tx, ty, tw, th; + Evas_List l; CHECK_PARAM_POINTER("line", line); if (!line->bits) return; - ewd_list_goto_first(line->bits); - /* * Determine the horizontal alignment of the text and set the starting * x coordinate appropriately. @@ -216,7 +209,8 @@ * Determine the veritcal alignment and perform the layout of the * bits. */ - while ((bit = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { + bit = l->data; if (!estyle_fixed(bit)) { estyle_geometry(bit, &tx, &ty, &tw, &th); @@ -252,21 +246,22 @@ void etox_line_minimize(Etox_Line * line) { Estyle *bit, *last_bit = NULL; + Evas_List l; CHECK_PARAM_POINTER("line", line); - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_current(line->bits))) { + l = line->bits; + while ((bit = l->data)) { /* * Attempt to merge the bits if possible, remove the second * one if successful. */ if (estyle_merge(last_bit, bit)) - ewd_list_remove(line->bits); + evas_list_remove(l, bit); else { - ewd_list_next(line->bits); last_bit = bit; + l = l->next; } } } @@ -281,6 +276,7 @@ void etox_line_merge(Etox_Line * line1, Etox_Line * line2) { Estyle *bit; + Evas_List l; CHECK_PARAM_POINTER("line1", line1); CHECK_PARAM_POINTER("line2", line2); @@ -288,9 +284,11 @@ /* * Move the bits from line2 to line1. */ - while ((bit = ewd_list_remove_first(line2->bits))) - etox_line_append(line1, bit); - + for (l = line2->bits; l; l = l->next) { + bit = l->data; + line2->bits = evas_list_remove(line2->bits, bit); + line1->bits = evas_list_append(line1->bits, bit); + } /* * Adjust the height and length of the merged line. */ @@ -312,22 +310,22 @@ * Returns no value. Saves the text from the line @line into the char buffer * @buf. */ -void etox_line_get_text(Etox_Line *line, char *buf) +void etox_line_get_text(Etox_Line * line, char *buf) { char *temp; Estyle *es; + Evas_List l; CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("buf", buf); - ewd_list_goto_first(line->bits); - /* * Examine each bit on the list of bits and cat it's text onto the end * of the buffer. Then append a \n to the buffer at the end of the * line. */ - while ((es = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { + es = l->data; temp = estyle_get_text(es); strcat(buf, temp); } =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_line.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- etox_line.h 2 Apr 2002 12:03:22 -0000 1.1.2.1 +++ etox_line.h 21 Apr 2002 06:27:24 -0000 1.1.2.2 @@ -11,6 +11,6 @@ void etox_line_remove(Etox_Line * line, Estyle * bit); void etox_line_merge(Etox_Line * line1, Etox_Line * line2); void etox_line_minimize(Etox_Line * line); -void etox_line_get_text(Etox_Line *line, char *buf); +void etox_line_get_text(Etox_Line * line, char *buf); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_obstacle.c,v retrieving revision 1.7.2.1 retrieving revision 1.7.2.2 diff -u -3 -r1.7.2.1 -r1.7.2.2 --- etox_obstacle.c 2 Apr 2002 11:41:37 -0000 1.7.2.1 +++ etox_obstacle.c 21 Apr 2002 06:27:24 -0000 1.7.2.2 @@ -1,6 +1,7 @@ #include "Etox_private.h" -static void _etox_obstacle_line_insert(Etox_Line * line, Etox_Obstacle * obst); +static void _etox_obstacle_line_insert(Etox_Line * line, + Etox_Obstacle * obst); /* * etox_obstacle_new - create a new obstacle with given dimensions @@ -33,7 +34,7 @@ /* * etox_obstacle_free - remove an obstacle and free it */ -void etox_obstacle_free(Etox *et, Etox_Obstacle * obstacle) +void etox_obstacle_free(Etox * et, Etox_Obstacle * obstacle) { CHECK_PARAM_POINTER("obstacle", obstacle); @@ -52,8 +53,10 @@ void etox_obstacle_place(Etox * et, Etox_Obstacle * obst) { int i = 0; + int j = 0; int x, y, w, h; Etox_Line *line; + Evas_List l_nodes, l; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obst", obst); @@ -79,26 +82,28 @@ * We know the obstacle intersects this etox, so now determine * starting and ending lines, as well as split lines appropriately. */ - obst->start_line = ewd_list_nodes(et->lines); + for (l_nodes = et->lines; l_nodes; l_nodes = l_nodes->next) + j++; + obst->start_line = j; obst->end_line = -1; /* * Run through to determine the lines to determine which intersect the * obstacle */ - ewd_list_goto_first(et->lines); - while ((line = (Etox_Line *) ewd_list_next(et->lines)) && - line->y < y + h) { - - if (line->y > y) { - - /* - * Check if the obstacle starts at this line - */ - if (i < obst->start_line) - obst->start_line = i; - _etox_obstacle_line_insert(line, obst); - } + for (l = et->lines; l; l = l->next) { + line = l->data; + if (line->y < y + h) { + if (line->y > y) { + /* + * Check if the obstacle starts at this line + */ + if (i < obst->start_line) + obst->start_line = i; + _etox_obstacle_line_insert(line, obst); + } + } else + break; /* * Check if the obstacle starts at this line @@ -114,9 +119,10 @@ */ void etox_obstacle_unplace(Etox * et, Etox_Obstacle * obst) { - int i; + int i, j; Estyle *bit; Etox_Line *line; + Evas_List l, ll; CHECK_PARAM_POINTER("et", et); CHECK_PARAM_POINTER("obst", obst); @@ -125,34 +131,40 @@ * Only adjust the lines that intersect the obstacle. */ i = obst->start_line; - ewd_list_goto_index(et->lines, i); /* * On each line within the obstacle bounds, remove the obstacle from * the list of bits. */ - while (i <= obst->end_line) { - line = ewd_list_current(et->lines); - - ewd_list_goto_first(line->bits); - - /* - * Now find the obstacle on the list of bits and remove it. - */ - while ((bit = ewd_list_current(line->bits)) && bit != obst->bit) - ewd_list_next(line->bits); - if (bit) - ewd_list_remove(line->bits); + for (j = 1, l = et->lines; j <= obst->end_line && l; + l = l->next, j++) { + if (j < i); + else { + line = l->data; + /* + * Now find the obstacle on the list of bits and remove it. + */ + for (ll = line->bits; ll; ll = ll->next) { + bit = ll->data; + if (bit != obst->bit); + else { + ll = evas_list_remove(ll, bit); + break; + } + } + } } } /* * etox_obstacle_line_insert - place an obstacle within a line */ -static void _etox_obstacle_line_insert(Etox_Line * line, Etox_Obstacle * obst) +static void _etox_obstacle_line_insert(Etox_Line * line, + Etox_Obstacle * obst) { Estyle *bit; int x, y, w, h; + Evas_List l; CHECK_PARAM_POINTER("line", line); CHECK_PARAM_POINTER("obst", obst); @@ -162,30 +174,30 @@ /* * Find the position to place the obstacle within the line */ - ewd_list_goto_first(line->bits); - while ((bit = ewd_list_next(line->bits))) { + for (l = line->bits; l; l = l->next) { int tx, ty, tw, th; + bit = l->data; estyle_geometry(bit, &tx, &ty, &tw, &th); - if (etox_rect_intersect(x, y, w, h, tx, ty, tw, th)) + if (etox_rect_intersect(x, y, w, h, tx, ty, tw, th)) { + if (!bit) + return; + /* + * FIXME: We need to do some bit-splitting here, just need to get + * around to it. + */ + l = evas_list_prepend_relative(l, obst->bit, + l->next); break; + } } - - if (!bit) - return; - - /* - * FIXME: We need to do some bit-splitting here, just need to get - * around to it. - */ - ewd_list_insert(line->bits, obst->bit); } /* * etox_rect_intersect - check for intersection on two rectangles */ inline int etox_rect_intersect(int x1, int y1, int w1, int h1, - int x2, int y2, int w2, int h2) + int x2, int y2, int w2, int h2) { if (x1 > x2 + w2) return FALSE; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_obstacle.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- etox_obstacle.h 2 Apr 2002 12:03:22 -0000 1.1.2.1 +++ etox_obstacle.h 21 Apr 2002 06:27:24 -0000 1.1.2.2 @@ -2,10 +2,10 @@ #define _ETOX_OBSTACLE_H Etox_Obstacle *etox_obstacle_new(Etox * line, int x, int y, int w, int h); -void etox_obstacle_free(Etox *et, Etox_Obstacle * obstacle); +void etox_obstacle_free(Etox * et, Etox_Obstacle * obstacle); void etox_obstacle_place(Etox * et, Etox_Obstacle * obst); void etox_obstacle_unplace(Etox * et, Etox_Obstacle * obst); inline int etox_rect_intersect(int x1, int y1, int w1, int h1, - int x2, int y2, int w2, int h2); + int x2, int y2, int w2, int h2); #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/etox/src/etox_selection.h,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -3 -r1.1.2.1 -r1.1.2.2 --- etox_selection.h 2 Apr 2002 12:03:22 -0000 1.1.2.1 +++ etox_selection.h 21 Apr 2002 06:27:24 -0000 1.1.2.2 @@ -4,34 +4,38 @@ /* * These functions select regions of the etox. */ -Etox_Selection *etox_select_coords(Etox *et, int sx, int sy, int ex, int ey); -Etox_Selection *etox_select_index(Etox *et, int si, int ei); -Etox_Selection *etox_select_str(Etox *et, char *match, char **last); +Etox_Selection *etox_select_coords(Etox * et, int sx, int sy, int ex, + int ey); +Etox_Selection *etox_select_index(Etox * et, int si, int ei); +Etox_Selection *etox_select_str(Etox * et, char *match, char **last); /* * Release a selection that is no longer needed. */ -void etox_selection_free(Etox_Selection *selected); +void etox_selection_free(Etox_Selection * selected); /* * This function gets a rectangular bound on the selection. */ -void etox_selection_bounds(Etox_Selection *selected, int *x, int *y, - int *w, int *h); +void etox_selection_bounds(Etox_Selection * selected, int *x, int *y, + int *w, int *h); /* * These methods alter the appearance of the selected region. */ -void etox_selection_set_font(Etox_Selection *selected, char *font, int size); -void etox_selection_set_style(Etox_Selection *selected, char *style); +void etox_selection_set_font(Etox_Selection * selected, char *font, + int size); +void etox_selection_set_style(Etox_Selection * selected, char *style); /* * These functions manipulate callbacks on the selected region. */ -void etox_selection_add_callback(Etox_Selection *selected, - Evas_Callback_Type callback, void (*func) (void *data, Evas e, - Evas_Object o, int b, int x, int y), void *data); -void etox_selection_del_callback(Etox_Selection *selected, - Evas_Callback_Type callback); +void etox_selection_add_callback(Etox_Selection * selected, + Evas_Callback_Type callback, + void (*func) (void *data, Evas e, + Evas_Object o, int b, int x, + int y), void *data); +void etox_selection_del_callback(Etox_Selection * selected, + Evas_Callback_Type callback); #endif |