Are you sure allocating those new lists actually saves anything? I would 
think they would make things worse.

--
Tom.

On 27/12/13 01:05, Cedric BAIL wrote:
> cedric pushed a commit to branch master.
>
> http://git.enlightenment.org/core/efl.git/commit/?id=922fe6c1099586ab6f7884f6aa9fdc71a3b9652e
>
> commit 922fe6c1099586ab6f7884f6aa9fdc71a3b9652e
> Author: Cedric BAIL <[email protected]>
> Date:   Fri Dec 27 09:34:29 2013 +0900
>
>      evas: improve textblock rendering by walking even less in all case.
>
>      We now build a list of item to walk on for each step to just avoid all 
> necessary walking.
>      It is a slightly more elegant idea than my previous patch even if it 
> only give a speed
>      improvement of 5% in the best case. Now that render code and the callee 
> only take 1.6%
>      of the time I am looking at in the benchmark, meaning nothing else to 
> improve here.
>
>      This fix the bug spotted in Enlightenment dialog box.
> ---
>   src/lib/evas/canvas/evas_object_textblock.c | 436 
> +++++++++++++++-------------
>   1 file changed, 231 insertions(+), 205 deletions(-)
>
> diff --git a/src/lib/evas/canvas/evas_object_textblock.c 
> b/src/lib/evas/canvas/evas_object_textblock.c
> index 5851918..c9a7e8f 100644
> --- a/src/lib/evas/canvas/evas_object_textblock.c
> +++ b/src/lib/evas/canvas/evas_object_textblock.c
> @@ -373,14 +373,17 @@ typedef enum _Evas_Textblock_Item_Type
>   struct _Evas_Object_Textblock_Item
>   {
>      EINA_INLIST;
> -   Evas_Textblock_Item_Type             type;
>      Evas_Object_Textblock_Node_Text     *text_node;
>      Evas_Object_Textblock_Format        *format;
> +   Evas_Object_Textblock_Line          *ln;
>      size_t                               text_pos;
>   #ifdef BIDI_SUPPORT
>      size_t                               visual_pos;
>   #endif
> +   Evas_Textblock_Item_Type             type;
> +
>      Evas_Coord                           adv, x, w, h;
> +   Evas_Coord                           yoff;
>      Eina_Bool                            merge : 1; /* Indicates whether this
>                                                         item should merge to 
> the
>                                                         previous item or not 
> */
> @@ -4439,6 +4442,7 @@ _layout_handle_ellipsis(Ctxt *c, 
> Evas_Object_Textblock_Item *it, Eina_List *i)
>           c->ln->items = (Evas_Object_Textblock_Item *)
>              eina_inlist_append(EINA_INLIST_GET(c->ln->items),
>                    EINA_INLIST_GET(it));
> +        it->ln = c->ln;
>           if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT)
>             {
>                Evas_Object_Textblock_Format_Item *fi;
> @@ -4449,6 +4453,7 @@ _layout_handle_ellipsis(Ctxt *c, 
> Evas_Object_Textblock_Item *it, Eina_List *i)
>      c->ln->items = (Evas_Object_Textblock_Item *)
>         eina_inlist_append(EINA_INLIST_GET(c->ln->items),
>               EINA_INLIST_GET(_ITEM(ellip_ti)));
> +   _ITEM(ellip_ti)->ln = c->ln;
>
>      c->position = (c->position == TEXTBLOCK_POSITION_START) ?
>         TEXTBLOCK_POSITION_SINGLE : TEXTBLOCK_POSITION_END;
> @@ -4468,7 +4473,7 @@ 
> _layout_paragraph_reorder_lines(Evas_Object_Textblock_Paragraph *par)
>   }
>   #endif
>
> -static void
> +static inline void
>   _layout_paragraph_render(Evas_Object_Textblock *o,
>                        Evas_Object_Textblock_Paragraph *par)
>   {
> @@ -4700,6 +4705,7 @@ _layout_par(Ctxt *c)
>                                          eina_inlist_remove(
>                                             EINA_INLIST_GET(c->ln->items),
>                                             EINA_INLIST_GET(it)));
> +                                 it->ln = c->ln;
>                                    i = eina_list_prev(i);
>                                    it = eina_list_data_get(i);
>                                 }
> @@ -4769,6 +4775,7 @@ _layout_par(Ctxt *c)
>                c->ln->items = (Evas_Object_Textblock_Item *)
>                   eina_inlist_append(EINA_INLIST_GET(c->ln->items),
>                         EINA_INLIST_GET(it));
> +             it->ln = c->ln;
>                if (it->type == EVAS_TEXTBLOCK_ITEM_FORMAT)
>                  {
>                     Evas_Object_Textblock_Format_Item *fi;
> @@ -10706,10 +10713,16 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>                            int x, int y, Eina_Bool do_async)
>   {
>      Evas_Object_Textblock_Paragraph *par, *start = NULL;
> +   Evas_Object_Textblock_Item *itr;
>      Evas_Object_Textblock_Line *ln;
>      Evas_Object_Textblock *o = type_private_data;
> +   Eina_List *shadows = NULL;
> +   Eina_List *glows = NULL;
> +   Eina_List *outlines = NULL;
>      int i, j;
>      int cx, cy, cw, ch, clip;
> +   int ca, cr, cg, cb;
> +   int na, nr, ng, nb;
>      const char vals[5][5] =
>        {
>         {0, 1, 2, 1, 0},
> @@ -10718,9 +10731,6 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>         {1, 3, 4, 3, 1},
>         {0, 1, 2, 1, 0}
>        };
> -   Eina_Bool have_shadow = EINA_FALSE;
> -   Eina_Bool have_glow = EINA_FALSE;
> -   Eina_Bool have_outline = EINA_FALSE;
>
>      /* render object to surface with context, and offxet by x,y */
>      obj->layer->evas->engine.func->context_multiplier_unset(output,
> @@ -10737,6 +10747,9 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>       * there's nothing left to do. */
>      if (!o->paragraphs) return;
>
> +   ENFN->context_color_set(output, context, 0, 0, 0, 0);
> +   ca = cr = cg = cb = 0;
> +
>   #define ITEM_WALK() \
>      EINA_INLIST_FOREACH(start, par) \
>        { \
> @@ -10751,8 +10764,6 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>           _layout_paragraph_render(o, par); \
>           EINA_INLIST_FOREACH(par->lines, ln) \
>             { \
> -             Evas_Object_Textblock_Item *itr; \
> -             \
>                if (clip) \
>                  { \
>                     if ((obj->cur->geometry.y + y + par->y + ln->y + ln->h) < 
> (cy - 20)) \
> @@ -10768,6 +10779,7 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>                       { \
>                          yoff += itr->format->valign * (ln->h - itr->h); \
>                       } \
> +                  itr->yoff = yoff;             \
>                     if (clip) \
>                       { \
>                          if ((obj->cur->geometry.x + x + ln->x + itr->x + 
> itr->w) < (cx - 20)) \
> @@ -10785,18 +10797,28 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>             } \
>        } \
>      do {} while(0)
> -#define COLOR_SET(col) \
> -   ENFN->context_color_set(output, context, \
> -         (obj->cur->cache.clip.r * ti->parent.format->color.col.r) / 255, \
> -         (obj->cur->cache.clip.g * ti->parent.format->color.col.g) / 255, \
> -         (obj->cur->cache.clip.b * ti->parent.format->color.col.b) / 255, \
> -         (obj->cur->cache.clip.a * ti->parent.format->color.col.a) / 255);
> -#define COLOR_SET_AMUL(col, amul) \
> -   ENFN->context_color_set(output, context, \
> -         (obj->cur->cache.clip.r * ti->parent.format->color.col.r * (amul)) 
> / 65025, \
> -         (obj->cur->cache.clip.g * ti->parent.format->color.col.g * (amul)) 
> / 65025, \
> -         (obj->cur->cache.clip.b * ti->parent.format->color.col.b * (amul)) 
> / 65025, \
> -         (obj->cur->cache.clip.a * ti->parent.format->color.col.a * (amul)) 
> / 65025);
> +#define COLOR_SET(col)                                                  \
> +   nr = obj->cur->cache.clip.r * ti->parent.format->color.col.r;        \
> +   ng = obj->cur->cache.clip.g * ti->parent.format->color.col.g;        \
> +   nb = obj->cur->cache.clip.b * ti->parent.format->color.col.b;        \
> +   na = obj->cur->cache.clip.a * ti->parent.format->color.col.a;        \
> +   if (na != ca || nb != cb || ng != cg || nr != cr)                    \
> +     {                                                                  \
> +        ENFN->context_color_set(output, context,                        \
> +                                nr / 255, ng / 255, nb / 255, na / 255); \
> +        cr = nr; cg = ng; cb = nb; ca = na;                             \
> +     }
> +#define COLOR_SET_AMUL(col, amul)                                       \
> +   nr = obj->cur->cache.clip.r * ti->parent.format->color.col.r * (amul); \
> +   ng = obj->cur->cache.clip.g * ti->parent.format->color.col.g * (amul); \
> +   nb = obj->cur->cache.clip.b * ti->parent.format->color.col.b * (amul); \
> +   na = obj->cur->cache.clip.a * ti->parent.format->color.col.a * (amul); \
> +   if (na != ca || nb != cb || ng != cg || nr != cr)                    \
> +     {                                                                  \
> +        ENFN->context_color_set(output, context,                        \
> +                                nr / 65025, ng / 65025, nb / 65025, na / 
> 65025); \
> +        cr = nr; cg = ng; cb = nb; ca = na;                             \
> +     }
>   #define DRAW_TEXT(ox, oy)                                               \
>      if (ti->parent.format->font.font)                                    \
>        evas_font_draw_async_check(obj, output, context, surface,          \
> @@ -10807,24 +10829,28 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>           &ti->text_props, do_async);
>
>      /* backing */
> -#define DRAW_RECT(ox, oy, ow, oh, or, og, ob, oa) \
> -   do \
> -     { \
> -        ENFN->context_color_set(output, \
> -              context, \
> -              (obj->cur->cache.clip.r * or) / 255, \
> -              (obj->cur->cache.clip.g * og) / 255, \
> -              (obj->cur->cache.clip.b * ob) / 255, \
> -              (obj->cur->cache.clip.a * oa) / 255); \
> -        ENFN->rectangle_draw(output, \
> -              context, \
> -              surface, \
> -              obj->cur->geometry.x + ln->x + x + (ox), \
> -              obj->cur->geometry.y + ln->par->y + ln->y + y + (oy), \
> -              (ow), \
> -              (oh), \
> -              do_async); \
> -     } \
> +#define DRAW_RECT(ox, oy, ow, oh, or, og, ob, oa)                       \
> +   do                                                                   \
> +     {                                                                  \
> +        nr = obj->cur->cache.clip.r * or;                               \
> +        ng = obj->cur->cache.clip.g * og;                               \
> +        nb = obj->cur->cache.clip.b * ob;                               \
> +        na = obj->cur->cache.clip.a * oa;                               \
> +        if (na != ca || nb != cb || ng != cg || nr != cr)               \
> +          {                                                             \
> +             ENFN->context_color_set(output, context,                   \
> +                                     cr / 255, cg / 255, cb / 255, ca / 
> 255); \
> +             cr = nr; cg = ng; cb = nb; ca = na;                        \
> +          }                                                             \
> +        ENFN->rectangle_draw(output,                                    \
> +                             context,                                   \
> +                             surface,                                   \
> +                             obj->cur->geometry.x + ln->x + x + (ox),   \
> +                             obj->cur->geometry.y + ln->par->y + ln->y + y + 
> (oy), \
> +                             (ow),                                      \
> +                             (oh),                                      \
> +                             do_async);                                 \
> +     }                                                                  \
>      while (0)
>
>   #define DRAW_FORMAT_DASHED(oname, oy, oh, dw, dp) \
> @@ -10893,38 +10919,35 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>      ITEM_WALK()
>        {
>           /* Check which other pass are necessary to avoid useless WALK */
> -        if (!have_shadow && !have_glow && !have_outline)
> -          {
> -             Evas_Object_Textblock_Text_Item *ti;
> +        Evas_Object_Textblock_Text_Item *ti;
>
> -             ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) 
> : NULL;
> -             if (ti)
> +        ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) : 
> NULL;
> +        if (ti)
> +          {
> +             if (ti->parent.format->style & (EVAS_TEXT_STYLE_SHADOW |
> +                                             
> EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW |
> +                                             EVAS_TEXT_STYLE_OUTLINE_SHADOW |
> +                                             EVAS_TEXT_STYLE_FAR_SHADOW |
> +                                             EVAS_TEXT_STYLE_FAR_SOFT_SHADOW 
> |
> +                                             EVAS_TEXT_STYLE_SOFT_SHADOW))
>                  {
> -                  if (ti->parent.format->style & (EVAS_TEXT_STYLE_SHADOW |
> -                                                  
> EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW |
> -                                                  
> EVAS_TEXT_STYLE_OUTLINE_SHADOW |
> -                                                  EVAS_TEXT_STYLE_FAR_SHADOW 
> |
> -                                                  
> EVAS_TEXT_STYLE_FAR_SOFT_SHADOW |
> -                                                  
> EVAS_TEXT_STYLE_SOFT_SHADOW))
> -                    {
> -                       have_shadow = EINA_TRUE;
> -                    }
> -                  if ((ti->parent.format->style & 
> EVAS_TEXT_STYLE_MASK_BASIC) ==
> -                      EVAS_TEXT_STYLE_GLOW)
> -                    {
> -                       have_glow = EINA_TRUE;
> -                    }
> -                  if (((ti->parent.format->style & 
> EVAS_TEXT_STYLE_MASK_BASIC) == EVAS_TEXT_STYLE_OUTLINE) ||
> -                      ((ti->parent.format->style & 
> EVAS_TEXT_STYLE_MASK_BASIC) == EVAS_TEXT_STYLE_OUTLINE_SHADOW) ||
> -                      ((ti->parent.format->style & 
> EVAS_TEXT_STYLE_MASK_BASIC) == EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW) ||
> -                      (ti->parent.format->style == 
> EVAS_TEXT_STYLE_SOFT_OUTLINE))
> -                    {
> -                       have_outline = EINA_TRUE;
> -                    }
> +                  shadows = eina_list_append(shadows, itr);
> +               }
> +             if ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) ==
> +                 EVAS_TEXT_STYLE_GLOW)
> +               {
> +                  glows = eina_list_append(glows, itr);
> +               }
> +             if (((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE) ||
> +                 ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE_SHADOW) ||
> +                 ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW) ||
> +                 (ti->parent.format->style == EVAS_TEXT_STYLE_SOFT_OUTLINE))
> +               {
> +                  outlines = eina_list_append(outlines, itr);
>                  }
> -
>             }
>
> +        /* Draw background */
>           DRAW_FORMAT(backing, 0, ln->h);
>        }
>      ITEM_WALK_END();
> @@ -10935,182 +10958,185 @@ evas_object_textblock_render(Evas_Object *eo_obj 
> EINA_UNUSED,
>      /* prepare everything for text draw */
>
>      /* shadows */
> -   if (have_shadow)
> +   EINA_LIST_FREE(shadows, itr)
>        {
> -        ITEM_WALK()
> -          {
> -             int shad_dst, shad_sz, dx, dy, haveshad;
> -             Evas_Object_Textblock_Text_Item *ti;
> -             ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) 
> : NULL;
> -             if (!ti) continue;
> +        int shad_dst, shad_sz, dx, dy, haveshad;
> +        Evas_Object_Textblock_Text_Item *ti;
> +        Evas_Coord yoff;
>
> -             shad_dst = shad_sz = dx = dy = haveshad = 0;
> -             switch (ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC)
> -               {
> -                case EVAS_TEXT_STYLE_SHADOW:
> -                   shad_dst = 1;
> -                   haveshad = 1;
> -                   break;
> -                case EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW:
> -                   shad_dst = 1;
> -                   shad_sz = 2;
> -                   haveshad = 1;
> -                   break;
> -                case EVAS_TEXT_STYLE_OUTLINE_SHADOW:
> -                case EVAS_TEXT_STYLE_FAR_SHADOW:
> -                   shad_dst = 2;
> -                   haveshad = 1;
> -                   break;
> -                case EVAS_TEXT_STYLE_FAR_SOFT_SHADOW:
> -                   shad_dst = 2;
> -                   shad_sz = 2;
> -                   haveshad = 1;
> -                   break;
> -                case EVAS_TEXT_STYLE_SOFT_SHADOW:
> -                   shad_dst = 1;
> -                   shad_sz = 2;
> -                   haveshad = 1;
> -                   break;
> -                default:
> -                   break;
> -               }
> -             if (haveshad)
> +        ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) : 
> NULL;
> +        if (!ti) continue;
> +
> +        yoff = itr->yoff;
> +        ln = itr->ln;
> +
> +        shad_dst = shad_sz = dx = dy = haveshad = 0;
> +        switch (ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC)
> +          {
> +           case EVAS_TEXT_STYLE_SHADOW:
> +              shad_dst = 1;
> +              haveshad = 1;
> +              break;
> +           case EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW:
> +              shad_dst = 1;
> +              shad_sz = 2;
> +              haveshad = 1;
> +              break;
> +           case EVAS_TEXT_STYLE_OUTLINE_SHADOW:
> +           case EVAS_TEXT_STYLE_FAR_SHADOW:
> +              shad_dst = 2;
> +              haveshad = 1;
> +              break;
> +           case EVAS_TEXT_STYLE_FAR_SOFT_SHADOW:
> +              shad_dst = 2;
> +              shad_sz = 2;
> +              haveshad = 1;
> +              break;
> +           case EVAS_TEXT_STYLE_SOFT_SHADOW:
> +              shad_dst = 1;
> +              shad_sz = 2;
> +              haveshad = 1;
> +              break;
> +           default:
> +              break;
> +          }
> +        if (haveshad)
> +          {
> +             if (shad_dst > 0)
>                  {
> -                  if (shad_dst > 0)
> +                  switch (ti->parent.format->style & 
> EVAS_TEXT_STYLE_MASK_SHADOW_DIRECTION)
>                       {
> -                       switch (ti->parent.format->style & 
> EVAS_TEXT_STYLE_MASK_SHADOW_DIRECTION)
> -                         {
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_RIGHT:
> -                             dx = 1;
> -                             dy = 1;
> -                             break;
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM:
> -                             dx = 0;
> -                             dy = 1;
> -                             break;
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_LEFT:
> -                             dx = -1;
> -                             dy = 1;
> -                             break;
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_LEFT:
> -                             dx = -1;
> -                             dy = 0;
> -                             break;
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_LEFT:
> -                             dx = -1;
> -                             dy = -1;
> -                             break;
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP:
> -                             dx = 0;
> -                             dy = -1;
> -                             break;
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_RIGHT:
> -                             dx = 1;
> -                             dy = -1;
> -                             break;
> -                          case EVAS_TEXT_STYLE_SHADOW_DIRECTION_RIGHT:
> -                             dx = 1;
> -                             dy = 0;
> -                          default:
> -                             break;
> -                         }
> -                       dx *= shad_dst;
> -                       dy *= shad_dst;
> -                    }
> -                  switch (shad_sz)
> -                    {
> -                     case 0:
> -                        COLOR_SET(shadow);
> -                        DRAW_TEXT(dx, dy);
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_RIGHT:
> +                        dx = 1;
> +                        dy = 1;
>                           break;
> -                     case 2:
> -                        for (j = 0; j < 5; j++)
> -                          {
> -                             for (i = 0; i < 5; i++)
> -                               {
> -                                  if (vals[i][j] != 0)
> -                                    {
> -                                       COLOR_SET_AMUL(shadow, vals[i][j] * 
> 50);
> -                                       DRAW_TEXT(i - 2 + dx, j - 2 + dy);
> -                                    }
> -                               }
> -                          }
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM:
> +                        dx = 0;
> +                        dy = 1;
> +                        break;
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_BOTTOM_LEFT:
> +                        dx = -1;
> +                        dy = 1;
>                           break;
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_LEFT:
> +                        dx = -1;
> +                        dy = 0;
> +                        break;
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_LEFT:
> +                        dx = -1;
> +                        dy = -1;
> +                        break;
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP:
> +                        dx = 0;
> +                        dy = -1;
> +                        break;
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_TOP_RIGHT:
> +                        dx = 1;
> +                        dy = -1;
> +                        break;
> +                     case EVAS_TEXT_STYLE_SHADOW_DIRECTION_RIGHT:
> +                        dx = 1;
> +                        dy = 0;
>                        default:
>                           break;
>                       }
> +                  dx *= shad_dst;
> +                  dy *= shad_dst;
> +               }
> +             switch (shad_sz)
> +               {
> +                case 0:
> +                   COLOR_SET(shadow);
> +                   DRAW_TEXT(dx, dy);
> +                   break;
> +                case 2:
> +                   for (j = 0; j < 5; j++)
> +                     {
> +                        for (i = 0; i < 5; i++)
> +                          {
> +                             if (vals[i][j] != 0)
> +                               {
> +                                  COLOR_SET_AMUL(shadow, vals[i][j] * 50);
> +                                  DRAW_TEXT(i - 2 + dx, j - 2 + dy);
> +                               }
> +                          }
> +                     }
> +                   break;
> +                default:
> +                   break;
>                  }
>             }
> -        ITEM_WALK_END();
>        }
>
>      /* glows */
> -   if (have_glow)
> +   EINA_LIST_FREE(glows, itr)
>        {
> -        ITEM_WALK()
> -          {
> -             Evas_Object_Textblock_Text_Item *ti;
> -             ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) 
> : NULL;
> -             if (!ti) continue;
> +        Evas_Object_Textblock_Text_Item *ti;
> +        Evas_Coord yoff;
> +
> +        ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) : 
> NULL;
> +        if (!ti) continue;
>
> -             if ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_GLOW)
> +        yoff = itr->yoff;
> +        ln = itr->ln;
> +
> +        if ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_GLOW)
> +          {
> +             for (j = 0; j < 5; j++)
>                  {
> -                  for (j = 0; j < 5; j++)
> +                  for (i = 0; i < 5; i++)
>                       {
> -                       for (i = 0; i < 5; i++)
> +                       if (vals[i][j] != 0)
>                            {
> -                            if (vals[i][j] != 0)
> -                              {
> -                                 COLOR_SET_AMUL(glow, vals[i][j] * 50);
> -                                 DRAW_TEXT(i - 2, j - 2);
> -                              }
> +                            COLOR_SET_AMUL(glow, vals[i][j] * 50);
> +                            DRAW_TEXT(i - 2, j - 2);
>                            }
>                       }
> -                  COLOR_SET(glow2);
> -                  DRAW_TEXT(-1, 0);
> -                  DRAW_TEXT(1, 0);
> -                  DRAW_TEXT(0, -1);
> -                  DRAW_TEXT(0, 1);
>                  }
> +             COLOR_SET(glow2);
> +             DRAW_TEXT(-1, 0);
> +             DRAW_TEXT(1, 0);
> +             DRAW_TEXT(0, -1);
> +             DRAW_TEXT(0, 1);
>             }
> -        ITEM_WALK_END();
>        }
>
>      /* outlines */
> -   if (have_outline)
> +   EINA_LIST_FREE(outlines, itr)
>        {
> -        ITEM_WALK()
> -          {
> -             Evas_Object_Textblock_Text_Item *ti;
> -             ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) 
> : NULL;
> -             if (!ti) continue;
> +        Evas_Object_Textblock_Text_Item *ti;
> +        Evas_Coord yoff;
>
> -             if (((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE) ||
> -                 ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE_SHADOW) ||
> -                 ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW))
> -               {
> -                  COLOR_SET(outline);
> -                  DRAW_TEXT(-1, 0);
> -                  DRAW_TEXT(1, 0);
> -                  DRAW_TEXT(0, -1);
> -                  DRAW_TEXT(0, 1);
> -               }
> -             else if (ti->parent.format->style == 
> EVAS_TEXT_STYLE_SOFT_OUTLINE)
> +        ti = (itr->type == EVAS_TEXTBLOCK_ITEM_TEXT) ? _ITEM_TEXT(itr) : 
> NULL;
> +        if (!ti) continue;
> +
> +        yoff = itr->yoff;
> +        ln = itr->ln;
> +
> +        if (((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE) ||
> +            ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE_SHADOW) ||
> +            ((ti->parent.format->style & EVAS_TEXT_STYLE_MASK_BASIC) == 
> EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW))
> +          {
> +             COLOR_SET(outline);
> +             DRAW_TEXT(-1, 0);
> +             DRAW_TEXT(1, 0);
> +             DRAW_TEXT(0, -1);
> +             DRAW_TEXT(0, 1);
> +          }
> +        else if (ti->parent.format->style == EVAS_TEXT_STYLE_SOFT_OUTLINE)
> +          {
> +             for (j = 0; j < 5; j++)
>                  {
> -                  for (j = 0; j < 5; j++)
> +                  for (i = 0; i < 5; i++)
>                       {
> -                       for (i = 0; i < 5; i++)
> +                       if (((i != 2) || (j != 2)) && (vals[i][j] != 0))
>                            {
> -                            if (((i != 2) || (j != 2)) && (vals[i][j] != 0))
> -                              {
> -                                 COLOR_SET_AMUL(outline, vals[i][j] * 50);
> -                                 DRAW_TEXT(i - 2, j - 2);
> -                              }
> +                            COLOR_SET_AMUL(outline, vals[i][j] * 50);
> +                            DRAW_TEXT(i - 2, j - 2);
>                            }
>                       }
>                  }
>             }
> -        ITEM_WALK_END();
>        }
>
>      /* normal text and lines */
>


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to