bu5hm4n pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=5efb4b374e6052fc401b109d6a98db7fe2ef3222
commit 5efb4b374e6052fc401b109d6a98db7fe2ef3222 Author: Marcel Hollerbach <m...@marcel-hollerbach.de> Date: Mon Jul 8 16:17:38 2019 +0200 efl_ui_*: get range users onto the same semantics this commits introduces unified behaviour for the users of the range interfaces. This includes: - The same errors for limit_set errors - The same errors for value setting outside the range Reviewed-by: Mike Blumenkrantz <michael.blumenkra...@gmail.com> Differential Revision: https://phab.enlightenment.org/D9241 --- src/lib/elementary/efl_ui_progressbar.c | 21 ++++++++++++++++++++ src/lib/elementary/efl_ui_slider.c | 35 ++++++++++++++++++++++++++++----- src/lib/elementary/efl_ui_spin.c | 24 +++++++++++++++------- src/lib/elementary/efl_ui_spin_button.c | 8 ++++++-- 4 files changed, 74 insertions(+), 14 deletions(-) diff --git a/src/lib/elementary/efl_ui_progressbar.c b/src/lib/elementary/efl_ui_progressbar.c index 637c54f8d6..f085924893 100644 --- a/src/lib/elementary/efl_ui_progressbar.c +++ b/src/lib/elementary/efl_ui_progressbar.c @@ -593,6 +593,17 @@ _progressbar_part_value_get(Efl_Ui_Progressbar_Data *sd, const char* part) EOLIAN static void _efl_ui_progressbar_efl_ui_range_display_range_value_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, double val) { + if (val < sd->val_min) + { + ERR("Error, value is less than minimum"); + return; + } + + if (val > sd->val_max) + { + ERR("Error, value is greater than maximum"); + return; + } if (EINA_DBL_EQ(sd->val, val)) return; if (elm_widget_is_legacy(obj)) @@ -644,6 +655,16 @@ _efl_ui_progressbar_pulse_get(const Eo *obj EINA_UNUSED, Efl_Ui_Progressbar_Data EOLIAN static void _efl_ui_progressbar_efl_ui_range_display_range_limits_set(Eo *obj, Efl_Ui_Progressbar_Data *sd, double min, double max) { + if (max < min) + { + ERR("Wrong params. min(%lf) is greater than max(%lf).", min, max); + return; + } + if (EINA_DBL_EQ(max, min)) + { + ERR("min and max must have a different value"); + return; + } if (elm_widget_is_legacy(obj)) _progress_part_min_max_set(obj, sd, "elm.cur.progressbar", min, max); else diff --git a/src/lib/elementary/efl_ui_slider.c b/src/lib/elementary/efl_ui_slider.c index 188d631ad2..3a6de63a26 100644 --- a/src/lib/elementary/efl_ui_slider.c +++ b/src/lib/elementary/efl_ui_slider.c @@ -719,7 +719,17 @@ _efl_ui_slider_efl_ui_layout_orientable_orientation_get(const Eo *obj EINA_UNUSE EOLIAN static void _efl_ui_slider_efl_ui_range_display_range_limits_set(Eo *obj, Efl_Ui_Slider_Data *sd, double min, double max) { - if ((sd->val_min == min) && (sd->val_max == max)) return; + if (max < min) + { + ERR("Wrong params. min(%lf) is greater than max(%lf).", min, max); + return; + } + if (EINA_DBL_EQ(max, min)) + { + ERR("min and max must have a different value"); + return; + } + if ((EINA_DBL_EQ(sd->val_min, min)) && (EINA_DBL_EQ(sd->val_max, max))) return; sd->val_min = min; sd->val_max = max; if (sd->val < sd->val_min) sd->val = sd->val_min; @@ -738,7 +748,19 @@ _efl_ui_slider_efl_ui_range_display_range_limits_get(const Eo *obj EINA_UNUSED, EOLIAN static void _efl_ui_slider_efl_ui_range_display_range_value_set(Eo *obj, Efl_Ui_Slider_Data *sd, double val) { - if (sd->val == val) return; + if (val < sd->val_min) + { + ERR("Error, value is less than minimum"); + return; + } + + if (val > sd->val_max) + { + ERR("Error, value is greater than maximum"); + return; + } + + if (EINA_DBL_EQ(val, sd->val)) return; sd->val = val; if (sd->val < sd->val_min) sd->val = sd->val_min; @@ -762,10 +784,13 @@ _efl_ui_slider_efl_ui_range_interactive_range_step_get(const Eo *obj EINA_UNUSED EOLIAN static void _efl_ui_slider_efl_ui_range_interactive_range_step_set(Eo *obj EINA_UNUSED, Efl_Ui_Slider_Data *sd, double step) { - if (sd->step == step) return; + if (step <= 0) + { + ERR("Wrong param. The step(%lf) should be greater than 0.0", step); + return; + } - if (step < 0.0) step = 0.0; - else if (step > 1.0) step = 1.0; + if (sd->step == step) return; sd->step = step; } diff --git a/src/lib/elementary/efl_ui_spin.c b/src/lib/elementary/efl_ui_spin.c index dddc869152..d6c717cb72 100644 --- a/src/lib/elementary/efl_ui_spin.c +++ b/src/lib/elementary/efl_ui_spin.c @@ -108,10 +108,13 @@ _efl_ui_spin_efl_ui_range_display_range_limits_set(Eo *obj, Efl_Ui_Spin_Data *sd { if (max < min) { - ERR("Wrong params. min(%lf) is bigger than max(%lf). It will swaped.", min, max); - double t = min; - min = max; - max = t; + ERR("Wrong params. min(%lf) is greater than max(%lf).", min, max); + return; + } + if (EINA_DBL_EQ(max, min)) + { + ERR("min and max must have a different value"); + return; } if ((EINA_DBL_EQ(sd->val_min, min)) && (EINA_DBL_EQ(sd->val_max, max))) return; @@ -153,9 +156,16 @@ EOLIAN static void _efl_ui_spin_efl_ui_range_display_range_value_set(Eo *obj, Efl_Ui_Spin_Data *sd, double val) { if (val < sd->val_min) - val = sd->val_min; - else if (val > sd->val_max) - val = sd->val_max; + { + ERR("Error, value is less than minimum"); + return; + } + + if (val > sd->val_max) + { + ERR("Error, value is greater than maximum"); + return; + } if (EINA_DBL_EQ(val, sd->val)) return; diff --git a/src/lib/elementary/efl_ui_spin_button.c b/src/lib/elementary/efl_ui_spin_button.c index c356686aea..a975df1327 100644 --- a/src/lib/elementary/efl_ui_spin_button.c +++ b/src/lib/elementary/efl_ui_spin_button.c @@ -168,7 +168,7 @@ static void _entry_value_apply(Evas_Object *obj) { const char *str; - double val; + double val, val_min, val_max; char *end; Efl_Ui_Spin_Button_Data *sd = efl_data_scope_get(obj, MY_CLASS); @@ -184,6 +184,8 @@ _entry_value_apply(Evas_Object *obj) val = strtod(str, &end); if (((*end != '\0') && (!isspace(*end))) || (fabs(val - pd->val) < DBL_EPSILON)) return; + efl_ui_range_limits_get(obj, &val_min, &val_max); + val = MIN(val_max, MAX(val_min, val)); efl_ui_range_value_set(obj, val); efl_event_callback_call(obj, EFL_UI_SPIN_EVENT_CHANGED, NULL); @@ -406,7 +408,9 @@ _spin_value(void *data) Efl_Ui_Spin_Button_Data *sd = efl_data_scope_get(data, MY_CLASS); Efl_Ui_Spin_Data *pd = efl_data_scope_get(data, EFL_UI_SPIN_CLASS); - if (_value_set(data, pd->val + (sd->inc_val ? pd->step : -pd->step))) + int absolut_value = pd->val + (sd->inc_val ? pd->step : -pd->step); + + if (_value_set(data, MIN(MAX(absolut_value, pd->val_min), pd->val_max))) _label_write(data); return ECORE_CALLBACK_RENEW; --