cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3c96fdfc69060d30c0c7e29b2054c66fa3a46575

commit 3c96fdfc69060d30c0c7e29b2054c66fa3a46575
Author: Woochan Lee <wc0917....@samsung.com>
Date:   Fri May 25 10:28:39 2018 -0700

    elm_spinner: Spinner value adjust when round enabled.
    
    Summary:
    The round value was not being applied when input the value as an internal 
entry.
    
    @fix
    
    Test Plan: elementary_test -> spinner sample.
    
    Reviewers: cedric, woohyun, Jaehyun_Cho
    
    Reviewed By: cedric
    
    Subscribers: cedric
    
    Differential Revision: https://phab.enlightenment.org/D5843
    
    Reviewed-by: Cedric BAIL <ced...@osg.samsung.com>
---
 src/lib/elementary/elm_spinner.c | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/lib/elementary/elm_spinner.c b/src/lib/elementary/elm_spinner.c
index b42ef3f4cc..f7744f9913 100644
--- a/src/lib/elementary/elm_spinner.c
+++ b/src/lib/elementary/elm_spinner.c
@@ -236,13 +236,24 @@ _delay_change_timer_cb(void *data)
 
 static Eina_Bool
 _value_set(Evas_Object *obj,
-           double new_val)
+           double val, double changed)
 {
+   double new_val;
+
    ELM_SPINNER_DATA_GET(obj, sd);
 
    if (sd->round > 0)
-     new_val = sd->val_base +
-       (double)((((int)(new_val - sd->val_base)) / sd->round) * sd->round);
+     {
+        //Spin value changed by entry input.
+        if (changed != 0)
+          new_val = sd->val_base +
+            (double)((((int)((val + changed) - sd->val_base)) / sd->round) * 
sd->round);
+        else
+          new_val = sd->val_base +
+            (double)((((int)(val - sd->val_base + (sd->round / 2))) / 
sd->round) * sd->round);
+     }
+   else
+     new_val = val + changed;
 
    if (sd->wrap)
      {
@@ -336,7 +347,7 @@ _drag_cb(void *data,
    if (!strncmp(style, "vertical", 8)) delta *= -1;
    /* If we are on rtl mode, change the delta to be negative on such changes */
    if (efl_ui_mirrored_get(obj)) delta *= -1;
-   if (_value_set(data, sd->val + delta)) _label_write(data);
+   if (_value_set(data, sd->val, delta)) _label_write(data);
    sd->dragging = 1;
 }
 
@@ -414,12 +425,8 @@ _entry_value_apply(Evas_Object *obj)
 
    val = strtod(str, &end);
    if (((*end != '\0') && (!isspace(*end))) || (fabs(val - sd->val) < 
DBL_EPSILON)) return;
-   elm_spinner_value_set(obj, val);
 
-   efl_event_callback_legacy_call(obj, ELM_SPINNER_EVENT_CHANGED, NULL);
-   ecore_timer_del(sd->delay_change_timer);
-   sd->delay_change_timer = ecore_timer_add(ELM_SPINNER_DELAY_CHANGE_TIME,
-                                            _delay_change_timer_cb, obj);
+   if (_value_set(obj, val, 0.0)) _label_write(obj);
 }
 
 static int
@@ -691,7 +698,7 @@ _spin_value(void *data)
    // spin_timer does not exist when _spin_value() is called from wheel event
    if (sd->spin_timer)
      ecore_timer_interval_set(sd->spin_timer, sd->interval);
-   if (_value_set(data, sd->val + real_speed)) _label_write(data);
+   if (_value_set(data, sd->val, real_speed)) _label_write(data);
 
    return ECORE_CALLBACK_RENEW;
 }
@@ -1477,7 +1484,9 @@ _elm_spinner_efl_ui_range_range_value_set(Eo *obj, 
Elm_Spinner_Data *sd, double
 {
    if (sd->val == val) return;
 
-   sd->val = val;
+   sd->val = (sd->round <= 0) ? val : sd->val_base +
+      (double)((((int)(val - sd->val_base + (sd->round / 2))) / sd->round) * 
sd->round);
+
    sd->val_updated = EINA_FALSE;
 
    if (sd->val < sd->val_min)

-- 


Reply via email to