cedric pushed a commit to branch master.

commit c78f4d7bfae96bf1751a0ac110fdf1b73c7b9d6a
Author: Cedric BAIL <[email protected]>
Date:   Wed Mar 13 14:30:21 2013 +0900

    edje: use Eina_Cow for physics and map Edje_Real_Part_State.
    
    This reduce memory used per Edje_Part description by 2 on my tests.
---
 src/lib/edje/edje_calc.c    | 538 ++++++++++++++++++++++++--------------------
 src/lib/edje/edje_embryo.c  |   5 +
 src/lib/edje/edje_load.c    |  25 +-
 src/lib/edje/edje_main.c    |  24 +-
 src/lib/edje/edje_private.h | 123 +++++-----
 src/lib/edje/edje_program.c |  36 +--
 6 files changed, 431 insertions(+), 320 deletions(-)

diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 5fc28ab..40a7f0d 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -11,6 +11,18 @@ static void _edje_part_recalc_single(Edje *ed, 
Edje_Real_Part *ep,
                                      Edje_Real_Part *confine_to, 
Edje_Calc_Params *params,
                                      FLOAT_T pos);
 
+#define EINA_COW_CALC_PHYSICS_BEGIN(Calc, Write)       \
+  EINA_COW_WRITE_BEGIN(_edje_calc_params_physics_cow, Calc->physics, 
Edje_Calc_Params_Physics, Write)
+
+#define EINA_COW_CALC_PHYSICS_END(Calc, Write) \
+  EINA_COW_WRITE_END(_edje_calc_params_physics_cow, Calc->physics, Write)
+
+#define EINA_COW_CALC_MAP_BEGIN(Calc, Write)   \
+  EINA_COW_WRITE_BEGIN(_edje_calc_params_map_cow, Calc->map, 
Edje_Calc_Params_Map, Write)
+
+#define EINA_COW_CALC_MAP_END(Calc, Write)     \
+  EINA_COW_WRITE_END(_edje_calc_params_map_cow, Calc->map, Write);
+
 void
 _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, FLOAT_T pos, 
FLOAT_T v1, FLOAT_T v2)
 {
@@ -543,6 +555,10 @@ _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, 
const char *d1, doubl
              ep->param2 = eina_mempool_malloc(_edje_real_part_state_mp,
                                               sizeof(Edje_Real_Part_State));
              memset(ep->param2, 0, sizeof(Edje_Real_Part_State));
+            ep->param2->p.map = eina_cow_alloc(_edje_calc_params_map_cow);
+#ifdef HAVE_EPHYSICS
+            ep->param2->p.physics = 
eina_cow_alloc(_edje_calc_params_physics_cow);
+#endif
           }
         else if (ep->part->type == EDJE_PART_TYPE_EXTERNAL)
           {
@@ -564,7 +580,13 @@ _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, 
const char *d1, doubl
                                                    
ep->param2->external_params);
             }
           if (ep->param2)
-            free(ep->param2->set);
+           {
+             free(ep->param2->set);
+             eina_cow_free(_edje_calc_params_map_cow, ep->param2->p.map);
+#ifdef HAVE_EPHYSICS
+             eina_cow_free(_edje_calc_params_physics_cow, 
ep->param2->p.physics);
+#endif
+           }
           eina_mempool_free(_edje_real_part_state_mp, ep->param2);
           ep->param2 = NULL;
        }
