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;

-- 


Reply via email to