elementary: make Elm_Slider update asynchronously.

SVN revision: 74909
This commit is contained in:
Cedric BAIL 2012-08-06 08:34:39 +00:00
parent 03ae812b1f
commit 601ac3dd90
3 changed files with 44 additions and 32 deletions

View File

@ -366,3 +366,7 @@
2012-08-02 Cedric Bail
* Fix elm_image_orient_set/get.
2012-08-06 Cedric Bail
* Make Elm_Slider update itself asynchronously.

View File

@ -35,6 +35,7 @@ Improvements:
* Allocate once and reuse Evas_Map.
* Allow freeze/thaw on Elm_Layout and reduce number of object update.
* Defer Elm_Calendar generation until really needed.
* Defer Elm_Slider update until really needed.
Removal:

View File

@ -162,9 +162,7 @@ _indicator_set(Evas_Object *obj)
static void
_slider_update(Evas_Object *obj)
{
_val_fetch(obj);
_units_set(obj);
_indicator_set(obj);
evas_object_smart_changed(obj);
}
static void
@ -383,14 +381,8 @@ success:
static void
_visuals_refresh(Evas_Object *obj)
{
ELM_SLIDER_DATA_GET(obj, sd);
if (sd->popup)
edje_object_scale_set(sd->popup, elm_widget_scale_get(obj) *
elm_config_scale_get());
_val_set(obj);
_units_set(obj);
_indicator_set(obj);
evas_object_smart_changed(obj);
}
static Eina_Bool
@ -417,6 +409,10 @@ _elm_slider_smart_theme(Evas_Object *obj)
if (!ELM_WIDGET_CLASS(_elm_slider_parent_sc)->theme(obj)) return EINA_FALSE;
if (sd->popup)
edje_object_scale_set(sd->popup, elm_widget_scale_get(obj) *
elm_config_scale_get());
if (sd->units)
elm_layout_signal_emit(obj, "elm,state,units,visible", "elm");
@ -442,7 +438,7 @@ _elm_slider_smart_theme(Evas_Object *obj)
if (sd->popup)
edje_object_message_signal_process(sd->popup);
elm_layout_sizing_eval(obj);
evas_object_smart_changed(obj);
return EINA_TRUE;
}
@ -646,6 +642,30 @@ _min_max_set(Evas_Object *obj)
}
}
static void
_elm_slider_smart_calculate(Evas_Object *obj)
{
ELM_SLIDER_DATA_GET(obj, sd);
elm_layout_freeze(obj);
if (sd->horizontal)
evas_object_size_hint_min_set
(sd->spacer, (double)sd->size * elm_widget_scale_get(obj) *
elm_config_scale_get(), 1);
else
evas_object_size_hint_min_set
(sd->spacer, 1, (double)sd->size * elm_widget_scale_get(obj) *
elm_config_scale_get());
_val_fetch(obj);
_units_set(obj);
_min_max_set(obj);
_indicator_set(obj);
elm_layout_thaw(obj);
}
static void
_elm_slider_smart_add(Evas_Object *obj)
{
@ -713,7 +733,7 @@ _elm_slider_smart_add(Evas_Object *obj)
elm_widget_can_focus_set(obj, EINA_TRUE);
elm_layout_sizing_eval(obj);
evas_object_smart_changed(obj);
}
static void
@ -735,6 +755,7 @@ _elm_slider_smart_set_user(Elm_Slider_Smart_Class *sc)
{
ELM_WIDGET_CLASS(sc)->base.add = _elm_slider_smart_add;
ELM_WIDGET_CLASS(sc)->base.del = _elm_slider_smart_del;
ELM_WIDGET_CLASS(sc)->base.calculate = _elm_slider_smart_calculate;
ELM_WIDGET_CLASS(sc)->theme = _elm_slider_smart_theme;
ELM_WIDGET_CLASS(sc)->event = _elm_slider_smart_event;
@ -792,14 +813,6 @@ elm_slider_span_size_set(Evas_Object *obj,
if (sd->size == size) return;
sd->size = size;
if (sd->horizontal)
evas_object_size_hint_min_set
(sd->spacer, (double)sd->size * elm_widget_scale_get(obj) *
elm_config_scale_get(), 1);
else
evas_object_size_hint_min_set
(sd->spacer, 1, (double)sd->size * elm_widget_scale_get(obj) *
elm_config_scale_get());
if (sd->indicator_show)
{
@ -814,7 +827,7 @@ elm_slider_span_size_set(Evas_Object *obj,
edje_object_signal_emit(sd->popup, "elm,state,val,hide", "elm");
}
elm_layout_sizing_eval(obj);
evas_object_smart_changed(obj);
}
EAPI Evas_Coord
@ -849,10 +862,7 @@ elm_slider_unit_format_set(Evas_Object *obj,
edje_object_signal_emit(sd->popup, "elm,state,units,hidden", "elm");
}
_min_max_set(obj);
_units_set(obj);
elm_layout_sizing_eval(obj);
evas_object_smart_changed(obj);
}
EAPI const char *
@ -872,7 +882,7 @@ elm_slider_indicator_format_set(Evas_Object *obj,
ELM_SLIDER_DATA_GET(obj, sd);
eina_stringshare_replace(&sd->indicator, indicator);
_indicator_set(obj);
evas_object_smart_changed(obj);
}
EAPI const char *
@ -921,8 +931,6 @@ elm_slider_min_max_set(Evas_Object *obj,
if (sd->val < sd->val_min) sd->val = sd->val_min;
if (sd->val > sd->val_max) sd->val = sd->val_max;
_min_max_set(obj);
_visuals_refresh(obj);
}
@ -1014,7 +1022,7 @@ elm_slider_indicator_format_function_set(Evas_Object *obj,
sd->indicator_format_func = func;
sd->indicator_format_free = free_func;
_indicator_set(obj);
evas_object_smart_changed(obj);
}
EAPI void
@ -1028,8 +1036,7 @@ elm_slider_units_format_function_set(Evas_Object *obj,
sd->units_format_func = func;
sd->units_format_free = free_func;
_min_max_set(obj);
_units_set(obj);
evas_object_smart_changed(obj);
}
EAPI void
@ -1053,7 +1060,7 @@ elm_slider_indicator_show_set(Evas_Object *obj,
edje_object_signal_emit(sd->popup, "elm,state,val,hide", "elm");
}
elm_layout_sizing_eval(obj);
evas_object_smart_changed(obj);
}
EAPI Eina_Bool