Cedric Bail
On Dec 27, 2013 10:18 PM, "Tom Hacohen" <[email protected]> wrote:
>
> Are you sure allocating those new lists actually saves anything? I would
> think they would make things worse.

I rely here on the fact that we're using list a lot, so there's already
some empty slot in the mempool. Allocation cost doesn't even show up in the
benchmark.

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