@@ -2062,89 +2084,93 @@ _edje_part_recalc_single_map(Edje *ed,
 
    if (!params->mapped) return ;
 
-   if (center)
-     {
-        params->map.center.x = ed->x + center->x + (center->w / 2);
-        params->map.center.y = ed->y + center->y + (center->h / 2);
-     }
-   else
+   EINA_COW_CALC_MAP_BEGIN(params, params_write)
      {
-        params->map.center.x = ed->x + params->x + (params->w / 2);
-        params->map.center.y = ed->y + params->y + (params->h / 2);
-     }
-   params->map.center.z = 0;
-
-   params->map.rotation.x = desc->map.rot.x;
-   params->map.rotation.y = desc->map.rot.y;
-   params->map.rotation.z = desc->map.rot.z;
-
-   if (light)
-     {
-        Edje_Part_Description_Common *light_desc2;
-        FLOAT_T pos, pos2;
-
-        params->map.light.x = ed->x + light->x + (light->w / 2);
-        params->map.light.y = ed->y + light->y + (light->h / 2);
-
-        pos = light->description_pos;
-        pos2 = (pos < ZERO) ? ZERO : ((pos > FROM_INT(1)) ? FROM_INT(1) : pos);
-
-        light_desc2 = light->param2 ? light->param2->description : NULL;
-
-        /* take into account CURRENT state also */
-        if (pos != ZERO && light_desc2)
+        if (center)
           {
-             params->map.light.z = light->param1.description->persp.zplane +
-               TO_INT(SCALE(pos, light_desc2->persp.zplane - 
light->param1.description->persp.zplane));
-             params->map.light.r = light->param1.description->color.r +
-               TO_INT(SCALE(pos2, light_desc2->color.r - 
light->param1.description->color.r));
-             params->map.light.g = light->param1.description->color.g +
-               TO_INT(SCALE(pos2, light_desc2->color.g - 
light->param1.description->color.g));
-             params->map.light.b = light->param1.description->color.b +
-               TO_INT(SCALE(pos2, light_desc2->color.b - 
light->param1.description->color.b));
-             params->map.light.ar = light->param1.description->color2.r +
-               TO_INT(SCALE(pos2, light_desc2->color2.r - 
light->param1.description->color2.r));
-             params->map.light.ag = light->param1.description->color2.g +
-               TO_INT(SCALE(pos2, light_desc2->color2.g - 
light->param1.description->color2.g));
-             params->map.light.ab = light->param1.description->color2.b +
-               TO_INT(SCALE(pos2, light_desc2->color2.b - 
light->param1.description->color2.b));
+             params_write->center.x = ed->x + center->x + (center->w / 2);
+             params_write->center.y = ed->y + center->y + (center->h / 2);
           }
         else
           {
-             params->map.light.z = light->param1.description->persp.zplane;
-             params->map.light.r = light->param1.description->color.r;
-             params->map.light.g = light->param1.description->color.g;
-             params->map.light.b = light->param1.description->color.b;
-             params->map.light.ar = light->param1.description->color2.r;
-             params->map.light.ag = light->param1.description->color2.g;
-             params->map.light.ab = light->param1.description->color2.b;
+             params_write->center.x = ed->x + params->x + (params->w / 2);
+             params_write->center.y = ed->y + params->y + (params->h / 2);
           }
-     }
+        params_write->center.z = 0;
 
-   if (persp)
-     {
-        FLOAT_T pos;
+        params_write->rotation.x = desc->map.rot.x;
+        params_write->rotation.y = desc->map.rot.y;
+        params_write->rotation.z = desc->map.rot.z;
 
-        params->map.persp.x = ed->x + persp->x + (persp->w / 2);
-        params->map.persp.y = ed->y + persp->y + (persp->h / 2);
+        if (light)
+          {
+             Edje_Part_Description_Common *light_desc2;
+             FLOAT_T pos, pos2;
 
-        pos = persp->description_pos;
+             params_write->light.x = ed->x + light->x + (light->w / 2);
+             params_write->light.y = ed->y + light->y + (light->h / 2);
 
-        if (pos != 0 && persp->param2)
-          {
-             params->map.persp.z = persp->param1.description->persp.zplane +
-               TO_INT(SCALE(pos, persp->param2->description->persp.zplane -
-                            persp->param1.description->persp.zplane));
-             params->map.persp.focal = persp->param1.description->persp.focal +
-               TO_INT(SCALE(pos, persp->param2->description->persp.focal -
-                            persp->param1.description->persp.focal));
+             pos = light->description_pos;
+             pos2 = (pos < ZERO) ? ZERO : ((pos > FROM_INT(1)) ? FROM_INT(1) : 
pos);
+
+             light_desc2 = light->param2 ? light->param2->description : NULL;
+
+             /* take into account CURRENT state also */
+             if (pos != ZERO && light_desc2)
+               {
+                  params_write->light.z = 
light->param1.description->persp.zplane +
+                    TO_INT(SCALE(pos, light_desc2->persp.zplane - 
light->param1.description->persp.zplane));
+                  params_write->light.r = light->param1.description->color.r +
+                    TO_INT(SCALE(pos2, light_desc2->color.r - 
light->param1.description->color.r));
+                  params_write->light.g = light->param1.description->color.g +
+                    TO_INT(SCALE(pos2, light_desc2->color.g - 
light->param1.description->color.g));
+                  params_write->light.b = light->param1.description->color.b +
+                    TO_INT(SCALE(pos2, light_desc2->color.b - 
light->param1.description->color.b));
+                  params_write->light.ar = light->param1.description->color2.r 
+
+                    TO_INT(SCALE(pos2, light_desc2->color2.r - 
light->param1.description->color2.r));
+                  params_write->light.ag = light->param1.description->color2.g 
+
+                    TO_INT(SCALE(pos2, light_desc2->color2.g - 
light->param1.description->color2.g));
+                  params_write->light.ab = light->param1.description->color2.b 
+
+                    TO_INT(SCALE(pos2, light_desc2->color2.b - 
light->param1.description->color2.b));
+               }
+             else
+               {
+                  params_write->light.z = 
light->param1.description->persp.zplane;
+                  params_write->light.r = light->param1.description->color.r;
+                  params_write->light.g = light->param1.description->color.g;
+                  params_write->light.b = light->param1.description->color.b;
+                  params_write->light.ar = light->param1.description->color2.r;
+                  params_write->light.ag = light->param1.description->color2.g;
+                  params_write->light.ab = light->param1.description->color2.b;
+               }
           }
-        else
+
+        if (persp)
           {
-             params->map.persp.z = persp->param1.description->persp.zplane;
-             params->map.persp.focal = persp->param1.description->persp.focal;
+             FLOAT_T pos;
+
+             params_write->persp.x = ed->x + persp->x + (persp->w / 2);
+             params_write->persp.y = ed->y + persp->y + (persp->h / 2);
+
+             pos = persp->description_pos;
+
+             if (pos != 0 && persp->param2)
+               {
+                  params_write->persp.z = 
persp->param1.description->persp.zplane +
+                    TO_INT(SCALE(pos, persp->param2->description->persp.zplane 
-
+                                 persp->param1.description->persp.zplane));
+                  params_write->persp.focal = 
persp->param1.description->persp.focal +
+                    TO_INT(SCALE(pos, persp->param2->description->persp.focal -
+                                 persp->param1.description->persp.focal));
+               }
+             else
+               {
+                  params_write->persp.z = 
persp->param1.description->persp.zplane;
+                  params_write->persp.focal = 
persp->param1.description->persp.focal;
+               }
           }
      }
+   EINA_COW_CALC_MAP_END(params, params_write);
 }
 
 static void
@@ -2364,27 +2390,34 @@ _edje_part_recalc_single(Edje *ed,
      }
 
 #ifdef HAVE_EPHYSICS
-   params->physics.mass = desc->physics.mass;
-   params->physics.restitution = desc->physics.restitution;
-   params->physics.friction = desc->physics.friction;
-   params->physics.damping.linear = desc->physics.damping.linear;
-   params->physics.damping.angular = desc->physics.damping.angular;
-   params->physics.sleep.linear = desc->physics.sleep.linear;
-   params->physics.sleep.angular = desc->physics.sleep.angular;
-   params->physics.material = desc->physics.material;
-   params->physics.density = desc->physics.density;
-   params->physics.hardness = desc->physics.hardness;
-   params->physics.ignore_part_pos = desc->physics.ignore_part_pos;
-   params->physics.light_on = desc->physics.light_on;
-   params->physics.mov_freedom.lin.x = desc->physics.mov_freedom.lin.x;
-   params->physics.mov_freedom.lin.y = desc->physics.mov_freedom.lin.y;
-   params->physics.mov_freedom.lin.z = desc->physics.mov_freedom.lin.z;
-   params->physics.mov_freedom.ang.x = desc->physics.mov_freedom.ang.x;
-   params->physics.mov_freedom.ang.y = desc->physics.mov_freedom.ang.y;
-   params->physics.mov_freedom.ang.z = desc->physics.mov_freedom.ang.z;
-   params->physics.backcull = desc->physics.backcull;
-   params->physics.z = desc->physics.z;
-   params->physics.depth = desc->physics.depth;
+   if (ep->part->physics_body || ep->body)
+     {
+        EINA_COW_CALC_PHYSICS_BEGIN(params, params_write)
+          {
+             params_write->mass = desc->physics.mass;
+             params_write->restitution = desc->physics.restitution;
+             params_write->friction = desc->physics.friction;
+             params_write->damping.linear = desc->physics.damping.linear;
+             params_write->damping.angular = desc->physics.damping.angular;
+             params_write->sleep.linear = desc->physics.sleep.linear;
+             params_write->sleep.angular = desc->physics.sleep.angular;
+             params_write->material = desc->physics.material;
+             params_write->density = desc->physics.density;
+             params_write->hardness = desc->physics.hardness;
+             params_write->ignore_part_pos = desc->physics.ignore_part_pos;
+             params_write->light_on = desc->physics.light_on;
+             params_write->mov_freedom.lin.x = desc->physics.mov_freedom.lin.x;
+             params_write->mov_freedom.lin.y = desc->physics.mov_freedom.lin.y;
+             params_write->mov_freedom.lin.z = desc->physics.mov_freedom.lin.z;
+             params_write->mov_freedom.ang.x = desc->physics.mov_freedom.ang.x;
+             params_write->mov_freedom.ang.y = desc->physics.mov_freedom.ang.y;
+             params_write->mov_freedom.ang.z = desc->physics.mov_freedom.ang.z;
+             params_write->backcull = desc->physics.backcull;
+             params_write->z = desc->physics.z;
+             params_write->depth = desc->physics.depth;
+          }
+        EINA_COW_CALC_PHYSICS_END(params, params_write);
+     }
 #endif
    _edje_part_recalc_single_map(ed, ep, center, light, persp, desc, 
chosen_desc, params);
 }
