Use the style features available in evas text objects to avoid creating more

evas objects. This saves up to 25 text objects per text part for soft shadows.


SVN revision: 18645
This commit is contained in:
rbdpngn 2005-11-26 08:14:34 +00:00 committed by rbdpngn
parent 74dc468be3
commit ba901efc05
3 changed files with 91 additions and 258 deletions

View File

@ -637,16 +637,16 @@ _edje_part_recalc_single(Edje *ed,
evas_object_geometry_get(ep->object, NULL, NULL, &tw, &th);
if (chosen_desc->text.min_x)
{
mw = tw +
_edje_text_styles[ep->part->effect].pad.l +
_edje_text_styles[ep->part->effect].pad.r;
int l, r;
evas_object_text_style_pad_get(ep->object, &l, &r, NULL, NULL);
mw = tw + l + r;
if (mw > minw) minw = mw;
}
if (chosen_desc->text.min_y)
{
mh = th +
_edje_text_styles[ep->part->effect].pad.t +
_edje_text_styles[ep->part->effect].pad.b;
int t, b;
evas_object_text_style_pad_get(ep->object, NULL, NULL, &t, &b);
mh = th + t + b;
if (mh > minh) minh = mh;
}
}

View File

@ -776,7 +776,6 @@ extern Eet_Data_Descriptor *_edje_edd_edje_part_image_id;
extern int _edje_anim_count;
extern Ecore_Animator *_edje_timer;
extern Evas_List *_edje_animators;
extern Edje_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
extern Evas_List *_edje_edjes;
extern char *_edje_fontset_append;

View File

