}
static void
-_edje_real_part_rel_to_apply(Edje *ed, Edje_Real_Part *ep, Edje_Real_Part_State *state)
+_edje_real_part_rel_to_apply(Edje *ed EINA_UNUSED,
+ Edje_Real_Part *ep,
+ Edje_Real_Part_State *state)
{
- state->rel1_to_x = state->rel1_to_y = NULL;
- state->rel2_to_x = state->rel2_to_y = NULL;
-
if (state->description)
{
- if (state->description->rel1.id_x >= 0)
- state->rel1_to_x = ed->table_parts[state->description->rel1.id_x % ed->table_parts_size];
- if (state->description->rel1.id_y >= 0)
- state->rel1_to_y = ed->table_parts[state->description->rel1.id_y % ed->table_parts_size];
- if (state->description->rel2.id_x >= 0)
- state->rel2_to_x = ed->table_parts[state->description->rel2.id_x % ed->table_parts_size];
- if (state->description->rel2.id_y >= 0)
- state->rel2_to_y = ed->table_parts[state->description->rel2.id_y % ed->table_parts_size];
-
if (ep->part->type == EDJE_PART_TYPE_EXTERNAL)
{
Edje_Part_Description_External *external;
}
#endif
+#define Rel1X 0
+#define Rel1Y 1
+#define Rel2X 2
+#define Rel2Y 3
+
void
_edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *state)
{
Edje_Real_Part *center[2] = { NULL, NULL };
Edje_Real_Part *light[2] = { NULL, NULL };
Edje_Real_Part *persp[2] = { NULL, NULL };
+ Edje_Real_Part *rp1[4] = { NULL, NULL, NULL, NULL };
+ Edje_Real_Part *rp2[4] = { NULL, NULL, NULL, NULL };
Edje_Calc_Params *p1, *pf;
Edje_Part_Description_Common *chosen_desc;
Edje_Real_Part *confine_to = NULL;
if (flags & FLAG_X)
{
ep->calculating |= flags & FLAG_X;
- if (ep->param1.rel1_to_x)
+ if (ep->param1.description->rel1.id_x >= 0)
{
- _edje_part_recalc(ed, ep->param1.rel1_to_x, FLAG_X, NULL);
+ rp1[Rel1X] = ed->table_parts[ep->param1.description->rel1.id_x];
+ _edje_part_recalc(ed, rp1[Rel1X], FLAG_X, NULL);
#ifdef EDJE_CALC_CACHE
- state1 = ep->param1.rel1_to_x->state;
+ state1 = rp1[Rel1X]->state;
#endif
}
- if (ep->param1.rel2_to_x)
+ if (ep->param1.description->rel2.id_x >= 0)
{
- _edje_part_recalc(ed, ep->param1.rel2_to_x, FLAG_X, NULL);
+ rp1[Rel2X] = ed->table_parts[ep->param1.description->rel2.id_x];
+ _edje_part_recalc(ed, rp1[Rel2X], FLAG_X, NULL);
#ifdef EDJE_CALC_CACHE
- if (state1 < ep->param1.rel2_to_x->state)
- state1 = ep->param1.rel2_to_x->state;
+ if (state1 < rp1[Rel2X]->state)
+ state1 = rp1[Rel2X]->state;
#endif
}
if (ep->param2)
{
- if (ep->param2->rel1_to_x)
+ if (ep->param2->description->rel1.id_x >= 0)
{
- _edje_part_recalc(ed, ep->param2->rel1_to_x, FLAG_X, NULL);
+ rp2[Rel1X] = ed->table_parts[ep->param2->description->rel1.id_x];
+ _edje_part_recalc(ed, rp2[Rel1X], FLAG_X, NULL);
#ifdef EDJE_CALC_CACHE
- state2 = ep->param2->rel1_to_x->state;
+ state2 = rp2[Rel1X]->state;
#endif
}
- if (ep->param2->rel2_to_x)
+ if (ep->param2->description->rel2.id_x >= 0)
{
- _edje_part_recalc(ed, ep->param2->rel2_to_x, FLAG_X, NULL);
+ rp2[Rel2X] = ed->table_parts[ep->param2->description->rel2.id_x];
+ _edje_part_recalc(ed, rp2[Rel2X], FLAG_X, NULL);
#ifdef EDJE_CALC_CACHE
- if (state2 < ep->param2->rel2_to_x->state)
- state2 = ep->param2->rel2_to_x->state;
+ if (state2 < rp2[Rel2X]->state)
+ state2 = rp2[Rel2X]->state;
#endif
}
}
if (flags & FLAG_Y)
{
ep->calculating |= flags & FLAG_Y;
- if (ep->param1.rel1_to_y)
+ if (ep->param1.description->rel1.id_y >= 0)
{
- _edje_part_recalc(ed, ep->param1.rel1_to_y, FLAG_Y, NULL);
+ rp1[Rel1Y] = ed->table_parts[ep->param1.description->rel1.id_y];
+ _edje_part_recalc(ed, rp1[Rel1Y], FLAG_Y, NULL);
#ifdef EDJE_CALC_CACHE
- if (state1 < ep->param1.rel1_to_y->state)
- state1 = ep->param1.rel1_to_y->state;
+ if (state1 < rp1[Rel1Y]->state)
+ state1 = rp1[Rel1Y]->state;
#endif
}
- if (ep->param1.rel2_to_y)
+ if (ep->param1.description->rel2.id_y >= 0)
{
- _edje_part_recalc(ed, ep->param1.rel2_to_y, FLAG_Y, NULL);
+ rp1[Rel2Y] = ed->table_parts[ep->param1.description->rel2.id_y];
+ _edje_part_recalc(ed, rp1[Rel2Y], FLAG_Y, NULL);
#ifdef EDJE_CALC_CACHE
- if (state1 < ep->param1.rel2_to_y->state)
- state1 = ep->param1.rel2_to_y->state;
+ if (state1 < rp1[Rel2Y]->state)
+ state1 = rp1[Rel2Y]->state;
#endif
}
if (ep->param2)
{
- if (ep->param2->rel1_to_y)
+ if (ep->param2->description->rel1.id_y >= 0)
{
- _edje_part_recalc(ed, ep->param2->rel1_to_y, FLAG_Y, NULL);
+ rp2[Rel1Y] = ed->table_parts[ep->param2->description->rel1.id_y];
+ _edje_part_recalc(ed, rp2[Rel1Y], FLAG_Y, NULL);
#ifdef EDJE_CALC_CACHE
- if (state2 < ep->param2->rel1_to_y->state)
- state2 = ep->param2->rel1_to_y->state;
+ if (state2 < rp2[Rel1Y]->state)
+ state2 = rp2[Rel1Y]->state;
#endif
}
- if (ep->param2->rel2_to_y)
+ if (ep->param2->description->rel2.id_y >= 0)
{
- _edje_part_recalc(ed, ep->param2->rel2_to_y, FLAG_Y, NULL);
+ rp2[Rel2Y] = ed->table_parts[ep->param2->description->rel2.id_y];
+ _edje_part_recalc(ed, rp2[Rel2Y], FLAG_Y, NULL);
#ifdef EDJE_CALC_CACHE
- if (state2 < ep->param2->rel2_to_y->state)
- state2 = ep->param2->rel2_to_y->state;
+ if (state2 < rp2[Rel2Y]->state)
+ state2 = rp2[Rel2Y]->state;
#endif
}
}
#endif
{
_edje_part_recalc_single(ed, ep, ep->param1.description, chosen_desc, center[0], light[0], persp[0],
- ep->param1.rel1_to_x, ep->param1.rel1_to_y, ep->param1.rel2_to_x, ep->param1.rel2_to_y,
+ rp1[Rel1X], rp1[Rel1Y], rp1[Rel2X], rp1[Rel2Y],
confine_to,
p1, pos);
#ifdef EDJE_CALC_CACHE
_edje_part_recalc_single(ed, ep, ep->param2->description,
chosen_desc,
center[1], light[1], persp[1],
- ep->param2->rel1_to_x,
- ep->param2->rel1_to_y,
- ep->param2->rel2_to_x,
- ep->param2->rel2_to_y,
+ rp2[Rel1X],
+ rp2[Rel1Y],
+ rp2[Rel2X],
+ rp2[Rel2Y],
confine_to,
p2, pos);
#ifdef EDJE_CALC_CACHE