@@ -2542,13 +2575,13 @@ static void
 _edje_physics_body_props_update(Edje_Real_Part *ep, Edje_Calc_Params *pf, 
Eina_Bool pos_update)
 {
    ephysics_body_linear_movement_enable_set(ep->body,
-                                            pf->physics.mov_freedom.lin.x,
-                                            pf->physics.mov_freedom.lin.y,
-                                            pf->physics.mov_freedom.lin.z);
+                                            pf->physics->mov_freedom.lin.x,
+                                            pf->physics->mov_freedom.lin.y,
+                                            pf->physics->mov_freedom.lin.z);
    ephysics_body_angular_movement_enable_set(ep->body,
-                                             pf->physics.mov_freedom.ang.x,
-                                             pf->physics.mov_freedom.ang.y,
-                                             pf->physics.mov_freedom.ang.z);
+                                             pf->physics->mov_freedom.ang.x,
+                                             pf->physics->mov_freedom.ang.y,
+                                             pf->physics->mov_freedom.ang.z);
 
    /* Boundaries geometry and mass shouldn't be changed */
    if (ep->part->physics_body < EDJE_PART_PHYSICS_BODY_BOUNDARY_TOP)
@@ -2558,7 +2591,7 @@ _edje_physics_body_props_update(Edje_Real_Part *ep, 
Edje_Calc_Params *pf, Eina_B
         if (pos_update)
           {
              ephysics_body_move(ep->body, ep->edje->x + pf->x,
-                                ep->edje->y + pf->y, pf->physics.z);
+                                ep->edje->y + pf->y, pf->physics->z);
              ep->x = pf->x;
              ep->y = pf->y;
              ep->w = pf->w;
@@ -2566,18 +2599,18 @@ _edje_physics_body_props_update(Edje_Real_Part *ep, 
Edje_Calc_Params *pf, Eina_B
           }
 
         ephysics_body_geometry_get(ep->body, &x, &y, &z, &w, &h, &d);
-        if ((d) && (d != pf->physics.depth))
-          ephysics_body_resize(ep->body, w, h, pf->physics.depth);
-        if (z != pf->physics.z)
-          ephysics_body_move(ep->body, x, y, pf->physics.z);
+        if ((d) && (d != pf->physics->depth))
+          ephysics_body_resize(ep->body, w, h, pf->physics->depth);
+        if (z != pf->physics->z)
+          ephysics_body_move(ep->body, x, y, pf->physics->z);
 
-        ephysics_body_material_set(ep->body, pf->physics.material);
-        if (!pf->physics.material)
+        ephysics_body_material_set(ep->body, pf->physics->material);
+        if (!pf->physics->material)
           {
-             if (pf->physics.density)
-               ephysics_body_density_set(ep->body, pf->physics.density);
+             if (pf->physics->density)
+               ephysics_body_density_set(ep->body, pf->physics->density);
              else
-               ephysics_body_mass_set(ep->body, pf->physics.mass);
+               ephysics_body_mass_set(ep->body, pf->physics->mass);
           }
 
         if ((ep->part->physics_body == EDJE_PART_PHYSICS_BODY_SOFT_BOX) ||
@@ -2585,21 +2618,21 @@ _edje_physics_body_props_update(Edje_Real_Part *ep, 
Edje_Calc_Params *pf, Eina_B
             (ep->part->physics_body == EDJE_PART_PHYSICS_BODY_SOFT_CYLINDER) ||
             (ep->part->physics_body == EDJE_PART_PHYSICS_BODY_CLOTH))
           ephysics_body_soft_body_hardness_set(ep->body,
-                                               pf->physics.hardness * 100);
+                                               pf->physics->hardness * 100);
      }
 
-   if (!pf->physics.material)
+   if (!pf->physics->material)
      {
-        ephysics_body_restitution_set(ep->body, pf->physics.restitution);
-        ephysics_body_friction_set(ep->body, pf->physics.friction);
+        ephysics_body_restitution_set(ep->body, pf->physics->restitution);
+        ephysics_body_friction_set(ep->body, pf->physics->friction);
      }
 
-   ephysics_body_damping_set(ep->body, pf->physics.damping.linear,
-                             pf->physics.damping.angular);
-   ephysics_body_sleeping_threshold_set(ep->body, pf->physics.sleep.linear,
-                                        pf->physics.sleep.angular);
-   ephysics_body_light_set(ep->body, pf->physics.light_on);
-   ephysics_body_back_face_culling_set(ep->body, pf->physics.backcull);
+   ephysics_body_damping_set(ep->body, pf->physics->damping.linear,
+                             pf->physics->damping.angular);
+   ephysics_body_sleeping_threshold_set(ep->body, pf->physics->sleep.linear,
+                                        pf->physics->sleep.angular);
+   ephysics_body_light_set(ep->body, pf->physics->light_on);
+   ephysics_body_back_face_culling_set(ep->body, pf->physics->backcull);
 }
 
 static void
@@ -2973,12 +3006,16 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
              memcpy(p1, ep->current, sizeof (Edje_Calc_Params));
              p1->x += ed->x;
              p1->y += ed->y;
