From 601ac3dd90e0e0b1914970a90f1a5085035327ac Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 6 Aug 2012 08:34:39 +0000 Subject: [PATCH] elementary: make Elm_Slider update asynchronously. SVN revision: 74909 --- legacy/elementary/ChangeLog | 4 ++ legacy/elementary/NEWS | 1 + legacy/elementary/src/lib/elm_slider.c | 71 ++++++++++++++------------ 3 files changed, 44 insertions(+), 32 deletions(-) diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index 5ccfc4a7f3..3ccb1682d6 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -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. diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index 848bd0d150..df9976cabe 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -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: diff --git a/legacy/elementary/src/lib/elm_slider.c b/legacy/elementary/src/lib/elm_slider.c index 119141071a..3b14460503 100644 --- a/legacy/elementary/src/lib/elm_slider.c +++ b/legacy/elementary/src/lib/elm_slider.c @@ -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