edje - refactoring.
authorChunEon Park <hermet@hermet.pe.kr>
Thu, 6 Jun 2013 09:36:40 +0000 (18:36 +0900)
committerChunEon Park <hermet@hermet.pe.kr>
Thu, 6 Jun 2013 09:36:40 +0000 (18:36 +0900)
 edje_part_calc() is too heavy. split map calcutation from edje_part_calc()

src/lib/edje/edje_calc.c

index ff06521..c9ed2d8 100644 (file)
@@ -2810,39 +2810,104 @@ map_colors_interp(Edje_Calc_Params *p1, Edje_Calc_Params *p2,
 }
 
 static void
-_edje_map_color_update(Evas_Map *map, const  Edje_Calc_Params_Map *pmap,
-                       Eina_Bool map_colors_free)
+_edje_map_prop_set(Evas_Map *map, const  Edje_Calc_Params *pf,
+                   Edje_Part_Description_Common *chosen_desc,
+                   Edje_Real_Part *ep, Evas_Object *mo,
+                   Eina_Bool map_colors_free)
 {
-   Eina_List *colors = pmap->colors;
+   Eina_List *colors = pf->map->colors;
    Edje_Map_Color *color;
    Eina_List *l;
 
+   evas_map_util_points_populate_from_object(map, ep->object);
+
+   if (ep->part->type == EDJE_PART_TYPE_IMAGE ||
+       ((ep->part->type == EDJE_PART_TYPE_SWALLOW) &&
+        (eo_isa(mo, EVAS_OBJ_IMAGE_CLASS) &&
+         (!evas_object_image_source_get(mo))))
+      )
+     {
+        int iw = 1, ih = 1;
+
+        evas_object_image_size_get(mo, &iw, &ih);
+        evas_map_point_image_uv_set(map, 0, 0.0, 0.0);
+        evas_map_point_image_uv_set(map, 1, iw , 0.0);
+        evas_map_point_image_uv_set(map, 2, iw , ih );
+        evas_map_point_image_uv_set(map, 3, 0.0, ih );
+     }
+
+   //map color
    if (!colors)
      {
         evas_map_point_color_set(map, 0, 255, 255, 255, 255);
         evas_map_point_color_set(map, 1, 255, 255, 255, 255);
         evas_map_point_color_set(map, 2, 255, 255, 255, 255);
         evas_map_point_color_set(map, 3, 255, 255, 255, 255);
-        return;
      }
-
-   if (map_colors_free)
+   else
      {
-        EINA_LIST_FREE(colors, color)
+        if (map_colors_free)
           {
-             evas_map_point_color_set(map, color->idx, color->r, color->g,
-                                      color->b, color->a);
-             free(color);
+             EINA_LIST_FREE(colors, color)
+               {
+                  evas_map_point_color_set(map, color->idx, color->r, color->g,
+                                           color->b, color->a);
+                  free(color);
+               }
+          }
+        else
+          {
+             EINA_LIST_FOREACH(colors, l, color)
+               {
+                  evas_map_point_color_set(map, color->idx, color->r, color->g,
+                                           color->b, color->a);
+               }
           }
      }
-   else
+
+   //rotate
+   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);
+
+   // 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);
+     }
+
+   // calculate perspective point
+   if (chosen_desc->map.persp_on)
      {
-        EINA_LIST_FOREACH(colors, l, color)
+        evas_map_util_3d_perspective(map,
+                                     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
+   if (chosen_desc->map.backcull)
+     {
+        if (pf->visible)
           {
-             evas_map_point_color_set(map, color->idx, color->r, color->g,
-                                      color->b, color->a);
+             if (evas_map_util_clockwise_get(map))
+               evas_object_show(mo);
+             else evas_object_hide(mo);
           }
      }
+
+   // handle smooth
+   if (chosen_desc->map.smooth) evas_map_smooth_set(map, EINA_TRUE);
+   else evas_map_smooth_set(map, EINA_FALSE);
+   // handle alpha
+   if (chosen_desc->map.alpha) evas_map_alpha_set(map, EINA_TRUE);
+   else evas_map_alpha_set(map, EINA_FALSE);
 }
 
 #define Rel1X 0
@@ -3677,66 +3742,8 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int flags, Edje_Calc_Params *sta
              ed->have_mapped_part = EINA_TRUE;
              // create map and populate with part geometry
              if (!map) map = evas_map_new(4);
-             evas_map_util_points_populate_from_object(map, ep->object);
-             if (ep->part->type == EDJE_PART_TYPE_IMAGE ||
-                 ((ep->part->type == EDJE_PART_TYPE_SWALLOW) &&
-                  (eo_isa(mo, EVAS_OBJ_IMAGE_CLASS) &&
-                  (!evas_object_image_source_get(mo))))
-                )
-               {
-                  int iw = 1, ih = 1;
-
-                  evas_object_image_size_get(mo, &iw, &ih);
-                  evas_map_point_image_uv_set(map, 0, 0.0, 0.0);
-                  evas_map_point_image_uv_set(map, 1, iw , 0.0);
-                  evas_map_point_image_uv_set(map, 2, iw , ih );
-                  evas_map_point_image_uv_set(map, 3, 0.0, ih );
-               }
-
-             _edje_map_color_update(map, pf->map, map_colors_free);
-
-             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);
-
-             // 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);
-               }
-
-             // 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);
-               }
-
-             // handle backface culling (object is facing away from view
-             if (chosen_desc->map.backcull)
-               {
-                  if (pf->visible)
-                    {
-                       if (evas_map_util_clockwise_get(map))
-                         evas_object_show(mo);
-                       else evas_object_hide(mo);
-                    }
-               }
-
-             // handle smooth
-             if (chosen_desc->map.smooth) evas_map_smooth_set(map, EINA_TRUE);
-             else evas_map_smooth_set(map, EINA_FALSE);
-             // handle alpha
-             if (chosen_desc->map.alpha) evas_map_alpha_set(map, EINA_TRUE);
-             else evas_map_alpha_set(map, EINA_FALSE);
 
+             _edje_map_prop_set(map, pf, chosen_desc, ep, mo, map_colors_free);
 
              if (ep->nested_smart)
                {  /* Apply map to smart obj holding nested parts */