-             p1->map.center.x += ed->x;
-             p1->map.center.y += ed->y;
-             p1->map.light.x += ed->x;
-             p1->map.light.y += ed->y;
-             p1->map.persp.x += ed->x;
-             p1->map.persp.y += ed->y;
+            EINA_COW_CALC_MAP_BEGIN(p1, p1_write) // FIXME: this will force an 
allocation on p1
+              {
+                p1_write->center.x += ed->x;
+                p1_write->center.y += ed->y;
+                p1_write->light.x += ed->x;
+                p1_write->light.y += ed->y;
+                p1_write->persp.x += ed->x;
+                p1_write->persp.y += ed->y;
+              }
+            EINA_COW_CALC_MAP_END(p1, p1_write);
           }
 
         p3 = &lp3;
@@ -3072,56 +3109,63 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
         p3->color.a = INTP(p1->color.a, p2->color.a, pos2);
 
 #ifdef HAVE_EPHYSICS
-        p3->physics.mass = TO_DOUBLE(FINTP(p1->physics.mass, p2->physics.mass,
-                                         pos));
-        p3->physics.restitution = TO_DOUBLE(FINTP(p1->physics.restitution,
-                                                  p2->physics.restitution,
-                                                  pos));
-        p3->physics.friction = TO_DOUBLE(FINTP(p1->physics.friction,
-                                               p2->physics.friction, pos));
-        p3->physics.density = TO_DOUBLE(FINTP(p1->physics.density,
-                                              p2->physics.density, pos));
-        p3->physics.hardness = TO_DOUBLE(FINTP(p1->physics.hardness,
-                                               p2->physics.hardness, pos));
-
-        p3->physics.damping.linear = TO_DOUBLE(FINTP(
-              p1->physics.damping.linear, p2->physics.damping.linear, pos));
-        p3->physics.damping.angular = TO_DOUBLE(FINTP(
-              p1->physics.damping.angular, p2->physics.damping.angular, pos));
-
-        p3->physics.sleep.linear = TO_DOUBLE(FINTP(
-              p1->physics.sleep.linear, p2->physics.sleep.linear, pos));
-        p3->physics.sleep.angular = TO_DOUBLE(FINTP(
-              p1->physics.sleep.angular, p2->physics.sleep.angular, pos));
-
-        p3->physics.z = INTP(p1->physics.z, p2->physics.z, pos);
-        p3->physics.depth = INTP(p1->physics.depth, p2->physics.depth, pos);
-
-        if ((p1->physics.ignore_part_pos) && (p2->physics.ignore_part_pos))
-          p3->physics.ignore_part_pos = 1;
-        else
-          p3->physics.ignore_part_pos = 0;
+        if (ep->part->physics_body || ep->body)
+          {
+             EINA_COW_CALC_PHYSICS_BEGIN(p3, p3_write)
+               {
+                  p3_write->mass = TO_DOUBLE(FINTP(p1->physics->mass, 
p2->physics->mass,
+                                                   pos));
+                  p3_write->restitution = 
TO_DOUBLE(FINTP(p1->physics->restitution,
+                                                          
p2->physics->restitution,
+                                                          pos));
+                  p3_write->friction = TO_DOUBLE(FINTP(p1->physics->friction,
+                                                       p2->physics->friction, 
pos));
+                  p3_write->density = TO_DOUBLE(FINTP(p1->physics->density,
+                                                      p2->physics->density, 
pos));
+                  p3_write->hardness = TO_DOUBLE(FINTP(p1->physics->hardness,
+                                                       p2->physics->hardness, 
pos));
+
+                  p3_write->damping.linear = 
TO_DOUBLE(FINTP(p1->physics->damping.linear,
+                                                             
p2->physics->damping.linear, pos));
+                  p3_write->damping.angular = 
TO_DOUBLE(FINTP(p1->physics->damping.angular,
+                                                              
p2->physics->damping.angular, pos));
+
+                  p3_write->sleep.linear = 
TO_DOUBLE(FINTP(p1->physics->sleep.linear,
+                                                           
p2->physics->sleep.linear, pos));
+                  p3_write->sleep.angular = 
TO_DOUBLE(FINTP(p1->physics->sleep.angular,
+                                                            
p2->physics->sleep.angular, pos));
+
+                  p3_write->z = INTP(p1->physics->z, p2->physics->z, pos);
+                  p3_write->depth = INTP(p1->physics->depth, 
p2->physics->depth, pos);
+
+                  if ((p1->physics->ignore_part_pos) && 
(p2->physics->ignore_part_pos))
+                    p3_write->ignore_part_pos = 1;
+                  else
+                    p3_write->ignore_part_pos = 0;
 
-        if ((p1->physics.material) && (p2->physics.material))
-          p3->physics.material = p1->physics.material;
-        else
-          p3->physics.material = EPHYSICS_BODY_MATERIAL_CUSTOM;
-
-        p3->physics.light_on = p1->physics.light_on || p2->physics.light_on;
-        p3->physics.backcull = p1->physics.backcull || p2->physics.backcull;
-
-        p3->physics.mov_freedom.lin.x = p1->physics.mov_freedom.lin.x ||
-           p2->physics.mov_freedom.lin.x;
-        p3->physics.mov_freedom.lin.y = p1->physics.mov_freedom.lin.y ||
-           p2->physics.mov_freedom.lin.y;
-        p3->physics.mov_freedom.lin.z = p1->physics.mov_freedom.lin.z ||
-           p2->physics.mov_freedom.lin.z;
-        p3->physics.mov_freedom.ang.x = p1->physics.mov_freedom.ang.x ||
-           p2->physics.mov_freedom.ang.x;
-        p3->physics.mov_freedom.ang.y = p1->physics.mov_freedom.ang.y ||
-           p2->physics.mov_freedom.ang.y;
-        p3->physics.mov_freedom.ang.z = p1->physics.mov_freedom.ang.z ||
-           p2->physics.mov_freedom.ang.z;
+                  if ((p1->physics->material) && (p2->physics->material))
+                    p3_write->material = p1->physics->material;
+                  else
+                    p3_write->material = EPHYSICS_BODY_MATERIAL_CUSTOM;
+
+                  p3_write->light_on = p1->physics->light_on || 
p2->physics->light_on;
+                  p3_write->backcull = p1->physics->backcull || 
p2->physics->backcull;
+
+                  p3_write->mov_freedom.lin.x = p1->physics->mov_freedom.lin.x 
||
+                    p2->physics->mov_freedom.lin.x;
+                  p3_write->mov_freedom.lin.y = p1->physics->mov_freedom.lin.y 
||
+                    p2->physics->mov_freedom.lin.y;
+                  p3_write->mov_freedom.lin.z = p1->physics->mov_freedom.lin.z 
||
+                    p2->physics->mov_freedom.lin.z;
+                  p3_write->mov_freedom.ang.x = p1->physics->mov_freedom.ang.x 
||
+                    p2->physics->mov_freedom.ang.x;
+                  p3_write->mov_freedom.ang.y = p1->physics->mov_freedom.ang.y 
||
+                    p2->physics->mov_freedom.ang.y;
+                  p3_write->mov_freedom.ang.z = p1->physics->mov_freedom.ang.z 
||
+                    p2->physics->mov_freedom.ang.z;
+               }
+             EINA_COW_CALC_PHYSICS_END(p3, p3_write);
+          }
 #endif
 
         switch (part_type)
