datetime: Refactor to launch test_datetime little bit faster

- Added enabled_filed_count to avoid loop in _elm_datetime_smart_sizing_eval().
  sizing_eval is called many times but field_count is only changed when called
  _reload_format().
- Moved redundant if statement out of the loop in _field_list_display().
- Removed redundant call from _elm_datetime_smart_add().
  _field_list_arrange() is called in _reload_format().
This commit is contained in:
Ryuan Choi 2014-02-03 09:03:26 +09:00
parent 2677fd33fb
commit c449cc96c6
2 changed files with 15 additions and 15 deletions

View File

@ -103,14 +103,13 @@ _field_list_display(Evas_Object *obj)
ELM_DATETIME_DATA_GET(obj, sd);
if (!dt_mod || !dt_mod->field_value_display) return;
for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
{
field = sd->field_list + idx;
if (field->fmt_exist && field->visible)
{
if ((dt_mod) && (dt_mod->field_value_display))
dt_mod->field_value_display(sd->mod_data, field->item_obj);
}
dt_mod->field_value_display(sd->mod_data, field->item_obj);
}
}
@ -326,6 +325,7 @@ _reload_format(Evas_Object *obj)
_expand_format(dt_fmt);
// reset all the fields to disable state
sd->enabled_field_count = 0;
for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
{
field = sd->field_list + idx;
@ -336,6 +336,13 @@ _reload_format(Evas_Object *obj)
field_count = _parse_format(obj, dt_fmt);
free(dt_fmt);
for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
{
field = sd->field_list + idx;
if (field->fmt_exist && field->visible)
sd->enabled_field_count++;
}
// assign locations to disabled fields for uniform usage
for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
{
@ -495,20 +502,14 @@ _elm_datetime_smart_disable(Eo *obj, void *_pd, va_list *list)
static void
_elm_datetime_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
{
Datetime_Field *field;
Evas_Coord minw = -1, minh = -1;
unsigned int idx, field_count = 0;
Elm_Datetime_Smart_Data *sd = _pd;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
{
field = sd->field_list + idx;
if ((field->visible) && (field->fmt_exist)) field_count++;
}
if (field_count)
elm_coords_finger_size_adjust(field_count, &minw, 1, &minh);
if (sd->enabled_field_count)
elm_coords_finger_size_adjust(sd->enabled_field_count, &minw, 1, &minh);
edje_object_size_min_restricted_calc
(wd->resize_obj, &minw, &minh, minw, minh);
evas_object_size_hint_min_set(obj, minw, minh);
@ -836,8 +837,6 @@ _elm_datetime_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
_field_list_init(obj);
_reload_format(obj);
_field_list_arrange(obj);
elm_widget_can_focus_set(obj, EINA_TRUE);
elm_layout_sizing_eval(obj);

View File

@ -61,6 +61,7 @@ struct _Elm_Datetime_Smart_Data
Elm_Datetime_Module_Data *mod_data;
char format[ELM_DATETIME_MAX_FORMAT_LEN];
Evas_Object *access_obj;
int enabled_field_count;
Eina_Bool user_format : 1; /* whether user set
* format or default
* format. */