cedric pushed a commit to branch master.

commit 4437235c854de120b4beadbb0328f0f11f763c90
Author: Cedric Bail <[email protected]>
Date:   Mon Apr 8 00:14:50 2013 +0900

    Revert "edje: reuse existing index instead of a direct pointer (-30KB)."
    
    This reverts commit 6a6e6dda68bc91c031e893e62cfeaf8b84253829.
---
 src/lib/edje/edje_calc.c    | 101 +++++++++++++++++++++-----------------------
 src/lib/edje/edje_edit.c    |  21 +++++++++
 src/lib/edje/edje_embryo.c  |  10 +++++
 src/lib/edje/edje_load.c    |   8 ++--
 src/lib/edje/edje_private.h |   4 ++
 5 files changed, 87 insertions(+), 57 deletions(-)

diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 5cfa3ec..b19bfb3 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -495,12 +495,22 @@ _edje_real_part_image_set(Edje *ed, Edje_Real_Part *ep, 
FLOAT_T pos)
 }
 
 static void
-_edje_real_part_rel_to_apply(Edje *ed EINA_UNUSED,
-                            Edje_Real_Part *ep,
-                            Edje_Real_Part_State *state)
+_edje_real_part_rel_to_apply(Edje *ed, 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;
@@ -2725,11 +2735,6 @@ _edje_physics_body_add(Edje *edje, Edje_Real_Part *rp, 
EPhysics_World *world)
 }
 #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)
 {
@@ -2750,8 +2755,6 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
    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;
@@ -2832,40 +2835,36 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
    if (flags & FLAG_X)
      {
         ep->calculating |= flags & FLAG_X;
-        if (ep->param1.description->rel1.id_x >= 0)
+        if (ep->param1.rel1_to_x)
           {
-            rp1[Rel1X] = ed->table_parts[ep->param1.description->rel1.id_x];
-             _edje_part_recalc(ed, rp1[Rel1X], FLAG_X, NULL);
+             _edje_part_recalc(ed, ep->param1.rel1_to_x, FLAG_X, NULL);
 #ifdef EDJE_CALC_CACHE
-             state1 = rp1[Rel1X]->state;
+             state1 = ep->param1.rel1_to_x->state;
 #endif
           }
-        if (ep->param1.description->rel2.id_x >= 0)
+        if (ep->param1.rel2_to_x)
           {
-            rp1[Rel2X] = ed->table_parts[ep->param1.description->rel2.id_x];
-             _edje_part_recalc(ed, rp1[Rel2X], FLAG_X, NULL);
+             _edje_part_recalc(ed, ep->param1.rel2_to_x, FLAG_X, NULL);
 #ifdef EDJE_CALC_CACHE
-             if (state1 < rp1[Rel2X]->state)
-               state1 = rp1[Rel2X]->state;
+             if (state1 < ep->param1.rel2_to_x->state)
+               state1 = ep->param1.rel2_to_x->state;
 #endif
           }
         if (ep->param2)
           {
-             if (ep->param2->description->rel1.id_x >= 0)
+             if (ep->param2->rel1_to_x)
                {
-                 rp2[Rel1X] = 
ed->table_parts[ep->param2->description->rel1.id_x];
-                  _edje_part_recalc(ed, rp2[Rel1X], FLAG_X, NULL);
+                  _edje_part_recalc(ed, ep->param2->rel1_to_x, FLAG_X, NULL);
 #ifdef EDJE_CALC_CACHE
-                  state2 = rp2[Rel1X]->state;
+                  state2 = ep->param2->rel1_to_x->state;
 #endif
                }
-             if (ep->param2->description->rel2.id_x >= 0)
+             if (ep->param2->rel2_to_x)
                {
-                 rp2[Rel2X] = 
ed->table_parts[ep->param2->description->rel2.id_x];
-                  _edje_part_recalc(ed, rp2[Rel2X], FLAG_X, NULL);
+                  _edje_part_recalc(ed, ep->param2->rel2_to_x, FLAG_X, NULL);
 #ifdef EDJE_CALC_CACHE
-                  if (state2 < rp2[Rel2X]->state)
-                    state2 = rp2[Rel2X]->state;
+                  if (state2 < ep->param2->rel2_to_x->state)
+                    state2 = ep->param2->rel2_to_x->state;
 #endif
                }
           }
@@ -2873,42 +2872,38 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
    if (flags & FLAG_Y)
      {
         ep->calculating |= flags & FLAG_Y;
-        if (ep->param1.description->rel1.id_y >= 0)
+        if (ep->param1.rel1_to_y)
           {
-            rp1[Rel1Y] = ed->table_parts[ep->param1.description->rel1.id_y];
-             _edje_part_recalc(ed, rp1[Rel1Y], FLAG_Y, NULL);
+             _edje_part_recalc(ed, ep->param1.rel1_to_y, FLAG_Y, NULL);
 #ifdef EDJE_CALC_CACHE
-             if (state1 < rp1[Rel1Y]->state)
-               state1 = rp1[Rel1Y]->state;
+             if (state1 < ep->param1.rel1_to_y->state)
+               state1 = ep->param1.rel1_to_y->state;
 #endif
           }
-        if (ep->param1.description->rel2.id_y >= 0)
+        if (ep->param1.rel2_to_y)
           {
-           rp1[Rel2Y] = ed->table_parts[ep->param1.description->rel2.id_y];
-             _edje_part_recalc(ed, rp1[Rel2Y], FLAG_Y, NULL);
+             _edje_part_recalc(ed, ep->param1.rel2_to_y, FLAG_Y, NULL);
 #ifdef EDJE_CALC_CACHE
-             if (state1 < rp1[Rel2Y]->state)
-               state1 = rp1[Rel2Y]->state;
+             if (state1 < ep->param1.rel2_to_y->state)
+               state1 = ep->param1.rel2_to_y->state;
 #endif
           }
         if (ep->param2)
           {
-             if (ep->param2->description->rel1.id_y >= 0)
+             if (ep->param2->rel1_to_y)
                {
-                 rp2[Rel1Y] = 
ed->table_parts[ep->param2->description->rel1.id_y];
-                  _edje_part_recalc(ed, rp2[Rel1Y], FLAG_Y, NULL);
+                  _edje_part_recalc(ed, ep->param2->rel1_to_y, FLAG_Y, NULL);
 #ifdef EDJE_CALC_CACHE
-                  if (state2 < rp2[Rel1Y]->state)
-                    state2 = rp2[Rel1Y]->state;
+                  if (state2 < ep->param2->rel1_to_y->state)
+                    state2 = ep->param2->rel1_to_y->state;
 #endif
                }
-             if (ep->param2->description->rel2.id_y >= 0)
+             if (ep->param2->rel2_to_y)
                {
-                 rp2[Rel2Y] = 
ed->table_parts[ep->param2->description->rel2.id_y];
-                  _edje_part_recalc(ed, rp2[Rel2Y], FLAG_Y, NULL);
+                  _edje_part_recalc(ed, ep->param2->rel2_to_y, FLAG_Y, NULL);
 #ifdef EDJE_CALC_CACHE
-                  if (state2 < rp2[Rel2Y]->state)
-                    state2 = rp2[Rel2Y]->state;
+                  if (state2 < ep->param2->rel2_to_y->state)
+                    state2 = ep->param2->rel2_to_y->state;
 #endif
                }
           }
@@ -3002,7 +2997,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
 #endif
           {
              _edje_part_recalc_single(ed, ep, ep->param1.description, 
chosen_desc, center[0], light[0], persp[0],
-                                      rp1[Rel1X], rp1[Rel1Y], rp1[Rel2X], 
rp1[Rel2Y],
+                                      ep->param1.rel1_to_x, 
ep->param1.rel1_to_y, ep->param1.rel2_to_x, ep->param1.rel2_to_y,
                                       confine_to,
                                       p1, pos);
 #ifdef EDJE_CALC_CACHE
@@ -3068,10 +3063,10 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
              _edje_part_recalc_single(ed, ep, ep->param2->description,
                                       chosen_desc,
                                       center[1], light[1], persp[1],
-                                      rp2[Rel1X],
-                                      rp2[Rel1Y],
-                                      rp2[Rel2X],
-                                      rp2[Rel2Y],
+                                      ep->param2->rel1_to_x,
+                                      ep->param2->rel1_to_y,
+                                      ep->param2->rel2_to_x,
+                                      ep->param2->rel2_to_y,
                                       confine_to,
                                       p2, pos);
 #ifdef EDJE_CALC_CACHE
diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c
index d306689..a1c7e4d 100644
--- a/src/lib/edje/edje_edit.c
+++ b/src/lib/edje/edje_edit.c
@@ -2205,6 +2205,27 @@ edje_edit_part_del(Evas_Object *obj, const char* part)
        if (real->typedata.text->source == rp) real->typedata.text->source = 
NULL;
        if (real->typedata.text->text_source == rp) 
real->typedata.text->text_source = NULL;
 
+       if (real->param1.rel1_to_x == rp) real->param1.rel1_to_x = NULL;
+       if (real->param1.rel1_to_y == rp) real->param1.rel1_to_y = NULL;
+       if (real->param1.rel2_to_x == rp) real->param1.rel2_to_x = NULL;
+       if (real->param1.rel2_to_y == rp) real->param1.rel2_to_y = NULL;
+
+       if (real->param2)
+         {
+            if (real->param2->rel1_to_x == rp) real->param2->rel1_to_x = NULL;
+            if (real->param2->rel1_to_y == rp) real->param2->rel1_to_y = NULL;
+            if (real->param2->rel2_to_x == rp) real->param2->rel2_to_x = NULL;
+            if (real->param2->rel2_to_y == rp) real->param2->rel2_to_y = NULL;
+         }
+
+       if (real->custom)
+         {
+            if (real->custom->rel1_to_x == rp) real->custom->rel1_to_x = NULL;
+            if (real->custom->rel1_to_y == rp) real->custom->rel1_to_y = NULL;
+            if (real->custom->rel2_to_x == rp) real->custom->rel2_to_x = NULL;
+            if (real->custom->rel2_to_y == rp) real->custom->rel2_to_y = NULL;
+         }
+
        if (real->part->clip_to_id == rp->part->id)
          {
             evas_object_clip_set(real->object, ed->base->clipper);
diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c
index 24b9a3a..8282b9a 100644
--- a/src/lib/edje/edje_embryo.c
+++ b/src/lib/edje/edje_embryo.c
@@ -1950,6 +1950,11 @@ _edje_embryo_fn_set_state_val(Embryo_Program *ep, 
Embryo_Cell *params)
         GETINT(rp->custom->description->rel1.id_x, params[3]);
         GETINT(rp->custom->description->rel1.id_y, params[4]);
 
+        if (rp->param1.description->rel1.id_x >= 0)
+          rp->param1.rel1_to_x = 
ed->table_parts[rp->param1.description->rel1.id_x % ed->table_parts_size];
+        if (rp->param1.description->rel1.id_y >= 0)
+          rp->param1.rel1_to_y = 
ed->table_parts[rp->param1.description->rel1.id_y % ed->table_parts_size];
+
         break;
       case EDJE_STATE_PARAM_REL1_OFFSET:
         CHKPARAM(4);
@@ -1971,6 +1976,11 @@ _edje_embryo_fn_set_state_val(Embryo_Program *ep, 
Embryo_Cell *params)
         GETINT(rp->custom->description->rel2.id_x, params[3]);
         GETINT(rp->custom->description->rel2.id_y, params[4]);
 
+        if (rp->param1.description->rel2.id_x >= 0)
+          rp->param1.rel2_to_x = 
ed->table_parts[rp->param1.description->rel2.id_x % ed->table_parts_size];
+        if (rp->param1.description->rel2.id_y >= 0)
+          rp->param1.rel2_to_y = 
ed->table_parts[rp->param1.description->rel2.id_y % ed->table_parts_size];
+
         break;
       case EDJE_STATE_PARAM_REL2_OFFSET:
         CHKPARAM(4);
diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index 809afed..ed0d00f 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -662,13 +662,13 @@ _edje_object_file_set_internal(Evas_Object *obj, const 
char *file, const char *g
                                                      be able to remove this 
when all theme are correctly rewritten. */
                         {
                            if (rp->param1.description->rel1.id_x >= 0)
-                             rp->param1.description->rel1.id_x %= 
ed->table_parts_size;
+                             rp->param1.rel1_to_x = 
ed->table_parts[rp->param1.description->rel1.id_x % ed->table_parts_size];
                            if (rp->param1.description->rel1.id_y >= 0)
-                             rp->param1.description->rel1.id_y %= 
ed->table_parts_size;
+                             rp->param1.rel1_to_y = 
ed->table_parts[rp->param1.description->rel1.id_y % ed->table_parts_size];
                            if (rp->param1.description->rel2.id_x >= 0)
-                             rp->param1.description->rel2.id_x %= 
ed->table_parts_size;
+                             rp->param1.rel2_to_x = 
ed->table_parts[rp->param1.description->rel2.id_x % ed->table_parts_size];
                            if (rp->param1.description->rel2.id_y >= 0)
-                             rp->param1.description->rel2.id_y %= 
ed->table_parts_size;
+                             rp->param1.rel2_to_y = 
ed->table_parts[rp->param1.description->rel2.id_y % ed->table_parts_size];
                         }
                       if (rp->part->clip_to_id >= 0)
                         {
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index 978be07..e16e25e 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -1442,6 +1442,10 @@ struct _Edje_Real_Part_State
 {
    Edje_Part_Description_Common *description; // 4
    Edje_Part_Description_Common *description_rtl; // 4
+   Edje_Real_Part        *rel1_to_x; // 4
+   Edje_Real_Part        *rel1_to_y; // 4
+   Edje_Real_Part        *rel2_to_x; // 4
+   Edje_Real_Part        *rel2_to_y; // 4
 #ifdef EDJE_CALC_CACHE
    int                    state; // 4
    Edje_Calc_Params       p; // 271

-- 

------------------------------------------------------------------------------
Minimize network downtime and maximize team effectiveness.
Reduce network management and security costs.Learn how to hire 
the most talented Cisco Certified professionals. Visit the 
Employer Resources Portal
http://www.cisco.com/web/learning/employer_resources/index.html

Reply via email to