@@ -3162,52 +3206,56 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
         p3->lighted = p3->mapped ? p1->lighted | p2->lighted : 0;
         if (p1->mapped)
           {
-             p3->map.center.x = INTP(p1->map.center.x, p2->map.center.x, pos);
-             p3->map.center.y = INTP(p1->map.center.y, p2->map.center.y, pos);
-             p3->map.center.z = INTP(p1->map.center.z, p2->map.center.z, pos);
-             p3->map.rotation.x = FFP(p1->map.rotation.x, p2->map.rotation.x, 
pos);
-             p3->map.rotation.y = FFP(p1->map.rotation.y, p2->map.rotation.y, 
pos);
-             p3->map.rotation.z = FFP(p1->map.rotation.z, p2->map.rotation.z, 
pos);
+             EINA_COW_CALC_MAP_BEGIN(p3, p3_write)
+               {
+                  p3_write->center.x = INTP(p1->map->center.x, 
p2->map->center.x, pos);
+                  p3_write->center.y = INTP(p1->map->center.y, 
p2->map->center.y, pos);
+                  p3_write->center.z = INTP(p1->map->center.z, 
p2->map->center.z, pos);
+                  p3_write->rotation.x = FFP(p1->map->rotation.x, 
p2->map->rotation.x, pos);
+                  p3_write->rotation.y = FFP(p1->map->rotation.y, 
p2->map->rotation.y, pos);
+                  p3_write->rotation.z = FFP(p1->map->rotation.z, 
p2->map->rotation.z, pos);
 
-#define MIX(P1, P2, P3, pos, info)              \
-             P3->info = P1->info + TO_INT(SCALE(pos, P2->info - P1->info));
+#define MIX(P1, P2, P3, pos, info)                                      \
+                  P3->info = P1->map->info + TO_INT(SCALE(pos, P2->map->info - 
P1->map->info));
 
-             if (p1->lighted && p2->lighted)
-               {
-                  MIX(p1, p2, p3, pos, map.light.x);
-                  MIX(p1, p2, p3, pos, map.light.y);
-                  MIX(p1, p2, p3, pos, map.light.z);
-                  MIX(p1, p2, p3, pos, map.light.r);
-                  MIX(p1, p2, p3, pos, map.light.g);
-                  MIX(p1, p2, p3, pos, map.light.b);
-                  MIX(p1, p2, p3, pos, map.light.ar);
-                  MIX(p1, p2, p3, pos, map.light.ag);
-                  MIX(p1, p2, p3, pos, map.light.ab);
-               }
-             else if (p1->lighted)
-               {
-                  memcpy(&p3->map.light, &p1->map.light, sizeof 
(p1->map.light));
-               }
-             else if (p2->lighted)
-               {
-                  memcpy(&p3->map.light, &p2->map.light, sizeof 
(p2->map.light));
-               }
+                  if (p1->lighted && p2->lighted)
+                    {
+                       MIX(p1, p2, p3_write, pos, light.x);
+                       MIX(p1, p2, p3_write, pos, light.y);
+                       MIX(p1, p2, p3_write, pos, light.z);
+                       MIX(p1, p2, p3_write, pos, light.r);
+                       MIX(p1, p2, p3_write, pos, light.g);
+                       MIX(p1, p2, p3_write, pos, light.b);
+                       MIX(p1, p2, p3_write, pos, light.ar);
+                       MIX(p1, p2, p3_write, pos, light.ag);
+                       MIX(p1, p2, p3_write, pos, light.ab);
+                    }
+                  else if (p1->lighted)
+                    {
+                       memcpy(&p3_write->light, &p1->map->light, sizeof 
(p1->map->light));
+                    }
+                  else if (p2->lighted)
+                    {
+                       memcpy(&p3_write->light, &p2->map->light, sizeof 
(p2->map->light));
+                    }
 
-             if (p1->persp_on && p2->persp_on)
-               {
-                  MIX(p1, p2, p3, pos, map.persp.x);
-                  MIX(p1, p2, p3, pos, map.persp.y);
-                  MIX(p1, p2, p3, pos, map.persp.z);
-                  MIX(p1, p2, p3, pos, map.persp.focal);
-               }
-             else if (p1->persp_on)
-               {
-                  memcpy(&p3->map.persp, &p1->map.persp, sizeof 
(p1->map.persp));
-               }
-             else if (p2->persp_on)
-               {
-                  memcpy(&p3->map.persp, &p2->map.persp, sizeof 
(p2->map.persp));
+                  if (p1->persp_on && p2->persp_on)
+                    {
+                       MIX(p1, p2, p3_write, pos, persp.x);
+                       MIX(p1, p2, p3_write, pos, persp.y);
+                       MIX(p1, p2, p3_write, pos, persp.z);
+                       MIX(p1, p2, p3_write, pos, persp.focal);
+                    }
+                  else if (p1->persp_on)
+                    {
+                       memcpy(&p3_write->persp, &p1->map->persp, sizeof 
(p1->map->persp));
+                    }
+                  else if (p2->persp_on)
+                    {
+                       memcpy(&p3_write->persp, &p2->map->persp, sizeof 
(p2->map->persp));
+                    }
                }
+             EINA_COW_CALC_MAP_END(p3, p3_write);
           }
 
         pf = p3;
@@ -3221,10 +3269,14 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
      {
         if (ed->persp)
           {
-             pf->map.persp.x = ed->persp->px;
-             pf->map.persp.y = ed->persp->py;
-             pf->map.persp.z = ed->persp->z0;
-             pf->map.persp.focal = ed->persp->foc;
+             EINA_COW_CALC_MAP_BEGIN(pf, pf_write)
+               {
+                  pf_write->persp.x = ed->persp->px;
+                  pf_write->persp.y = ed->persp->py;
+                  pf_write->persp.z = ed->persp->z0;
+                  pf_write->persp.focal = ed->persp->foc;
+               }
+             EINA_COW_CALC_MAP_END(pf, pf_write);
           }
         else
           {
@@ -3234,20 +3286,24 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
              ps = edje_object_perspective_get(ed->obj);
              if (!ps)
                ps = 
edje_evas_global_perspective_get(evas_object_evas_get(ed->obj));
-             if (ps)
-               {
-                  pf->map.persp.x = ps->px;
-                  pf->map.persp.y = ps->py;
-                  pf->map.persp.z = ps->z0;
-                  pf->map.persp.focal = ps->foc;
-               }
-             else
+             EINA_COW_CALC_MAP_BEGIN(pf, pf_write)
                {
-                  pf->map.persp.x = ed->x + (ed->w / 2);
-                  pf->map.persp.y = ed->y + (ed->h / 2);
-                  pf->map.persp.z = 0;
-                  pf->map.persp.focal = 1000;
+                  if (ps)
+                    {
+                       pf_write->persp.x = ps->px;
+                       pf_write->persp.y = ps->py;
+                       pf_write->persp.z = ps->z0;
+                       pf_write->persp.focal = ps->foc;
+                    }
+                  else
+                    {
+                       pf_write->persp.x = ed->x + (ed->w / 2);
+                       pf_write->persp.y = ed->y + (ed->h / 2);
+                       pf_write->persp.z = 0;
+                       pf_write->persp.focal = 1000;
+                    }
                }
+             EINA_COW_CALC_MAP_END(pf, pf_write);
           }
      }
 
@@ -3346,7 +3402,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
                         (chosen_desc != ep->prev_description)) ||
                        (pf != p1))
                      _edje_physics_body_props_update(
-                        ep, pf, !pf->physics.ignore_part_pos);
+                        ep, pf, !pf->physics->ignore_part_pos);
                 }
               else
                 eo_do(ep->object,
@@ -3462,27 +3518,27 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
                   evas_map_point_image_uv_set(map, 3, 0.0, ih );
                }
              evas_map_util_3d_rotate(map,
-                                     TO_DOUBLE(pf->map.rotation.x),
-                                     TO_DOUBLE(pf->map.rotation.y),
-                                     TO_DOUBLE(pf->map.rotation.z),
-                                     pf->map.center.x, pf->map.center.y,
-                                     pf->map.center.z);
+                                     TO_DOUBLE(pf->map->rotation.x),
+                                     TO_DOUBLE(pf->map->rotation.y),
+                                     TO_DOUBLE(pf->map->rotation.z),
+                                     pf->map->center.x, pf->map->center.y,
+                                     pf->map->center.z);
 
              // calculate light color & position etc. if there is one
              if (pf->lighted)
                {
                   evas_map_util_3d_lighting(map,
-                                            pf->map.light.x, pf->map.light.y, 
pf->map.light.z,
-                                            pf->map.light.r, pf->map.light.g, 
pf->map.light.b,
-                                            pf->map.light.ar, 
pf->map.light.ag, pf->map.light.ab);
+                                            pf->map->light.x, 
pf->map->light.y, pf->map->light.z,
+                                            pf->map->light.r, 
pf->map->light.g, pf->map->light.b,
+                                            pf->map->light.ar, 
pf->map->light.ag, pf->map->light.ab);
                }
 
              // calculate perspective point
              if (chosen_desc->map.persp_on)
                {
                   evas_map_util_3d_perspective(map,
-                                               pf->map.persp.x, 
pf->map.persp.y, pf->map.persp.z,
-                                               pf->map.persp.focal);
+                                               pf->map->persp.x, 
pf->map->persp.y, pf->map->persp.z,
+                                               pf->map->persp.focal);
                }
 
              // handle backface culling (object is facing away from view
