forked from enlightenment/efl
datetime : Enhance launching time more by reducing calls of sizing_eval()
elm_layout_content_set() calls elm_layout_sizing_eval() internally. So, there are many calls in _field_list_arrange() and it takes long time.
This commit is contained in:
parent
06274f1c60
commit
2d4b6cd81b
|
@ -217,9 +217,12 @@ _field_list_arrange(Evas_Object *obj)
|
||||||
Datetime_Field *field;
|
Datetime_Field *field;
|
||||||
char buf[BUFFER_SIZE];
|
char buf[BUFFER_SIZE];
|
||||||
int idx;
|
int idx;
|
||||||
|
Eina_Bool freeze;
|
||||||
|
|
||||||
ELM_DATETIME_DATA_GET(obj, sd);
|
ELM_DATETIME_DATA_GET(obj, sd);
|
||||||
|
|
||||||
|
freeze = sd->freeze_sizing;
|
||||||
|
sd->freeze_sizing = EINA_TRUE;
|
||||||
for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
|
for (idx = 0; idx < ELM_DATETIME_TYPE_COUNT; idx++)
|
||||||
{
|
{
|
||||||
field = sd->field_list + idx;
|
field = sd->field_list + idx;
|
||||||
|
@ -233,6 +236,7 @@ _field_list_arrange(Evas_Object *obj)
|
||||||
else
|
else
|
||||||
evas_object_hide(elm_layout_content_unset(obj, buf));
|
evas_object_hide(elm_layout_content_unset(obj, buf));
|
||||||
}
|
}
|
||||||
|
sd->freeze_sizing = freeze;
|
||||||
|
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
_field_list_display(obj);
|
_field_list_display(obj);
|
||||||
|
@ -502,6 +506,8 @@ _elm_datetime_smart_sizing_eval(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
Evas_Coord minw = -1, minh = -1;
|
Evas_Coord minw = -1, minh = -1;
|
||||||
|
|
||||||
Elm_Datetime_Smart_Data *sd = _pd;
|
Elm_Datetime_Smart_Data *sd = _pd;
|
||||||
|
if (sd->freeze_sizing) return;
|
||||||
|
|
||||||
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
||||||
|
|
||||||
if (sd->enabled_field_count)
|
if (sd->enabled_field_count)
|
||||||
|
@ -829,6 +835,7 @@ _elm_datetime_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
priv->freeze_sizing = EINA_TRUE;
|
||||||
if (!elm_layout_theme_set(obj, "datetime", "base",
|
if (!elm_layout_theme_set(obj, "datetime", "base",
|
||||||
elm_widget_style_get(obj)))
|
elm_widget_style_get(obj)))
|
||||||
CRI("Failed to set layout!");
|
CRI("Failed to set layout!");
|
||||||
|
@ -838,6 +845,7 @@ _elm_datetime_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
||||||
|
|
||||||
elm_widget_can_focus_set(obj, EINA_TRUE);
|
elm_widget_can_focus_set(obj, EINA_TRUE);
|
||||||
|
|
||||||
|
priv->freeze_sizing = EINA_FALSE;
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
|
|
||||||
// ACCESS
|
// ACCESS
|
||||||
|
@ -992,6 +1000,7 @@ _field_visible_set(Eo *obj, void *_pd, va_list *list)
|
||||||
|
|
||||||
field->visible = visible;
|
field->visible = visible;
|
||||||
|
|
||||||
|
sd->freeze_sizing = EINA_TRUE;
|
||||||
if (visible)
|
if (visible)
|
||||||
{
|
{
|
||||||
sd->enabled_field_count++;
|
sd->enabled_field_count++;
|
||||||
|
@ -1025,6 +1034,7 @@ _field_visible_set(Eo *obj, void *_pd, va_list *list)
|
||||||
snprintf(buf, sizeof(buf), EDC_PART_FIELD_STR, field->location);
|
snprintf(buf, sizeof(buf), EDC_PART_FIELD_STR, field->location);
|
||||||
evas_object_hide(elm_layout_content_unset(obj, buf));
|
evas_object_hide(elm_layout_content_unset(obj, buf));
|
||||||
}
|
}
|
||||||
|
sd->freeze_sizing = EINA_FALSE;
|
||||||
|
|
||||||
elm_layout_sizing_eval(obj);
|
elm_layout_sizing_eval(obj);
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,8 @@ struct _Elm_Datetime_Smart_Data
|
||||||
Eina_Bool user_format : 1; /* whether user set
|
Eina_Bool user_format : 1; /* whether user set
|
||||||
* format or default
|
* format or default
|
||||||
* format. */
|
* format. */
|
||||||
|
Eina_Bool freeze_sizing : 1; /* freeze sizing_eval to
|
||||||
|
* reduce unnecessary sizing */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Format_Map
|
struct _Format_Map
|
||||||
|
|
Loading…
Reference in New Issue