edje calc - merge 2 switch statements that are doing 2 phases

we have nigh identical switch logic, so merge these to avoid multiple
switches and type matches. it localises per-type logic too which is
nicer.
This commit is contained in:
Carsten Haitzler 2019-08-20 10:57:02 +01:00
parent cfa8224140
commit d436971958
1 changed files with 42 additions and 57 deletions

View File

@ -2815,8 +2815,8 @@ _edje_part_recalc_single_physics(Edje_Calc_Params *params,
#endif
static void
_edje_part_calc_single_fixed_info(Edje *ed, Edje_Real_Part *ep,
Eina_Bool fixedw, Eina_Bool fixedh)
_edje_part_recalc_single_fixed_info(Edje *ed, Edje_Real_Part *ep,
Eina_Bool fixedw, Eina_Bool fixedh)
{
INF("file %s, group %s has a non-fixed part '%s'. You should add "
"'fixed: %d %d'. But in order to optimize the edje calc, we "
@ -2825,10 +2825,10 @@ _edje_part_calc_single_fixed_info(Edje *ed, Edje_Real_Part *ep,
}
static void
_edje_part_calc_single_image0(Edje *ed, Edje_Real_Part *ep,
Edje_Calc_Params *params,
Edje_Part_Description_Image *img_desc,
FLOAT_T pos)
_edje_part_recalc_single_image0(Edje *ed, Edje_Real_Part *ep,
Edje_Calc_Params *params,
Edje_Part_Description_Image *img_desc,
FLOAT_T pos)
{
Edje_Real_Part_Set *set;
@ -2857,9 +2857,9 @@ _edje_part_calc_single_image0(Edje *ed, Edje_Real_Part *ep,
}
static void
_edje_part_calc_single_text0(Edje_Calc_Params *params,
Edje_Part_Description_Text *text_desc,
Edje_Color_Class *cc)
_edje_part_recalc_single_text0(Edje_Calc_Params *params,
Edje_Part_Description_Text *text_desc,
Edje_Color_Class *cc)
{
_edje_calc_params_need_type_text(params);
/* text.align */
@ -2893,8 +2893,8 @@ _edje_part_calc_single_text0(Edje_Calc_Params *params,
}
static void
_edje_part_calc_single_light0(Edje_Calc_Params *params,
Edje_Part_Description_Light *light_desc)
_edje_part_recalc_single_light0(Edje_Calc_Params *params,
Edje_Part_Description_Light *light_desc)
{
_edje_calc_params_need_type_node(params);
params->type.node->data[0] = light_desc->light.orientation.data[0];
@ -2904,8 +2904,8 @@ _edje_part_calc_single_light0(Edje_Calc_Params *params,
}
static void
_edje_part_calc_single_camera0(Edje_Calc_Params *params,
Edje_Part_Description_Camera *camera_desc)
_edje_part_recalc_single_camera0(Edje_Calc_Params *params,
Edje_Part_Description_Camera *camera_desc)
{
_edje_calc_params_need_type_node(params);
params->type.node->data[0] = camera_desc->camera.orientation.data[0];
@ -2915,8 +2915,8 @@ _edje_part_calc_single_camera0(Edje_Calc_Params *params,
}
static void
_edje_part_calc_single_mesh0(Edje_Calc_Params *params,
Edje_Part_Description_Mesh_Node *mesh_desc)
_edje_part_recalc_single_mesh0(Edje_Calc_Params *params,
Edje_Part_Description_Mesh_Node *mesh_desc)
{
_edje_calc_params_need_type_node(params);
params->type.node->frame = mesh_desc->mesh_node.mesh.frame;
@ -2986,7 +2986,7 @@ _edje_part_recalc_single(Edje *ed,
fixedh = EINA_TRUE;
}
if (fixedw || fixedh)
_edje_part_calc_single_fixed_info(ed, ep, fixedw, fixedh);
_edje_part_recalc_single_fixed_info(ed, ep, fixedw, fixedh);
/* colors */
if (ep->part->type != EDJE_PART_TYPE_SPACER)
@ -3034,63 +3034,33 @@ _edje_part_recalc_single(Edje *ed,
// set parameters, some are required for recalc_single_text[block]
switch (ep->part->type)
{
case EDJE_PART_TYPE_IMAGE:
_edje_part_calc_single_image0(ed, ep, params, (Edje_Part_Description_Image *)desc, pos);
break;
case EDJE_PART_TYPE_TEXT:
case EDJE_PART_TYPE_TEXTBLOCK:
_edje_part_calc_single_text0(params, (Edje_Part_Description_Text *)desc, cc);
break;
case EDJE_PART_TYPE_SPACER:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_BOX:
case EDJE_PART_TYPE_TABLE:
case EDJE_PART_TYPE_SWALLOW:
case EDJE_PART_TYPE_GROUP:
case EDJE_PART_TYPE_PROXY:
case EDJE_PART_TYPE_SNAPSHOT:
case EDJE_PART_TYPE_VECTOR:
break;
case EDJE_PART_TYPE_LIGHT:
_edje_part_calc_single_light0(params, (Edje_Part_Description_Light *)desc);
break;
case EDJE_PART_TYPE_CAMERA:
_edje_part_calc_single_camera0(params, (Edje_Part_Description_Camera *)desc);
break;
case EDJE_PART_TYPE_MESH_NODE:
_edje_part_calc_single_mesh0(params, (Edje_Part_Description_Mesh_Node *)desc);
break;
case EDJE_PART_TYPE_GRADIENT:
// FIXME: THIS ONE SHOULD NEVER BE TRIGGERED
break;
default:
break;
}
// limit size if needed
switch (ep->part->type)
{
// if we have text that wants to make the min size the text size...
case EDJE_PART_TYPE_TEXTBLOCK:
_edje_part_recalc_single_textblock(sc, ed, ep, (Edje_Part_Description_Text *)chosen_desc, params, &minw, &minh, &maxw, &maxh);
break;
case EDJE_PART_TYPE_TEXT:
_edje_part_recalc_single_text0(params, (Edje_Part_Description_Text *)desc, cc);
// limit size if needed
_edje_part_recalc_single_text(sc, ed, ep, (Edje_Part_Description_Text *)desc, (Edje_Part_Description_Text *)chosen_desc, params, &minw, &minh, &maxw, &maxh);
_edje_part_recalc_single_filter(ed, ep, desc, chosen_desc, pos);
break;
case EDJE_PART_TYPE_TEXTBLOCK:
_edje_part_recalc_single_text0(params, (Edje_Part_Description_Text *)desc, cc);
// limit size if needed
_edje_part_recalc_single_textblock(sc, ed, ep, (Edje_Part_Description_Text *)chosen_desc, params, &minw, &minh, &maxw, &maxh);
break;
// or table/box containers that want to do the same
case EDJE_PART_TYPE_TABLE:
// limit size if needed
if (((((Edje_Part_Description_Table *)chosen_desc)->table.min.h) ||
(((Edje_Part_Description_Table *)chosen_desc)->table.min.v)))
_edje_part_recalc_single_table(ep, chosen_desc, &minw, &minh);
break;
case EDJE_PART_TYPE_BOX:
// limit size if needed
if ((((Edje_Part_Description_Box *)chosen_desc)->box.min.h) ||
(((Edje_Part_Description_Box *)chosen_desc)->box.min.v))
_edje_part_recalc_single_box(ep, chosen_desc, &minw, &minh);
break;
// or an image that also wants to do this
case EDJE_PART_TYPE_IMAGE:
_edje_part_recalc_single_image0(ed, ep, params, (Edje_Part_Description_Image *)desc, pos);
// limit size if needed
if (chosen_desc->min.limit || chosen_desc->max.limit)
_edje_part_recalc_single_image(ed, ep, chosen_desc, pos, &minw, &minh, &maxw, &maxh);
EINA_FALLTHROUGH;
@ -3099,6 +3069,21 @@ _edje_part_recalc_single(Edje *ed,
// image. proxy, snapshot share this filter recalc, so fall through
_edje_part_recalc_single_filter(ed, ep, desc, chosen_desc, pos);
break;
case EDJE_PART_TYPE_LIGHT:
_edje_part_recalc_single_light0(params, (Edje_Part_Description_Light *)desc);
break;
case EDJE_PART_TYPE_CAMERA:
_edje_part_recalc_single_camera0(params, (Edje_Part_Description_Camera *)desc);
break;
case EDJE_PART_TYPE_MESH_NODE:
_edje_part_recalc_single_mesh0(params, (Edje_Part_Description_Mesh_Node *)desc);
break;
case EDJE_PART_TYPE_SPACER:
case EDJE_PART_TYPE_RECTANGLE:
case EDJE_PART_TYPE_SWALLOW:
case EDJE_PART_TYPE_GROUP:
case EDJE_PART_TYPE_VECTOR:
case EDJE_PART_TYPE_GRADIENT: // FIXME: THIS ONE SHOULD NEVER BE TRIGGERED
default:
break;
}