diff --git a/src/lib/edje/edje_embryo.c b/src/lib/edje/edje_embryo.c
index ab0012c..8282b9a 100644
--- a/src/lib/edje/edje_embryo.c
+++ b/src/lib/edje/edje_embryo.c
@@ -1762,6 +1762,11 @@ _edje_embryo_fn_custom_state(Embryo_Program *ep, 
Embryo_Cell *params)
 
    memset(rp->custom, 0, sizeof (Edje_Real_Part_State));
 
+   rp->custom->p.map = eina_cow_alloc(_edje_calc_params_map_cow);
+#ifdef HAVE_EPHYSICS
+   rp->custom->p.physics = eina_cow_alloc(_edje_calc_params_physics_cow);
+#endif
+
    *d = *parent;
 
    d->state.name = (char *)eina_stringshare_add("custom");
diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index 791428d..06cd2bc 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -463,6 +463,11 @@ _edje_object_file_set_internal(Evas_Object *obj, const 
char *file, const char *g
 
                  memset(rp, 0, sizeof (Edje_Real_Part));
 
+                 rp->param1.p.map = eina_cow_alloc(_edje_calc_params_map_cow);
+#ifdef HAVE_EPHYSICS
+                 rp->param1.p.physics = 
eina_cow_alloc(_edje_calc_params_physics_cow);
+#endif
+
                  if ((ep->dragable.x != 0) || (ep->dragable.y != 0))
                    {
                       rp->drag = calloc(1, sizeof (Edje_Real_Part_Drag));
@@ -1298,14 +1303,30 @@ _edje_file_del(Edje *ed)
             free(rp->param1.set);
 
             if (rp->param2)
-              free(rp->param2->set);
+              {
+                free(rp->param2->set);
+                eina_cow_free(_edje_calc_params_map_cow, rp->param2->p.map);
+#ifdef HAVE_EPHYSICS
+                eina_cow_free(_edje_calc_params_physics_cow, 
rp->param2->p.physics);
+#endif
+              }
             eina_mempool_free(_edje_real_part_state_mp, rp->param2);
 
             if (rp->custom)
-              free(rp->custom->set);
+              {
+                free(rp->custom->set);
+                eina_cow_free(_edje_calc_params_map_cow, rp->custom->p.map);
+#ifdef HAVE_EPHYSICS
+                eina_cow_free(_edje_calc_params_physics_cow, 
rp->custom->p.physics);
+#endif
+              }
             eina_mempool_free(_edje_real_part_state_mp, rp->custom);
              
             _edje_unref(rp->edje);
+            eina_cow_free(_edje_calc_params_map_cow, rp->param1.p.map);
+#ifdef HAVE_EPHYSICS
+            eina_cow_free(_edje_calc_params_physics_cow, rp->param1.p.physics);
+#endif
             eina_mempool_free(_edje_real_part_mp, rp);
          }
      }