@ -10,174 +10,9 @@
#endif
#include <assert.h>
Edje_Text_Style _edje_text_styles[EDJE_TEXT_EFFECT_LAST];
void
_edje_text_init(void)
{
int i, j, n = 0;
const char vals[5][5] =
{
{0, 1, 2, 1, 0},
{1, 3, 4, 3, 1},
{2, 4, 5, 4, 2},
{1, 3, 4, 3, 1},
{0, 1, 2, 1, 0}
};
memset(_edje_text_styles, 0, sizeof(_edje_text_styles));
_edje_text_styles[EDJE_TEXT_EFFECT_NONE].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_NONE].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_PLAIN].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_PLAIN].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.r = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].pad.b = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].num = 5;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].y = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[2].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].x = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[3].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE].members[4].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].offset.x = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].offset.y = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.l = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.r = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.t = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].pad.b = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[0].alpha = 255;
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
{
if (((i == 2) && (j == 2)) || (vals[i][j] == 0)) continue;
n = _edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].num;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].x = i - 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].y = j - 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].members[n].alpha = vals[i][j] * 50;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_OUTLINE].num = n + 1;
}
}
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].pad.r = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].pad.b = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].num = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SHADOW].members[1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.r = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].pad.b = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[0].alpha = 255;
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
{
if (vals[i][j] == 0) continue;
n = _edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].num;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].x = i - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].y = j - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].members[n].alpha = vals[i][j] * 50;
_edje_text_styles[EDJE_TEXT_EFFECT_SOFT_SHADOW].num = n + 1;
}
}
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.r = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].pad.b = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].num = 6;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[0].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].x = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].y = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].y = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[2].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[3].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].x = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[4].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SHADOW].members[5].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].offset.x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].offset.y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.l = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.r = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.t = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].pad.b = 3;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[0].alpha = 255;
for (j = 0; j < 5; j++)
{
for (i = 0; i < 5; i++)
{
if (vals[i][j] == 0) continue;
n = _edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].color = 2;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].x = i - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].y = j - 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n].alpha = vals[i][j] * 50;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num = n + 1;
}
}
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].y = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 1].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].x = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].y = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 2].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].x = -1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 3].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].color = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].x = 1;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].y = 0;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].members[n + 4].alpha = 255;
_edje_text_styles[EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW].num += 4;
}
void
@ -188,20 +23,6 @@ _edje_text_part_on_add(Edje *ed, Edje_Real_Part *ep)
Edje_Part *pt = ep->part;
if (ep->part->type != EDJE_PART_TYPE_TEXT) return;
if (ep->part->effect >= EDJE_TEXT_EFFECT_LAST) return;
for (i = 1; i < _edje_text_styles[ep->part->effect].num; i++)
{
Evas_Object *o;
o = evas_object_text_add(ed->evas);
// evas_object_text_font_source_set(o, ed->path);
evas_object_smart_member_add(o, ed->obj);
evas_object_pass_events_set(o, 1);
evas_object_clip_set(o, ed->clipper);
evas_object_show(o);
ep->extra_objects = evas_list_append(ep->extra_objects, o);
}
if ((pt->default_desc) && (pt->default_desc->text.text_class))
_edje_text_class_member_add(ed, pt->default_desc->text.text_class);
@ -447,53 +268,6 @@ static void
_edje_text_finalize(Edje *ed, Edje_Real_Part *ep,
Edje_Calc_Params *params, Evas_Object *o, int i)
{
unsigned char r = 0, g = 0, b = 0, a = 0;
int got_color = 1;
evas_object_move(o,
ed->x + params->x + ep->offset.x + _edje_text_styles[ep->part->effect].members[i].x,
ed->y + params->y + ep->offset.y + _edje_text_styles[ep->part->effect].members[i].y);
switch (_edje_text_styles[ep->part->effect].members[i].color)
{
case 0:
r = params->color.r;
g = params->color.g;
b = params->color.b;
a = params->color.a;
break;
case 1:
r = params->color2.r;
g = params->color2.g;
b = params->color2.b;
a = params->color2.a;
break;
case 2:
r = params->color3.r;
g = params->color3.g;
b = params->color3.b;
a = params->color3.a;
break;
default:
got_color = 0;
break;
}
/* if this fails, we probably need to extend
* the switch statement :)
*/
assert (got_color);
if (got_color)
{
a = (a * (_edje_text_styles[ep->part->effect].members[i].alpha + 1)) / 256;
evas_object_color_set(o, r, g, b, a);
}
if (params->visible)
evas_object_show(o);
else
evas_object_hide(o);
}
void
@ -566,11 +340,14 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
font = font2;
}
}
ox = _edje_text_styles[ep->part->effect].offset.x;
oy = _edje_text_styles[ep->part->effect].offset.y;
sw = params->w - (_edje_text_styles[ep->part->effect].pad.l + _edje_text_styles[ep->part->effect].pad.r);
sh = params->h - (_edje_text_styles[ep->part->effect].pad.t + _edje_text_styles[ep->part->effect].pad.b);
{
int l, r, t, b;
evas_object_text_style_pad_get(ep->object, &l, &r, &t, &b);
ox = l;
oy = t;
sw = params->w - (l + r);
sh = params->h - (t + b);
}
if ((ep->text.cache.in_size == size) &&
(ep->text.cache.in_w == sw) &&
(ep->text.cache.in_h == sh) &&
@ -725,31 +502,88 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
evas_object_move(ep->object,
ed->x + params->x + ep->offset.x,
ed->y + params->y + ep->offset.y);
evas_object_color_set(ep->object,
params->color.r,
params->color.g,
params->color.b,
(params->color.a * (_edje_text_styles[ep->part->effect].members[0].alpha + 1)) / 256);
if (params->visible) evas_object_show(ep->object);
else evas_object_hide(ep->object);
{
Evas_List *l;
int i;
for (i = 1, l = ep->extra_objects; l; l = l->next, i++)
{
Evas_Object *o;
o = l->data;
if (inlined_font) evas_object_text_font_source_set(o, ed->path);
else evas_object_text_font_source_set(o, NULL);
evas_object_text_font_set(o, font, size);
evas_object_text_text_set(o, text);
Evas_Text_Style_Type style;
_edje_text_finalize(ed, ep, params, o, i);
evas_object_color_set(ep->object,
params->color.r,
params->color.g,
params->color.b,
params->color.a);
if ((ep->part->effect == EDJE_TEXT_EFFECT_NONE) ||
(ep->part->effect == EDJE_TEXT_EFFECT_PLAIN))
{
style = EVAS_TEXT_STYLE_PLAIN;
}
else if (ep->part->effect == EDJE_TEXT_EFFECT_OUTLINE)
{
style = EVAS_TEXT_STYLE_OUTLINE;
evas_object_text_outline_color_set(ep->object,
params->color2.r,
params->color2.g,
params->color2.b,
params->color2.a);
}
else if (ep->part->effect == EDJE_TEXT_EFFECT_SOFT_OUTLINE)
{
style = EVAS_TEXT_STYLE_SOFT_OUTLINE;
evas_object_text_outline_color_set(ep->object,
params->color2.r,
params->color2.g,
params->color2.b,
params->color2.a);
}
else if (ep->part->effect == EDJE_TEXT_EFFECT_SHADOW)
{
style = EVAS_TEXT_STYLE_SHADOW;
evas_object_text_shadow_color_set(ep->object,
params->color3.r,
params->color3.g,
params->color3.b,
params->color3.a);
}
else if (ep->part->effect == EDJE_TEXT_EFFECT_SOFT_SHADOW)
{
style = EVAS_TEXT_STYLE_SOFT_SHADOW;
evas_object_text_shadow_color_set(ep->object,
params->color3.r,
params->color3.g,
params->color3.b,
params->color3.a);
}
else if (ep->part->effect == EDJE_TEXT_EFFECT_OUTLINE_SHADOW)
{
style = EVAS_TEXT_STYLE_OUTLINE_SHADOW;
evas_object_text_outline_color_set(ep->object,
params->color2.r,
params->color2.g,
params->color2.b,
params->color2.a);
evas_object_text_shadow_color_set(ep->object,
params->color3.r,
params->color3.g,
params->color3.b,
params->color3.a);
}
else if (ep->part->effect == EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW)
{
style = EVAS_TEXT_STYLE_OUTLINE_SOFT_SHADOW;
evas_object_text_outline_color_set(ep->object,
params->color2.r,
params->color2.g,
params->color2.b,
params->color2.a);
evas_object_text_shadow_color_set(ep->object,
params->color3.r,
params->color3.g,
params->color3.b,
params->color3.a);
}
evas_object_text_style_set(ep->object, style);
}
if (free_text)