* edje_calc: Use 20 bytes less per Edje_Calc_Params.

SVN revision: 41745
This commit is contained in:
Cedric BAIL 2009-08-13 16:28:17 +00:00
parent eff22017dc
commit d894444135
2 changed files with 63 additions and 58 deletions

View File

@ -1019,19 +1019,19 @@ _edje_part_recalc_single_fill(Edje_Real_Part *ep,
double m;
int angle;
params->fill.x = desc->gradient.rel1.offset_x + (params->w * desc->gradient.rel1.relative_x);
params->fill.y = desc->gradient.rel1.offset_y + (params->h * desc->gradient.rel1.relative_y);
params->type.common.fill.x = desc->gradient.rel1.offset_x + (params->w * desc->gradient.rel1.relative_x);
params->type.common.fill.y = desc->gradient.rel1.offset_y + (params->h * desc->gradient.rel1.relative_y);
x2 = desc->gradient.rel2.offset_x + (params->w * desc->gradient.rel2.relative_x);
y2 = desc->gradient.rel2.offset_y + (params->h * desc->gradient.rel2.relative_y);
params->fill.w = 1; /* doesn't matter for linear grads */
params->type.common.fill.w = 1; /* doesn't matter for linear grads */
dy = y2 - params->fill.y;
dx = x2 - params->fill.x;
params->fill.h = sqrt(dx * dx + dy * dy);
dy = y2 - params->type.common.fill.y;
dx = x2 - params->type.common.fill.x;
params->type.common.fill.h = sqrt(dx * dx + dy * dy);
params->fill.spread = desc->fill.spread;
params->type.common.fill.spread = desc->fill.spread;
if (dx == 0 && dy == 0)
{
@ -1056,7 +1056,7 @@ _edje_part_recalc_single_fill(Edje_Real_Part *ep,
else
angle = 360 - angle;
}
params->fill.angle = angle;
params->type.common.fill.angle = angle;
}
else
{
@ -1070,8 +1070,8 @@ _edje_part_recalc_single_fill(Edje_Real_Part *ep,
else
fw = params->w;
params->fill.x = desc->fill.pos_abs_x + (fw * desc->fill.pos_rel_x);
params->fill.w = desc->fill.abs_x + (fw * desc->fill.rel_x);
params->type.common.fill.x = desc->fill.pos_abs_x + (fw * desc->fill.pos_rel_x);
params->type.common.fill.w = desc->fill.abs_x + (fw * desc->fill.rel_x);
}
if (flags & FLAG_Y)
{
@ -1081,11 +1081,11 @@ _edje_part_recalc_single_fill(Edje_Real_Part *ep,
else
fh = params->h;
params->fill.y = desc->fill.pos_abs_y + (fh * desc->fill.pos_rel_y);
params->fill.h = desc->fill.abs_y + (fh * desc->fill.rel_y);
params->type.common.fill.y = desc->fill.pos_abs_y + (fh * desc->fill.pos_rel_y);
params->type.common.fill.h = desc->fill.abs_y + (fh * desc->fill.rel_y);
}
params->fill.angle = desc->fill.angle;
params->fill.spread = desc->fill.spread;
params->type.common.fill.angle = desc->fill.angle;
params->type.common.fill.spread = desc->fill.spread;
}
}
@ -1266,18 +1266,18 @@ _edje_part_recalc_single(Edje *ed,
/* border */
if (flags & FLAG_X)
{
params->type.border.l = desc->border.l;
params->type.border.r = desc->border.r;
params->type.common.spec.image.l = desc->border.l;
params->type.common.spec.image.r = desc->border.r;
}
if (flags & FLAG_Y)
{
params->type.border.t = desc->border.t;
params->type.border.b = desc->border.b;
params->type.common.spec.image.t = desc->border.t;
params->type.common.spec.image.b = desc->border.b;
}
break;
case EDJE_PART_TYPE_GRADIENT:
params->type.gradient.id = desc->gradient.id;
params->type.gradient.type = desc->gradient.type;
params->type.common.spec.gradient.id = desc->gradient.id;
params->type.common.spec.gradient.type = desc->gradient.type;
break;
case EDJE_PART_TYPE_TEXT:
case EDJE_PART_TYPE_TEXTBLOCK:
@ -1328,22 +1328,22 @@ _edje_part_recalc_single(Edje *ed,
static void
_edje_gradient_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edje_Part_Description *chosen_desc)
{
evas_object_gradient_fill_angle_set(ep->object, p3->fill.angle);
evas_object_gradient_fill_spread_set(ep->object, p3->fill.spread);
evas_object_gradient_fill_set(ep->object, p3->fill.x, p3->fill.y,
p3->fill.w, p3->fill.h);
evas_object_gradient_fill_angle_set(ep->object, p3->type.common.fill.angle);
evas_object_gradient_fill_spread_set(ep->object, p3->type.common.fill.spread);
evas_object_gradient_fill_set(ep->object, p3->type.common.fill.x, p3->type.common.fill.y,
p3->type.common.fill.w, p3->type.common.fill.h);
if (p3->type.gradient.type && p3->type.gradient.type[0])
evas_object_gradient_type_set(ep->object, p3->type.gradient.type, NULL);
if (p3->type.common.spec.gradient.type && p3->type.common.spec.gradient.type[0])
evas_object_gradient_type_set(ep->object, p3->type.common.spec.gradient.type, NULL);
if (ed->file->spectrum_dir && ed->file->spectrum_dir->entries &&
p3->type.gradient.id != ep->gradient_id)
p3->type.common.spec.gradient.id != ep->gradient_id)
{
Edje_Spectrum_Directory_Entry *se;
Edje_Spectrum_Color *sc;
Eina_List *l;
se = eina_list_nth(ed->file->spectrum_dir->entries, p3->type.gradient.id);
se = eina_list_nth(ed->file->spectrum_dir->entries, p3->type.common.spec.gradient.id);
if (se)
{
evas_object_gradient_clear(ep->object);
@ -1355,7 +1355,7 @@ _edje_gradient_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3,
evas_object_gradient_alpha_stop_add(ep->object,
sc->a, sc->d);
}
ep->gradient_id = p3->type.gradient.id;
ep->gradient_id = p3->type.common.spec.gradient.id;
}
}
}
@ -1416,11 +1416,11 @@ _edje_image_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *p3, Edj
int image_id;
int image_count, image_num;
evas_object_image_fill_set(ep->object, p3->fill.x, p3->fill.y,
p3->fill.w, p3->fill.h);
evas_object_image_fill_set(ep->object, p3->type.common.fill.x, p3->type.common.fill.y,
p3->type.common.fill.w, p3->type.common.fill.h);
evas_object_image_smooth_scale_set(ep->object, p3->smooth);
evas_object_image_border_set(ep->object, p3->type.border.l, p3->type.border.r,
p3->type.border.t, p3->type.border.b);
evas_object_image_border_set(ep->object, p3->type.common.spec.image.l, p3->type.common.spec.image.r,
p3->type.common.spec.image.t, p3->type.common.spec.image.b);
if (chosen_desc->border.no_fill == 0)
evas_object_image_border_center_fill_set(ep->object, EVAS_BORDER_FILL_DEFAULT);
else if (chosen_desc->border.no_fill == 1)
@ -1751,22 +1751,22 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags)
{
case EDJE_PART_TYPE_IMAGE:
case EDJE_PART_TYPE_GRADIENT:
p3->fill.x = INTP(p1->fill.x, p2->fill.x, pos);
p3->fill.y = INTP(p1->fill.y, p2->fill.y, pos);
p3->fill.w = INTP(p1->fill.w, p2->fill.w, pos);
p3->fill.h = INTP(p1->fill.h, p2->fill.h, pos);
p3->type.common.fill.x = INTP(p1->type.common.fill.x, p2->type.common.fill.x, pos);
p3->type.common.fill.y = INTP(p1->type.common.fill.y, p2->type.common.fill.y, pos);
p3->type.common.fill.w = INTP(p1->type.common.fill.w, p2->type.common.fill.w, pos);
p3->type.common.fill.h = INTP(p1->type.common.fill.h, p2->type.common.fill.h, pos);
if (part_type == EDJE_PART_TYPE_GRADIENT)
{
p3->fill.angle = INTP(p1->fill.angle, p2->fill.angle, pos);
p3->fill.spread = (beginning_pos) ? p1->fill.spread : p2->fill.spread;
p3->type.gradient = (beginning_pos) ? p1->type.gradient : p2->type.gradient;
p3->type.common.fill.angle = INTP(p1->type.common.fill.angle, p2->type.common.fill.angle, pos);
p3->type.common.fill.spread = (beginning_pos) ? p1->type.common.fill.spread : p2->type.common.fill.spread;
p3->type.common.spec.gradient = (beginning_pos) ? p1->type.common.spec.gradient : p2->type.common.spec.gradient;
}
else
{
p3->type.border.l = INTP(p1->type.border.l, p2->type.border.l, pos);
p3->type.border.r = INTP(p1->type.border.r, p2->type.border.r, pos);
p3->type.border.t = INTP(p1->type.border.t, p2->type.border.t, pos);
p3->type.border.b = INTP(p1->type.border.b, p2->type.border.b, pos);
p3->type.common.spec.image.l = INTP(p1->type.common.spec.image.l, p2->type.common.spec.image.l, pos);
p3->type.common.spec.image.r = INTP(p1->type.common.spec.image.r, p2->type.common.spec.image.r, pos);
p3->type.common.spec.image.t = INTP(p1->type.common.spec.image.t, p2->type.common.spec.image.t, pos);
p3->type.common.spec.image.b = INTP(p1->type.common.spec.image.b, p2->type.common.spec.image.b, pos);
}
break;
case EDJE_PART_TYPE_TEXT:

View File

@ -735,30 +735,35 @@ struct _Edje_Calc_Params
int x, y, w, h; // 16
Edje_Rectangle req; // 16
Edje_Rectangle req_drag; // 16
struct {
int x, y, w, h; // 16
int angle; // 4
int spread; // 4
} fill;
Edje_Color color; // 4
Edje_Color color; // 4
union {
struct {
int l, r, t, b; // 16
} border; // 16
struct {
int x, y, w, h; // 16
int angle; // 4
int spread; // 4
} fill; // 24
union {
struct {
int l, r, t, b; // 16
} image; // 16
struct {
int id; // 4
char *type; // 4
} gradient; // 8
} spec; // 16
} common; // 40
struct {
Edje_Alignment align; /* text alignment within bounds */ // 16
double elipsis; // 8
int size; // 4
Edje_Color color2, color3; // 8
} text; // 36
struct {
int id; // 4
char *type; // 4
} gradient; // 8
} type; // 36
} type; // 40
unsigned char visible : 1;
unsigned char smooth : 1; // 4
}; // 116
}; // 96
struct _Edje_Real_Part_State
{