diff --git a/src/lib/edje/edje_main.c b/src/lib/edje/edje_main.c
index 74b1349..42ff7f4 100644
--- a/src/lib/edje/edje_main.c
+++ b/src/lib/edje/edje_main.c
@@ -4,16 +4,26 @@ static Edje_Version _version = { VMAJ, VMIN, VMIC, VREV };
 EAPI Edje_Version *edje_version = &_version;
 
 static int _edje_init_count = 0;
+static Eina_Bool _need_imf = EINA_FALSE;
+
 int _edje_default_log_dom = -1;
 Eina_Mempool *_edje_real_part_mp = NULL;
 Eina_Mempool *_edje_real_part_state_mp = NULL;
-static Eina_Bool _need_imf = EINA_FALSE;
+
+Eina_Cow *_edje_calc_params_map_cow = NULL;
+Eina_Cow *_edje_calc_params_physics_cow = NULL;
+
+static const Edje_Calc_Params_Map default_calc_map = {
+  { 0, 0, 0 }, { 0.0, 0.0, 0.0 }, { 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0 }
+};
+
+static const Edje_Calc_Params_Physics default_calc_physics = {
+  0.0, 0.0, 0.0, 0.0, 0.0, { 0.0, 0.0 }, { 0.0, 0.0 }, 0, 0, { { 0, 0, 0 }, { 
0, 0, 0 } }, 0, 0, 0, 0
+};
 
 /*============================================================================*
  *                                   API                                      *
  
*============================================================================*/
-
-
 EAPI int
 edje_init(void)
 {
@@ -87,6 +97,9 @@ edje_init(void)
        goto shutdown_all;
      }
 
+   _edje_calc_params_map_cow = eina_cow_add("Edje Calc Params Map", sizeof 
(Edje_Calc_Params), 8, &default_calc_map);
+   _edje_calc_params_physics_cow= eina_cow_add("Edje Calc Params Physics", 
sizeof (Edje_Calc_Params_Physics), 8, &default_calc_physics);
+
    return _edje_init_count;
 
  shutdown_all:
@@ -143,6 +156,11 @@ _edje_shutdown_core(void)
    _edje_text_class_hash_free();
    _edje_edd_shutdown();
 
+   eina_cow_del(_edje_calc_params_map_cow);
+   eina_cow_del(_edje_calc_params_physics_cow);
+   _edje_calc_params_map_cow = NULL;
+   _edje_calc_params_physics_cow = NULL;
+
 #ifdef HAVE_ECORE_IMF
    if (_need_imf)
      ecore_imf_shutdown();
diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h
index ac3b169..42dc6ba 100644
--- a/src/lib/edje/edje_private.h
+++ b/src/lib/edje/edje_private.h
@@ -304,6 +304,8 @@ typedef struct _Edje_Real_Part Edje_Real_Part;
 typedef struct _Edje_Running_Program Edje_Running_Program;
 typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
 typedef struct _Edje_Calc_Params Edje_Calc_Params;
+typedef struct _Edje_Calc_Params_Map Edje_Calc_Params_Map;
+typedef struct _Edje_Calc_Params_Physics Edje_Calc_Params_Physics;
 typedef struct _Edje_Pending_Program Edje_Pending_Program;
 typedef struct _Edje_Text_Style Edje_Text_Style;
 typedef struct _Edje_Color_Class Edje_Color_Class;
@@ -1302,6 +1304,60 @@ struct _Edje
    Eina_Bool          recalc_hints : 1;
 };
 
+struct _Edje_Calc_Params_Map
+{
+   struct {
+      int x, y, z;
+   } center; // 12
+   struct {
+      FLOAT_T x, y, z;
+   } rotation; // 24
+   struct {
+      int x, y, z;
+      int r, g, b;
+      int ar, ag, ab;
+   } light; // 36
+   struct {
+      int x, y, z;
+      int focal;
+   } persp; // 16
+};
+
+struct _Edje_Calc_Params_Physics
+{
+   double mass; // 8
+   double restitution; // 8
+   double friction; // 8
+   double density; // 8
+   double hardness; // 8
+   struct {
+      double linear; //8
+      double angular; //8
+   } damping; // 16
+   struct {
+      double linear; //8
+      double angular; //8
+   } sleep; // 16
+   int z; // 4
+   int depth; // 4
+   struct {
+      struct {
+         unsigned char x;
+         unsigned char y;
+         unsigned char z;
+      } lin; // 3
+      struct {
+         unsigned char x;
+         unsigned char y;
+         unsigned char z;
+      } ang; // 3
+   } mov_freedom; // 6
+   unsigned char backcull;
+   unsigned char material; // 1
+   unsigned char light_on; // 1
+   unsigned char ignore_part_pos; //1
+};
+
 struct _Edje_Calc_Params
 {
    int              x, y, w, h; // 16
@@ -1330,64 +1386,16 @@ struct _Edje_Calc_Params
         Edje_Color     color2, color3; // 8
       } text; // 36
    } type; // 40
-   struct {
-      struct {
-         int x, y, z;
-      } center; // 12
-      struct {
-         FLOAT_T x, y, z;
-      } rotation; // 24
-      struct {
-         int x, y, z;
-         int r, g, b;
-         int ar, ag, ab;
-      } light; // 36
-      struct {
-         int x, y, z;
-         int focal;
-      } persp;
-   } map;
+   const Edje_Calc_Params_Map *map; // 88
 #ifdef HAVE_EPHYSICS
-   struct {
-      double mass; // 8
-      double restitution; // 8
-      double friction; // 8
-      double density; // 8
-      double hardness; // 8
-      struct {
-         double linear; //8
-         double angular; //8
-      } damping; // 16
-      struct {
-         double linear; //8
-         double angular; //8
-      } sleep; // 16
-      int z; // 4
-      int depth; // 4
-      struct {
-         struct {
-            unsigned char x;
-            unsigned char y;
-            unsigned char z;
-         } lin; // 3
-         struct {
-            unsigned char x;
-            unsigned char y;
-            unsigned char z;
-         } ang; // 3
-      } mov_freedom; // 6
-      unsigned char backcull;
-      unsigned char material; // 1
-      unsigned char light_on; // 1
-      unsigned char ignore_part_pos; //1
-   } physics;
+   const Edje_Calc_Params_Physics *physics; // 90
 #endif
    unsigned char    persp_on : 1;
    unsigned char    lighted : 1;
    unsigned char    mapped : 1;
    unsigned char    visible : 1;
    unsigned char    smooth : 1; // 1
-}; // 96
+}; // 271
 
 struct _Edje_Real_Part_Set
 {
@@ -1407,12 +1415,12 @@ struct _Edje_Real_Part_State
    Edje_Real_Part        *rel2_to_y; // 4
 #ifdef EDJE_CALC_CACHE
    int                    state; // 4
-   Edje_Calc_Params       p; // 96
+   Edje_Calc_Params       p; // 271
 #endif
    void                  *external_params; // 4
    Edje_Real_Part_Set    *set; // 4
 }; // 32
-// WITH EDJE_CALC_CACHE 132
+// WITH EDJE_CALC_CACHE 307
 
 struct _Edje_Real_Part_Drag
 {
@@ -1487,7 +1495,7 @@ struct _Edje_Real_Part
    FLOAT_T                   description_pos; // 8
    Edje_Part_Description_Common *chosen_description; // 4
    Edje_Real_Part_State      param1; // 32
-   // WITH EDJE_CALC_CACHE: 140
+   // WITH EDJE_CALC_CACHE: 307
    Edje_Real_Part_State     *param2, *custom; // 8
    Edje_Calc_Params         *current; // 4
    Edje_Real_Part           *clip_to; // 4
@@ -1513,8 +1521,8 @@ struct _Edje_Real_Part
 #ifdef EDJE_CALC_CACHE
    unsigned char             invalidate : 1; // 0
 #endif
-}; //  287 -> 126
-// WITH EDJE_CALC_CACHE: 404
+}; // 128
+// WITH EDJE_CALC_CACHE: 407
 
 struct _Edje_Running_Program
 {
@@ -1839,6 +1847,9 @@ extern FLOAT_T          _edje_password_show_last_timeout;
 extern Eina_Mempool *_edje_real_part_mp;
 extern Eina_Mempool *_edje_real_part_state_mp;
 
+extern Eina_Cow *_edje_calc_params_map_cow;
+extern Eina_Cow *_edje_calc_params_physics_cow;
+
 EAPI extern Eina_Mempool *_emp_RECTANGLE;
 EAPI extern Eina_Mempool *_emp_TEXT;
 EAPI extern Eina_Mempool *_emp_IMAGE;
diff --git a/src/lib/edje/edje_program.c b/src/lib/edje/edje_program.c
index e66554d..fbcc136 100644
--- a/src/lib/edje/edje_program.c
+++ b/src/lib/edje/edje_program.c
@@ -634,12 +634,18 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool 
force, const char *ssig,
 
                                 rp->current->x -= ed->x;
                                 rp->current->y -= ed->y;
-                                rp->current->map.center.x -= ed->x;
-                                rp->current->map.center.y -= ed->y;
-                                rp->current->map.light.x -= ed->x;
-                                rp->current->map.light.y -= ed->y;
-                                rp->current->map.persp.x -= ed->x;
-                                rp->current->map.persp.y -= ed->y;
+
+                                
EINA_COW_WRITE_BEGIN(_edje_calc_params_map_cow, rp->current->map, 
Edje_Calc_Params_Map, rp_write)
+                                  {
+                                    rp_write->center.x -= ed->x;
+                                    rp_write->center.y -= ed->y;
+                                    rp_write->light.x -= ed->x;
+                                    rp_write->light.y -= ed->y;
+                                    rp_write->persp.x -= ed->x;
+                                    rp_write->persp.y -= ed->y;
+                                  }
+                                EINA_COW_WRITE_END(_edje_calc_params_map_cow, 
rp->current->map, rp_write);
+
                               }
                             else
                               {
@@ -959,23 +965,19 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool 
force, const char *ssig,
         break;
 #ifdef HAVE_EPHYSICS
      case EDJE_ACTION_TYPE_PHYSICS_IMPULSE:
-        if (!_edje_physics_action_set(
-              ed, pr, ephysics_body_central_impulse_apply))
+        if (!_edje_physics_action_set(ed, pr, 
ephysics_body_central_impulse_apply))
           goto break_prog;
         break;
      case EDJE_ACTION_TYPE_PHYSICS_TORQUE_IMPULSE:
-        if (!_edje_physics_action_set(
-              ed, pr, ephysics_body_torque_impulse_apply))
+        if (!_edje_physics_action_set(ed, pr, 
ephysics_body_torque_impulse_apply))
           goto break_prog;
         break;
      case EDJE_ACTION_TYPE_PHYSICS_FORCE:
-        if (!_edje_physics_action_set(
-              ed, pr, ephysics_body_central_force_apply))
+        if (!_edje_physics_action_set(ed, pr, 
ephysics_body_central_force_apply))
           goto break_prog;
         break;
      case EDJE_ACTION_TYPE_PHYSICS_TORQUE:
-        if (!_edje_physics_action_set(
-              ed, pr, ephysics_body_torque_apply))
+        if (!_edje_physics_action_set(ed, pr, ephysics_body_torque_apply))
           goto break_prog;
         break;
      case EDJE_ACTION_TYPE_PHYSICS_FORCES_CLEAR:
@@ -992,13 +994,11 @@ _edje_program_run(Edje *ed, Edje_Program *pr, Eina_Bool 
force, const char *ssig,
           }
         break;
      case EDJE_ACTION_TYPE_PHYSICS_VEL_SET:
-        if (!_edje_physics_action_set(
-              ed, pr, ephysics_body_linear_velocity_set))
+        if (!_edje_physics_action_set(ed, pr, 
ephysics_body_linear_velocity_set))
           goto break_prog;
         break;
      case EDJE_ACTION_TYPE_PHYSICS_ANG_VEL_SET:
-        if (!_edje_physics_action_set(
-              ed, pr, ephysics_body_angular_velocity_set))
+        if (!_edje_physics_action_set(ed, pr, 
ephysics_body_angular_velocity_set))
           goto break_prog;
         break;
      case EDJE_ACTION_TYPE_PHYSICS_STOP:

-- 

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar

Reply via email to